在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阵列吗?
答案 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)