技能polars-bio
P

polars-bio

在 Polars DataFrame 上进行高性能基因组区间操作与生物信息学文件 I/O。对 BED/VCF/BAM/GFF 区间执行重叠、最近、合并、覆盖、补集、减法等操作。支持流式处理、云原生,更快的 bioframe 替代方案。

polars-bio - 高性能基因组区间操作与生物信息学文件处理

技能概述

polars-bio 是一个基于 Polars DataFrame 的高性能基因组区间操作和生物信息学文件处理 Python 库,支持 BED、VCF、BAM、CRAM、GFF 等常见格式,提供流式处理和云存储访问能力。

适用场景

  1. 大规模基因组区间运算 - 当需要对基因组区间进行重叠检测、最近邻查找、合并、覆盖度计算等操作时,polars-bio 比传统工具(如 bioframe)快 6-38 倍,适合处理人类基因组级别的数据集。

  2. 超内存限制的基因组数据分析 - 对于超过可用 RAM 大型 BAM/CRAM 文件或海量区间数据,polars-bio 的流式处理模式(scan_* 函数)和 DataFusion 引擎可以分批处理数据,无需一次性加载全部内容。

  3. 云端基因组文件直接分析 - 支持直接读写 S3、GCS、Azure Blob Storage 上的生物信息学文件,结合谓词下推和列式存储特性,只下载需要的数据块,适合云原生分析流程。

核心功能

  1. 基因组区间操作集合 - 提供 8 种核心区间运算:overlap(重叠检测)、nearest(最近邻查找)、merge(区间合并)、cluster(聚类)、coverage(覆盖度统计)、complement(补集)、subtract(差集)、count_overlaps(重叠计数),支持函数式 API 和链式调用两种风格。

  2. 生物信息学文件读写 - 统一的 read_*scan_*write_* 接口支持 BED、VCF、BAM、CRAM、GFF/GTF、FASTA、FASTQ、SAM 等 10+ 种格式,自动处理压缩(GZIP、BGZF)和坐标系统转换,读操作返回 LazyFrame 支持流式处理。

  3. SQL 数据处理引擎 - 通过 register_* 函数将生物信息学文件注册为 DataFusion SQL 表,使用标准 SQL 语法查询变异数据、区间数据,支持多表连接、聚合、过滤等复杂查询,适合熟悉 SQL 的分析师。

常见问题

polars-bio 支持哪些生物信息学文件格式?

支持 BED、VCF(含 VCF Zarr)、BAM、CRAM、GFF、GTF、FASTA、FASTQ、SAM、Hi-C pairs 文件。每种格式提供 read_*(立即加载)和 scan_*(延迟扫描)两种函数,部分格式提供 write_*/sink_* 写入接口。

如何处理超过内存大小的大型基因组文件?

使用 scan_* 函数(如 scan_bamscan_vcf)配合 .collect(engine="streaming") 进行流式处理,DataFusion 引擎会分批加载数据。对于云存储文件,可以直接传递 S3/GCS/Azure URI 路径,利用谓词下推只读取需要的区域。

polars-bio 和 bioframe 有什么区别?

polars-bio 基于 Polars 和 Apache Arrow,在真实基准测试中比 bioframe 快 6-38 倍。它支持流式处理大数据集、云存储直接访问、SQL 查询,而 bioframe 基于 pandas,更适合小规模内存内计算。polars-bio 默认使用 1-based 坐标系统(基因组学惯例),bioframe 使用 0-based half-open(BED 惯例),但两者可配置切换。

重要限制:polars-bio 需要 Python 3.11–3.14,基因组位置使用 INT32 存储(上限约 21 亿,覆盖所有已知基因组)。BAM 文件需要配套 .bai 索引文件,CRAM 文件必须提供参考序列路径(reference_path 参数)。DataFrame 和 LazyFrame 的 .pb 访问器功能不同:区间操作仅在 LazyFrame 上可用,DataFrame 上只有写入方法。