通过OMIM做一个癫痫panel

panel检测和外显子、全基因检测相比,有耗时短,价格便宜,针对性高等优点。 但是,缺点也是很明显的,比如说碱基个数不等的拷贝数/增添/缺失等突变,panel比较难测出来。 还有就是panel没有覆盖到就会有阴性的结果出现。还有就是panel都是基于前人的研究的,如果研究不准确,panel就会错。

而全基因,外显子等还有校正的余地。

这里以癫痫为例子,简单的介绍一个做panel的方法。 首先,我们要用到的数据库是OMIM,人类孟德尔遗传数据库。搜索癫痫,得到结果。 当然,单纯的epilepsy是不足以覆盖到所有癫痫基因的,我建议更准确的方法是找到所有癫痫的相关疾病。

epilepsy

点击download as下载相关文件。下载下来的文件里,需要的是‘Phenotype MIM number’。可以把这些数字单独弄成一个文件。

比如说,我有607093这个OMIM ID。就可以凭ID找到相关的页面。 还可以找到相关致病位点(Clinvar中提示为致病的位点)。 607093

一开始,其实我是想用request.get()来把这个页面的源代码爬下来然后再用BeautifulSoup分析的。

然而,先不说源代码的格式很乱很麻烦,OMIM贴心的又提供了一个download按钮。 所以,可以用下面的代码批量下载这些文件。 我是直接调用默认的浏览器来下载数据,这样不会触发反爬虫机制。


import time
import random
import sys
import webbrowser

sys.path.append('libs')

# 我把所有的id放在一个文件里了
omid = open('omid.txt', 'r')

for line in omid:
	om = line.split('\n')[0]
	n = random.randint(1, 5)
	url = 'https://www.omim.org/allelicVariant/' + om + '?format=tsv'
	webbrowser.open(url, new=2)
	print str(om)

	# 要有时间间隔的爬数据,不然别人发现会ban掉你的IP
	# 还有就是大量瞬间爬数据会让别人网站崩溃,不可以做这种事
	time.sleep(5 + n)

爬下来的文件,看了看格式把它们合并起来就行了。我把这些文件都放在’all’文件夹下,用以下代码合并

import os

outputfile = open('ep_omim.txt', 'w')
outputfile.write('Number	Phenotype	Mutation	dbSNP	ExAC dbSNP	ClinVar' + '\n')


for file in os.listdir('all'):
	inputfile = open(os.path.join('all', file), 'r')
	lines = inputfile.readlines()

	count = 0
	for line in lines:
		count += 1
		if count <= 9:
			continue
		else:
			if line == '\n':
				continue
			else:
				outputfile.write(line)
	inputfile.close()

outputfile.close()

以上。就做出一个简单的panel了。 后续的完善需要做的工作还很多呢。