如何随机选择vcf文件中的变异位点

现在做群体基因组的论文大部分会公开自己论文分析中的变异检测结果,通常是vcf文件,我们自己可以把vcf文件下载下来试着复现论文中的内容,有时候vcf文件过大,每一步处理起来都会花费比较长的时间。有时候就想把这个vcf文件缩小,随机选择一部分。
查了一下,没有找到现成的工具或者脚本。尝试自己写脚本,没有思路。试着在通义千问上问了一下python的实现方法(通义千问我个人用起来还挺好用的,也是免费的,推荐大家可以试一下。自己想写正则表达式每次问都能给出正确的答案)。给出的思路是使用random这个模块里的random()函数。
这个函数随机生成一个小于1的数,如果我们想要随机取vcf文件中的10%,就设置random.random()<0.1,符合这个条件就输出行。最后输出的行就是所有的行的10%左右。当然不是完全精确的10%。如果想要每次都输出相同的内容,就设置随机数种子 random.seed(123)。种子设置的一样,输出的行就是一样的
完整的python脚本
import sys
import random

1 input vcf

2 output vcf

3 proportion 0-100

3 seed number

random.seed(sys.argv[4])

with open(sys.argv[2],’w’) as fw:
with open(sys.argv[1],’r’) as fr:
for line in fr:
if line.startswith(“#”):
fw.write(line)
else:
random_number = random.random()
if random_number < float(sys.argv[3])/100:
fw.write(line)

print(“Good Job!”)
运行
python randomSelectRowsFromVCF.py tiny.vcf tiny.out.vcf 1 123
四个位置参数分别是 输入文件 输出文件 随机选取的比例(0-100) 随机数种子
欢迎大家关注我的公众号
小明的数据分析笔记本

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/416634.html

(0)
联系我们
联系我们
分享本页
返回顶部