【直播】我的基因组59:把我的数据伪装成23andme或wegene的芯片数据
时间:2022-05-03
本文章向大家介绍【直播】我的基因组59:把我的数据伪装成23andme或wegene的芯片数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
为什么会有这个需求呢?很简单,因为国内的一些基因检测公司支持导入23andme的芯片数据做解读,而我正想看看一下他们的技术功底到底如何?
23andme和wegene都是用的一款特制的芯片,可以捕获基因组上面的一些特定位点而已,既然我已经测了全基因组,那么分分钟就可以从我的基因组分析结果里面提取出23andme的芯片位点,伪装成23andme的芯片数据!
我从谷歌里面找到了一个公共的数据,点击阅读原文查看这个公共数据的下载链接!
这很容易明白23andme的芯片数据是什么格式的,基因组坐标的转换对我等生物信息学工程师来说比吃饭还简单!(当然,我其实拿到了新版的数据,但是由于隐私问题,不便传播)
转换很简单:
第一步,把芯片设计的rsID全部拿出来
第二步,根据rsID从我的VCF文件中挑取位点,并赋予纯合杂合基因型
第三步,去dbSNP数据库文件里面映射我VCF文件没有记录的点为野生型
(perl -alne '{print if /^rs/}' dm_23andme_v3_110219.txt |cut -f 1 >23andme.rsID.listcat ../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.txtzcat ~/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公司出品的定制化芯片。
本来是想上传这个公共数据去这个网站上面做一次免费报告生成,但是他们要求很多,搞了好几次还没成功,最后还是嫌弃我芯片版本太低了,所以我又用了下面的代码把旧基因组版本芯片数据转换成新的。
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
这个难度有点高,编程功底不够就不用看了,想看看具体是怎么回事,点击阅读原文查看!
参考链接:
http://online.cambridgecoding.com/notebooks/cca_admin/genetic-ancestry-analysis-python
文:Jimmy
图文编辑:吃瓜群众
- 加密狗进场暴富开始?请别侮辱区块链和游戏
- 程序猿的日常——Java基础之clone、序列化、字符串、数组
- [你必须知道的.NET] 第四回:后来居上:class和struct
- oc 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()
- 央行出台条码支付新规;美团打车将在7大城市上线;国产人工智能平台型芯片首发;苹果就降速门致歉
- 阿三又让全球看笑话,无人驾驶的地铁名不副实,还直接跑到大街上
- 盘点:2017年度这些科学大事件,哪个给您印象最深?
- 跳台阶问题
- mac下使用github
- CSS3新特性应用之结构与布局
- 程序猿的日常——Java基础之equals与hashCode
- 贾康:智能金融需在发展和规范中掌握理性权衡点
- Objective-C: 字符串NSString与NSMutableString
- 2017年最后一篇推送,仍然与技术有关盘点深度学习论文年度之“最”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法