本文已参与「新人创作礼」活动,一起开启掘金创作之路。
HGG.SNV【1】是一个了解不同人群中人类单核苷酸变异的进化和医学意义的数据库。这个数据库的亮点是它综合了很多项目的各种测序数据,其中包括HGDP、HapMap、gnomAD.genomes、SGDP等项目数据。其中包括220147份基因组数据,古人基因组1018份,覆盖了977个族群的268890619个位点。另一个亮点是有多种线上工具,操作方便。
网站链接:www.pggsnv.org/
但是当我们要查询的数据量十分庞大时会比较费时间,所以我们写一段python脚本来批量获取数据。
首先使用chrome对该网站的基本情况进行分析。使用Chrome的开发者工具对传输数据进行监控,并将传输数据筛选为fetch和XHR模式,发现该网站的前后端是通过json传输的,属于前后端分离的情况,所以我们可以直接向网站拉去请求获取json。
我们将其中的json打开,发现里面确实含有位点相关信息,所以双击该json文件获取url。
url:www.pggsnv.org/snvSvr/dist…\
接着我们对url进行解析。通过对比已知位点数据可知该url中的key应该是以这样的格式组成的:染色体号:碱基对位置-ref-alt
我们以《Nature-Genetics》期刊上的《Investigating the genetic architecture of noncognitive skills using GWAS-by-subtraction》【2】这篇文章的数据为例
设计出的爬虫脚本如下:
import requests
import json
import pandas as pd
df = pd.read_csv(inputs)
df1 = []
for c in range(len(df)-1):
e = df.loc[c]
data = json.loads(requests.get(f'https://www.pggsnv.org/snvSvr/distribute?key={int(e.CHR)}:{int(e.BP)}-{e.A1}-{e.A2}').text)['data']['genotypesList']
for i in data:
del[i['aaf']]
del[i['chrom']]
del[i['pos']]
del[i['id']]
i['rsid'] = e.SNP
geno = i['geno']
genotypes = {}
if geno is not None:
for a in geno:
if isinstance(geno[a], int) and a != 'no':
genotypes[a.upper()] = geno[a]
# 这个else记得一定不要删!要不会出bug
else:
pass
k = list(genotypes.keys())
v = list(genotypes.values())
for b in range(len(k)):
if k[b].count(i['alt']) == 1:
i['alt/ref'] = v[b]
elif k[b].count(i['alt']) == 2:
i['alt/alt'] = v[b]
elif k[b].count(i['alt']) == 0:
i['ref/ref'] = v[b]
del[i['geno']]
df1.append(i)
pd.DataFrame(df1).to_csv(output)
爬取效果如下:
reference:
【1】Chao Zhang#, Yang Gao#, Zhilin Ning#, Yan Lu#, Xiaoxi Zhang, Jiaojiao Liu, Bo Xie, Zhe Xue, Xiaoji Wang, Kai Yuan, Xueling Ge, Yuwen Pan, Chang Liu, Lei Tian, Yuchen Wang, Dongsheng Lu, Boon-Peng Hoh, Shuhua Xu*. PGG.SNV: understanding the evolutionary and medical implications of human single nucleotide variations in diverse populations. Genome Biology (2019), 20:215. doi.org/10.1186/s13…
【2】Demange, P.A., Malanchini, M., Mallard, T.T. et al. Investigating the genetic architecture of noncognitive skills using GWAS-by-subtraction. Nat Genet 53, 35–44 (2021). doi.org/10.1038/s41…