有没有办法使用Samtools将整个“对齐字段/列”保存到NumPy数组中?

时间:2016-07-18 17:48:08

标签: python numpy samtools pysam

在SAM格式中,每个对齐线代表一个段的线性对齐,每行有11个必填字段,即QNAME,FLAG,RNAME,POS,MAPQ等。

假设我想在给定的BAM文件中使用所有“QNAMES”的NumPy数组。或者,可以使用多个列并将它们导入到Pandas Dataframe中。

pysam可以实现这一功能吗?

可以自然地使用pysam.AlignmentFile()打开给定的BAM文件,然后使用pysam.AlignmentSegment()访问各个细分受众群,例如

seg = AlignmentSegment()
print(seg.qname)

但是,你能将所有QNAMES保存到NumPy阵列吗?

2 个答案:

答案 0 :(得分:0)

是的,这是可行的。请注意,出于您的目的从带有pysam的BAM文件中导入读段时,最好使用fetch()函数来完成,该函数将在所有读段(pysam.AlignmentSegment()对象)上创建一个迭代器。 BAM文件。然后使用query_name函数检索QNAME:

import pysam
import numpy as np

my_bam_file = '/path/to/your/bam_file.bam'
imported = pysam.AlignmentFile(my_bam_file, mode = 'rb')
bam_it = imported.fetch(until_eof = True)
# Use head(n) instead of fetch(), if you only want to retrieve the first 'n' reads
qnames = [read.query_name for read in bam_it]

在这里,qnames是BAM文件中所有QNAME的列表。如果您坚持获取NumPy数组,只需在末尾添加以下行:

qnames = np.asarray(qnames)

答案 1 :(得分:0)

# pip install pyranges 
# or 
# conda install -c bioconda pyranges

import pyranges
bam_df = pyranges.read_bam(f, sparse=False, as_df=True, mapq=0, required_flag=0, filter_flag=1540)