基因组与Python –PyVCF 好用的vcf文件处理器

vcf文件的全名是variant call file,短假辨别出文件,它是染色体组业务流程中发生的一个人文档。,使守恒染色体组上的短假消息。。经过对vcf文件停止辨析,可以赢得人物更衣消息。。嗯,复杂地说,这是一份很重要的文件。,因而怎样处置它亦很重要的。。其文件消息如次:

文件的开动是从双关开端的到处正文行。,包罗文件的根本消息。。继我们的从一则线开端。,总共9个 N偏袒地,前九偏袒地是BAC各一部变电所代表的消息。,相当于表题名。。顶点一偏袒地是范本据以取名。,能够连绵不断一个人。。正文的线以假设的短假完毕。,每行被堕入9个 N偏袒地。,每个偏袒地用符号(‘t’’)分类。。

通常处置vcf文件时,在读取,处置阶段不断地写很多反复编码。,古地块税收编码很少。。自然,也许只定势轨迹的色度。,POS,ID,REF,ALT,这些决定因素。,这是可以做到的。。由于VCF体式详述,这些决定因素的坚信礼绝对复杂。。但也许头文件消息被处置,或处置消息,体式决定因素时期,写作更复杂的按照教规的措辞,这不仅是有趣的。,同时不费力地弄错了。。

Python的PyvCF库处理了这人问题。,它经过按照教规的措辞把vcf文件消息替换成坚信礼化的消息,理想化的事物了vcf文件的处置手续,便于后续拔出剑中间定位决定因素和处置。

PYVCF库的创立,CMD喉舌:

pip install PyVCF

或许从网站下载创立包。,天体的固有运动创立。

PYVCF库的导入:

import vcf

PYVCF库的据以取名是VCF。,导入后来的可以运用其办法对vcf文件做处置。

PyvCF库不隐瞒的消息:

运用例子:

>>> import vcf
>>> vcf_reader = (filename=r''D:\test\'')
>>> for record in vcf_reader:
	print record
Record(CHROM=chr1, POS=10146, REF=AC, ALT=[A])
Record(CHROM=chr1, POS=10347, REF=AACCCT, ALT=[A])
Record(CHROM=chr1, POS=10439, REF=AC, ALT=[A])
Record(CHROM=chr1, POS=10492, REF=C, ALT=[T])
Record(CHROM=chr1, POS=10583, REF=G, ALT=[A])

大声喊类处置vcf文件,vcf文件消息就被使守恒到vcf_reader中了。它是一个人可以迭代的物体。,它的迭代元素是一个人记载物体的例子。,使守恒未正文的消息行。,那就是方式点的不隐瞒的消息。。经过它,我们的可以不费力地地开腰槽使用着的轨迹的不隐瞒的消息。。

记载物体——轨迹消息的往事模式

class 记载(色度), POS, ID, REF, ALT, QUAL, FILTER, INFO, FORMAT, sample_indexes, samples=None)

记载是物体经过。,况且,不断地受话器。,AltRead和等等物体。它的根本属性是ChLSM。,POS,ID,REF,ALT,QUAL,FILTER,INFO,FORMAT,更确切地说,在VCF正中鹄的同类轨迹的消息。。接下来,一个一个地解说这些特点。:

CHROM:染色体据以取名,典型是STR。。

POS:染色体首席点的定势,典型是int型。。

ID:通常是异型Rs。,典型是STR。。也许是‘.’,一点也心不在焉。。

REF:在这人位点的商议染色体组的根底。,典型是STR。。

ALT:位点测序终于。是一个人AltAdStin类子例子的列表。。典型是列表。。ALTReSET类有4个亚纲。,它代表几种典型的短假。:如SNP,indel,structual 变体等。。本人的事物例子都可以停止较比(更相当的较比),实足这人。,其中的一部分亚纲不执行遗产管理人的职责STR办法。,更确切地说,它不克不及替换成字母串。。

QUAL:孟德尔基因座的测序团。,典型是int型。或float。

FILTER:过滤消息。经过分号分类渗透器列编队的字母串列表,典型是列表。。也许未抚养决定因素一点也心不在焉。。

INFO:该轨迹的其中的一部分份量决定因素。运用前面的决定因素=键。,上面的决定因素用作值。,坚信礼词典。典型是DICT。。

FORMAT:孟德尔遗传型消息。使守恒VCF体式列的原始体式。,典型是STR。。

