SuperAPI AI 工具集

pysam

数据与分析

查看项目

更新于 10-16 02:06

技能介绍

pysam 是一个 Python 模块,用于读取、操作和写入基因组比对格式(SAM/BAM/CRAM)以及变异文件(VCF/BCF),它是对 htslib 的封装。该工具主要用于高通量测序流程,能够高效访问比对到参考基因组的数十亿个 DNA 片段。

用途

pysam 适用于以下场景:处理下一代测序(NGS)数据;分析基因组变异(SNP、indel);从特定基因组区域提取读段;构建自定义生物信息学流程;对测序数据进行质量控制。

核心原则

索引访问:BAM 文件必须建立索引(.bai),才能对基因组区域进行高效的随机访问。

坐标系统:基因组坐标中的位置采用 0 基(Python 风格),但在某些上下文中范围采用 1 基。

读段属性:每个读段包含序列、质量分数、比对位置和标志。

快速参考

标准导入:

import pysam

基本模式:

1. 打开 BAM 文件

samfile = pysam.AlignmentFile("aligned_reads.bam", "rb")

2. 遍历特定基因组区域内的读段

for read in samfile.fetch("chr1", 10000, 10100): print(f"Read: {read.query_name}, Quality: {read.mapping_quality}") print(f"Sequence: {read.query_sequence}") print(f"Position: {read.reference_start}")

3. 变异分析(VCF)

vcf = pysam.VariantFile("mutations.vcf") for rec in vcf.fetch("chr1", 10000, 10100): print(f"Pos: {rec.pos}, Ref: {rec.ref}, Alt: {rec.alts}") print(f"Genotype: {rec.samples['sample1']['GT']}")

4. 写入比对读段

outfile = pysam.AlignmentFile("output.bam", "wb", template=samfile) for read in samfile: if read.mapping_quality > 30: outfile.write(read) outfile.close()

关键规则

应当做的:始终使用带索引的文件——用 pysam.index("file.bam") 创建索引以实现快速访问;检查读段标志——使用 read.is_paired、read.is_unmapped 过滤读段;处理未比对读段——未比对读段的 reference_start = -1;显式关闭文件——使用上下文管理器或 .close() 避免资源泄漏。

不应做的:不要遍历整个 BAM——使用带区域的 fetch() 以提高效率;不要忽略质量分数——低质量碱基可能导致假变异;不要混用坐标系统——在 0 基与 1 基索引之间保持一致。

高级模式

按基因统计读段数:

使用基因注释文件

genes = {} # gene_name -> (chr, start, end) for read in samfile.fetch(): # 检查读段是否与任何基因重叠 for gene, (chr, start, end) in genes.items(): if read.reference_name == chr and start <= read.reference_start < end: genes[gene]['count'] += 1

变异过滤:

按质量和深度过滤变异

for rec in vcf.fetch(): depth = rec.samples['sample1']['DP'] qual = rec.qual if depth > 10 and qual > 20: # 处理高质量变异 pass

pysam 提供了基因组数据处理所需的底层访问能力,使研究人员能够直接处理生命本身的原始数据。