查看原文
其他

【直播】我的基因组59:把我的数据伪装成23andme或wegene的芯片数据

2017-02-23 Jimmy 生信技能树

为什么会有这个需求呢?很简单,因为国内的一些基因检测公司支持导入23andme的芯片数据做解读,而我正想看看一下他们的技术功底到底如何?

23andme和wegene都是用的一款特制的芯片,可以捕获基因组上面的一些特定位点而已,既然我已经测了全基因组,那么分分钟就可以从我的基因组分析结果里面提取出23andme的芯片位点,伪装成23andme的芯片数据!


我从谷歌里面找到了一个公共的数据,点击阅读原文查看这个公共数据的下载链接!

这很容易明白23andme的芯片数据是什么格式的,基因组坐标的转换对我等生物信息学工程师来说比吃饭还简单!(当然,我其实拿到了新版的数据,但是由于隐私问题,不便传播


转换很简单:

第一步,把芯片设计的rsID全部拿出来

第二步,根据rsID从我的VCF文件中挑取位点,并赋予纯合杂合基因型

第三步,去dbSNP数据库文件里面映射我VCF文件没有记录的点为野生型



  1. (perl -alne '{print if /^rs/}' dm_23andme_v3_110219.txt  |cut -f 1 >23andme.rsID.list

  2. cat ../variation/autochr.highQuali.dbsnp.vcf  23andme.rsID.list |perl -alne '{if($F[2]=~/^rs/){if(/1\/1/){$gt=$F[4].$F[4]}else{$gt=$F[3].$F[4]};$h{$F[2]}="$F[0]\t$F[1]\t$gt" }  print "$_\t$h{$_}" if /^rs/}' >my_23andme.1.txt

  3. zcat ~/annotation/variation/human/dbSNP/All_20160601.vcf.gz |perl -alne 'BEGIN{ open FH,"my_23andme.1.txt";while(<FH>){chomp;@F=split;if(/^rs/){ $pos{$.}=$_;if($F[3]){$h{$F[0]}=$_}else{$tmp{$F[0]}=1}  }} }{if(exists $tmp{$F[2]}){ $tmp{$F[2]}="$F[0]\t$F[1]\t$F[2]$F[2]"  }}END{foreach(sort{$a<=>$b} keys %pos){ if(exists $h{$pos{$_}} ){$value=$h{$pos{$_}}}else{$value=$tmp{$pos{$_}} } ;print "$pos{$_}\t$value" }}'


wegene的芯片数据在格式上是一模一样,因为他们用的都是illumina公司出品的定制化芯片。

本来是想上传这个公共数据去这个网站上面做一次免费报告生成,但是他们要求很多,搞了好几次还没成功,最后还是嫌弃我芯片版本太低了,所以我又用了下面的代码把旧基因组版本芯片数据转换成新的。


  1. zcat ~/annotation/variation/human/dbSNP/All_20160601.vcf.gz |perl -alne 'BEGIN{ open FH,"dm_23andme_v3_110219.txt";while(<FH>){chomp;@F=split;if(/^rs/){$pos{$.}=$_;$h{$F[0]}=$F[3]} } }{if(exists $h{$F[2]}){ $h{$F[2]}="$F[0]\t$F[1]\t$h{$F[2]}"  }}END{print "$pos{$_}\t$h{$pos{$_}}" foreach sort{$a<=>$b} keys %pos}' >dm_23andme_v3_hg19.txt


这个难度有点高,编程功底不够就不用看了,想看看具体是怎么回事,点击阅读原文查看!


参考链接:


文:Jimmy

图文编辑:吃瓜群众


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存