>>> for record in vcf_reader:
		print type(), 
		print type(), 
		print type(), 
		print type(), 
		print type(), 
		print type(), 
		print type(), 
		print type(), 
		print type([''BaseQRankSum'']), [''BaseQRankSum'']
		print type(), 

 chr1
 234481
 None
 T
 [A]
 2025.77
 None
 {''ExcessHet'': , ac [1], ''BaseQRankSum'': , ''MLEAF'': [], AF [], ''MLEAC'': [1], 安 2, FS , MQ , ''ClippingRankSum'': , 索尔 , ''MQRankSum'': , ''ReadPosRankSum'': , DP 156, QD }
 
 GD:AD:DP:GQ:PL

更这些根本属性而且,记载物体还具有等等其中的一部分属性。:

samples:运用体式消息作为核心词。,前面的对应消息被作为一个人值。,坚信礼词典(CallData物体),战利品据以取名。,这两个值构图一个人大声喊物体。,协同构图一个人范本元素。。这将范本连结到孟德尔遗传型消息。,经过下标获取每个大声喊物体。。samples典型是列表。。

start:短假发源名列前茅

end:短假终止

alleles:轨迹的本人的事物能够资格。,由REF和ALT决定因素结合的列表(典型REF为STR)。,ALT决定因素是Y-AltRead物体的亚纲例子。,典型是列表。。

>>> for record in vcf_reader:
		print , ''\n'', 〔0〕战利品, ''\n'', 〔0〕[′gt′] 下标获取呼叫,限制战利品进入战利品,获取体式对应消息的核心
		print record.start, , record.end
		print , , record.alleles 小心G心不在焉单引号。,它是一个人记载物体。

[大声喊(范本), CallData(GT=0/1, AD=[39, 14], DP=53, GQ=99, PGT=0|1, PID=13116_T_G, PL=[449, 0, 2224]))] 

0/1
13115 13116 13116
T [G] [''T'', G]

记载物体法:

1. 物体间的较比办法:染色体据以取名与名列前茅消息的较比。Python 3只完成=和<’的较比。

2. 迭代办法:在范本中迭代元素。

3. 字母串办法:回到ChROM,POS,REF,ALT四栏消息。

4. Genotype(姓名)法,对下标的获取在不同范本。,此办法开价对范本据以取名的获取。。

5. add_format(fmt)add_filter(flt)add_info(info, value=True):将元素添加到类似属性。

6. get_hom_refs():获取本人的事物范本,在这人位点不短假。,恢复原来信仰的人列表。

7. get_hom_alts():获取范本中100%个短假的本人的事物范本。,恢复原来信仰的人列表。

8. get_hets():本人的事物范本孟德尔遗传型均为异型结合性。,恢复原来信仰的人列表。

9. get_unknown():赢得战利品中未知孟德尔遗传型的本人的事物战利品。,恢复原来信仰的人列表。

>>> record = next(vcf_reader)
>>> record2 = next(vcf_reader)
>>> print record > record2 较比染色体的据以取名和名列前茅。
False
>>> for i in record: 按范本列表迭代
	     print i	
