SuperAPI AI 工具集

polars-bio

数据与分析

查看项目

更新于 10-21 16:18

技能介绍

polars-bio 是一个面向基因组区间运算与生物信息学文件 I/O 的高性能 Python 库,构建在 Polars、Apache Arrow 和 Apache DataFusion 之上。它提供以 DataFrame 为中心的 API,用于区间算术(overlap、nearest、merge、coverage、complement、subtract)以及常见生物信息学格式(BED、VCF、BAM、CRAM、GFF/GTF、FASTA、FASTQ)的读写。

主要能力

  1. 基因组区间运算:提供 8 种核心区间操作,包括 overlap / count_overlaps(查找或计数重叠区间)、nearest(查找最近区间,可配置 k、overlap、distance 参数)、merge(合并重叠或首尾相接的区间)、cluster(为重叠区间分配簇 ID)、coverage(计算每个区间的覆盖计数)、complement(查找基因组内区间之间的空隙)、subtract(移除与另一集合重叠的部分)。所有操作默认接受含 chrom、start、end 列的 Polars DataFrame,默认返回 LazyFrame,可通过 output_type="polars.DataFrame" 获取即时结果。

  2. 生物信息学文件 I/O:支持 BED、VCF、VCF Zarr、BAM、CRAM、GFF、GTF、FASTA、FASTQ、SAM、Hi-C pairs 等格式,提供 read_、scan_、write_、sink_ 函数。支持云存储(S3、GCS、Azure)和压缩(GZIP、BGZF)。

  3. SQL 数据处理:可将生物信息学文件注册为表,使用 DataFusion SQL 查询,也可将 Polars DataFrame 注册为 SQL 表。

  4. Pileup 操作:从 BAM/CRAM 文件计算逐碱基读取深度,支持 CIGAR 感知的深度计算和映射质量过滤。

使用方式

安装:需要 Python 3.11–3.14,使用 uv pip install "polars-bio==0.31.0";如需 pandas 兼容(pandas ≥3.0),使用 uv pip install "polars-bio[pandas]==0.31.0"。

两种 API 风格:函数式 API(如 pb.overlap(df1, df2))和方法链式 API(如 df1.lazy().pb.overlap(df2))。注意 .pb 访问器上的区间操作仅适用于 LazyFrame;DataFrame 上的 .pb 仅提供写入操作。

坐标系统:默认使用 1-based 坐标,可通过 pb.set_option("datafusion.bio.coordinate_system_zero_based", True) 切换为 0-based 半开区间。BED 文件始终为 0-based 半开格式,polars-bio 读取时自动转换。

流式与核外处理:对于超出内存的数据集,使用 scan_* 函数和流式执行(lf.collect(engine="streaming"))。DataFusion 流式处理默认对区间操作启用。

适用场景

适用于执行基因组区间操作、读写生物信息学文件格式、处理无法放入内存的大型基因组数据集(流式模式)、对基因组数据文件运行 SQL 查询、从 bioframe 迁移到更快的替代方案、从 BAM/CRAM 文件计算读取深度/pileup,以及处理包含基因组区间的 Polars DataFrame。

限制与注意事项

  • 区间操作和 pb.sql() 默认返回 LazyFrame,需调用 .collect() 或指定 output_type。
  • 默认期望列名为 chrom、start、end,可通过 cols1/cols2 参数自定义。
  • 双输入操作采用 probe-build 连接策略,第一个 DataFrame 为 probe,第二个为 build;建议将较大的 DataFrame 作为第一个参数以获得最佳性能。
  • 基因组位置以 32 位整数存储,坐标上限约 21 亿。
  • read_bam 和 scan_bam 需要 .bai 索引文件。
  • DataFusion 并行度默认仅 1 个分区,大数据集需通过 pb.set_option("datafusion.execution.target_partitions", ...) 启用。
  • CRAM 使用独立函数(read_cram/scan_cram/register_cram),需要 reference_path 参数。
  • 坐标系统元数据缺失时会回退到全局设置并发出警告;输入间坐标系统不匹配会引发 CoordinateSystemMismatchError。
  • 官方称在真实基因组基准上比 bioframe 快 6-38 倍。

具体版本功能、参数细节和最新变化请以官方文档为准。