前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多样本vcf文件转换成R语言韦恩图输入格式

多样本vcf文件转换成R语言韦恩图输入格式

作者头像
用户7010445
发布2020-03-03 14:53:44
1.5K0
发布2020-03-03 14:53:44
举报
文章被收录于专栏:小明的数据分析笔记本

基因组重测序的论文中有些可能会用韦恩图来展示不同样本snp的交集和差异。那么如何将手头的vcf文件转换成R语言里做韦恩图要求的数据格式呢?想了几天有了一些想法,记录在这里。

从总vcf文件中提取出5个样本的信息重新组成一个vcf文件

代码语言:javascript
复制
~/mvcf-subset --exclude-ref -c WS-2,WS-4,WS-5,WS-12,WS-17 412_all_cp.recode.eva.vcf > 5_sample.vcf

利用python脚本将数据转化为R语言里做韦恩图要求的格式

python脚本的基本原理就是判断样本的基因型,如果是0/0,则这个样本在这个位点不是变异,如果不是0/0,则在这个位点存在变异。又想到一种情况是如果这个位点在某个样本里是缺失数据如何处理,这个后续需要 考虑进去。可能还需要考虑的一个问题是把snp和indel分开。

  • python脚本
代码语言:javascript
复制
import vcf
import sys


input_vcf = sys.argv[1]


records = vcf.Reader(filename=input_vcf)


vcf_dict = {}

for sample in records.samples:
    vcf_dict[sample] = []

i = 0
for record in records:
    i = i + 1
    for sam in record.samples:
        if sam["GT"] == "0/0":
            vcf_dict[sam.sample].append(0)
        else:
            vcf_dict[sam.sample].append(i)

for sample,var_site in vcf_dict.items():
    fw = open(sample+".txt","w")
    fw.write(sample+"\n")
    for i in var_site:
        if i != 0:
            fw.write(str(i)+"\n")
    fw.close()
  • 使用方法
代码语言:javascript
复制
python3 convert_vcf_to_vennplot.py 5_sample.vcf

脚本借助了pyvcf模块,如果没有这个模块需要使用pip命令来安装 在当前目录下就会多出来几个文件

代码语言:javascript
复制
WS-12.txt  WS-17.txt  WS-2.txt  WS-4.txt  WS-5.txt

自己在win10上用这个脚本的时候会提示我连接不到某个动态库,但是也能获得结果,搜索了一下暂时还没有找到原因,在linux系统下没有遇到任何报错,如果自己的vcf文件比较大,运行的时间可能会长一点。

韦恩图R代码

参考 如何使用R来绘制韦恩图(Venn Diagram)

代码语言:javascript
复制
setwd("../../vcf_handling/Rice_CP/")
A<-read.table("WS-2.txt",header=T)
B<-read.table("WS-4.txt",header=T)
C<-read.table("WS-5.txt",header=T)
D<-read.table("WS-12.txt",header=T)
E<-read.table("WS-17.txt",header=T)
library(VennDiagram)
help(package="VennDiagram")
venn.diagram(x=list(A=A$WS.2,
                    B=B$WS.4,
                    C=C$WS.5,
                    D=D$WS.12,
                    E=E$WS.17),
             filename="My5.png",
             fill =c("cornflowerblue","green","yellow","darkorchid1","red"),
             )

最近又发现一个新的R语言包用来做韦恩图 VennDetail

github 主页 https://github.com/guokai8/VennDetail

  • 简单用法
代码语言:javascript
复制
install.packages("devtools")
devtools::install_github("guokai8/VennDetail")
help(package="VennDetail")
library(VennDetail)

res <- venndetail(list(A = A$WS.2, 
                       B = B$WS.4, 
                       C = C$WS.5,
                       D = D$WS.12,
                       E = E$WS.17))
plot(res, type = "venn")

其他功能有需要的时候再来探索!

本文中用到的vcf格式文件大家可以在论文中找到下载链接https://www.jianshu.com/p/f6b72450f589。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从总vcf文件中提取出5个样本的信息重新组成一个vcf文件
  • 利用python脚本将数据转化为R语言里做韦恩图要求的格式
  • 韦恩图R代码
  • 最近又发现一个新的R语言包用来做韦恩图 VennDetail
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档