大声喊(范本), CallData(GT=0/1, AD=[18, 11], DP=29, GQ=99, PL=[280, 0, 528]))
>>> print STR(记载) #字母串办法
Record(CHROM=chr1, POS=10492, REF=C, ALT=[T])
>>> print record.genotype('''') 按战利品据以取名获取
大声喊(范本), CallData(GT=0/1, AD=[39, 14], DP=53, GQ=99, PGT=0|1, PID=13116_T_G, PL=[449, 0, 2224]))

记载物体也有数不清的有帮助的的办法属性。:

num_called:在这人轨迹上辨别出的范本数。

call_rate:范本的比例占范本总额的比例。。

num_hom_ref,num_hom_alt,num_het,num_unknown:4孟德尔遗传型的数量

aaf:本人的事物范本等位孟德尔基因的频率(即REF),恢复原来信仰的人列表。

heterozygosity:位点异型结合性,为杂合短假,0纯合子短假。

var_type:短假典型,包罗SNP。,‘indel’,‘sv’(structural 变型),‘unknown’。

var_subtype:更不隐瞒的的短假典型,拿 … 来说,DENEL包罗DEL。,‘ins’,‘unknown’。

is_snp,is_indel,is_sv,is_transition,is_deletion:是短假SNP吗?,indel,sv,transition,剪下等。。

>>> record = next(vcf_reader)
>>> print record
Record(CHROM=chr1, POS=13118, REF=A, ALT=[G])
>>> print  只要一个人范本。
[大声喊(范本), CallData(GT=0/1, AD=[41, 13], DP=54, GQ=99, PGT=0|1, PID=13116_T_G, PL=[449, 0, 2224]))]
>>> record.num_called
1
>>> record.call_rate
1.0
>>> record.num_hom_ref
0
>>> record.aaf
[]
>>> record.num_het
1
>>> record.heterozygosity

>>> record.var_type
SNP
>>> 
TS
>>> record.is_snp
True
>>> record.is_indel
False

Reader物体——处置vcf文件,坚信礼化消息的结构

class Reader(fsock=None, filename=None, compressed=None, prepend_chr=False, strict_whitespace=False, encoding=''ascii'')

在读vcf文件时,有六点决定因素可供选择。,如上图所示。

fsock:目的文件的文件物体,可以运用OPEN(名声)来获取文件物体。。

filename:名声,当fSOCK和名声同时在时,优先于于罚任意球。

compressed:你想除压吗?,不开价决定因素时由顺序天体的固有运动判别(以名声无论以.gz最后的事物判别无论必要除压)。
prepend_chr:保存染色体据以取名时,你的前缀是CHR吗?,心不在焉添加Windows 默认值。,也许vcf文件的染色体据以取名原来心不在焉前缀‘chr’,可以设置为真,不假思索的加。

strict_whitespace:它是用符号't'绝对的分类的吗?。真实要旨绝对的的手术台。,FALSE表现可以混合空格。。

encoding:文件编码。

>>> vcf_reader = (open(''vcf/test/'', ''r'')) #fsock
>>> vcf_reader = (filename=r''D:\test\'') #filename

头文件消息次要往事在读者物体的属性中。,包罗ALTS,contigs,filters,formats,infos,metadata。

ALTS例子:

>>> vcf_reader = (filename=r''D:\test\'')
>>> 
OrderedDict([(''NON_REF'', Alt(id=''NON_REF'', desc=代表 any possible alternative allele at this 名列前茅 #字典典型
>>> [''NON_REF''].id
''NON_REF''
>>> [''NON_REF''].desc
代表 any possible alternative allele at this 名列前茅

等等高质量的批准。。

Reader物体完成了两种办法。:

next():从下同类获取记录,那就是恢复原来信仰的人到次于的人记载物体。。可以显式大声喊NeXT()来获取下同类记录。,您还可以直地迭代读取器物体。,它不假思索的大声喊NeXT()应变量来获取下同类记录。。

读取(色度),start=None,end=None):恢复原来信仰的人从开端 1到完毕坐标的ChChm染色体的本人的事物短假位点。不给end,从开端 1到完毕的本人的事物染色体上的短假都是反复的。;既不开端也不是完毕。,恢复原来信仰的人到染色体上的本人的事物短假。。此办法必要运用另一个人第三方Python模块PysAM来找到F,也许心不在焉创立模块,会落得误解。。另一个,运用该办法后,它将物体的迭代仔细研究更反倒经过,因而用这人办法。,原始迭代手续舍弃。。

>>> vcf_reader = (filename=r''D:\test\'')
>>> ()
<._Record object at 0x0000000003ED8780>
>>> record = ()
>>> print record
Record(CHROM=chr1, POS=10347, REF=AACCCT, ALT=[A])
>>> for record in vcf_reader:
	print record
Record(CHROM=chr1, POS=10439, REF=AC, ALT=[A])
Record(CHROM=chr1, POS=10492, REF=C, ALT=[T])

这人库也有一个人作曲物体。,喂心不在焉不隐瞒的的绍介。,由于大偏袒地对vcf文件的处置都可以伸出面两个物体的知作出。

连锁商店运用:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import vcf  # 导入PYVCF库

filename = r''D:\test\'' 
vcf_reader = (filename=filename) # 大声喊Reader物体处置vcf文件

for record in vcf_reader: # 迭代读取器物体,恢复原来信仰的人记载物体。
    # 记载是记载物体。
    print , , , 
    if record.is_snp:# 是SNP吗?
        print "I''m a snp"
    elif record.var_type != SV #和 elif record.is_sv:均等
        print "I''m not a sv"
    if record.heterozygosity == : # 杂合短假的判别
        print "I''m a heterozygous mutation"
    ...
    ...
    

体育馆完成的本人的事物功用,您可以写作本人的编码。,而且完成办法较比复杂。。之因而要用这人库来处置vcf文件,这是由于体育馆能够比我们的更知识本人。,它也可以比我们的本人的编码更完好无缺和有理。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注