scikit-bio 是一个用于生物信息学与群落生态学统计的 Python 库,提供严格的生物分析所需的数据结构与统计方法。它在计算 alpha/beta 多样性、执行排序分析(PCoA)以及处理复杂系统发育树方面表现突出。
用途 该库适用于以下分析任务:
- 分析微生物组数据(分类组成、群落结构)。
- 计算生态多样性指标(Shannon、Simpson、UniFrac)。
- 执行可视化排序(PCoA、DCA)。
- 进行带元数据的高级序列操作(DNA、RNA、蛋白质)。
- 读写系统发育树(Newick 格式)。
- 进行成对与多序列比对分析。
- 对群落差异进行统计检验(PERMANOVA、ANOSIM)。
主要能力 scikit-bio 的核心设计原则包括:
- 生物序列语法:使用类型化对象(DNA、RNA、Protein)替代原始字符串。这些对象了解自身字母表,可处理质量分数(Phred),并支持生物学操作(转录、翻译)。
- 距离矩阵:DistanceMatrix 对象是微生物组研究的中心,支持索引、取子集和统计检验(如 PERMANOVA)。
- 多样性指标:提供生态学中数百种多样性指标的标准化实现,确保跨研究的可复现性。
序列分析(skbio.sequence) 支持带质量分数的序列、切片保留元数据、k-mer 频率计算以及 DNA 到蛋白质的翻译。
多样性分析(skbio.diversity)
- Alpha 多样性(样本内):可计算 Shannon、Simpson、observed_otus 等指标。
- Beta 多样性(样本间):通过 beta.pw_distances 计算 Bray-Curtis 等距离;加权 UniFrac 需要提供系统发育树。
系统发育(skbio.tree) 可通过 TreeNode 读取 Newick 格式树、遍历叶节点、查找最近公共祖先(LCA)以及指定外类群进行定根。
统计与排序
- PCoA(主坐标分析):通过 skbio.stats.ordination.pcoa 对距离矩阵进行排序,可查看解释方差比例并获取坐标用于绘图。
- PERMANOVA:通过 skbio.stats.distance.permanova 结合元数据对群落差异进行统计检验。
使用方式 安装:
pip install scikit-bio
常用导入:
import skbio
import numpy as np
import pandas as pd
from skbio import DNA, RNA, Protein, Sequence
from skbio.stats.distance import DistanceMatrix
from skbio.diversity import alpha, beta
from skbio.stats.ordination import pcoa
序列操作基本模式:
from skbio import DNA
seq = DNA("ACC--GTT", metadata={'id': 'sample1', 'desc': 'gene A'})
rc = seq.reverse_complement()
degapped = seq.degap()
print(f"Is valid? {seq.is_valid()}")
实践工作流示例包括微生物组距离可视化(丰度表 -> 距离 -> PCoA -> 表格)、基于 Phred 分数的序列质量控制与过滤,以及通过 tree.tip_tip_distances() 计算系统发育距离矩阵。
关键规则
- 应使用类型化序列(DNA、RNA、Protein),而非通用 Sequence。
- 应设置 metadata 和 positional_metadata(质量分数)属性,保持数据自包含。
- 从不可信来源导入数据时,应使用 .is_valid() 检查字母表,捕获非 IUPAC 字符。
- 应使用 pcoa() 对高维群落数据进行可视化。
- 计算 UniFrac 多样性时,应确保系统发育树包含丰度表中所有分类单元。
- 应使用 skbio.tree.TreeNode 进行树操作,其提供稳健的遍历方法。
- 不应混合序列类型(勿将 DNA 与 RNA 对象比对)。
- 若有 FASTQ 数据,不应忽略质量分数,应将 Phred 分数存入 positional_metadata。
- 不应使用原始 NumPy 手动计算生物距离,应通过 skbio.diversity.beta 使用 UniFrac 或 Bray-Curtis。
- 执行排序或 PERMANOVA 时,不应忘记 ID 匹配,需确保距离矩阵与元数据映射中的 ID 完全一致。
适用场景 微生物组与群落生态研究、多样性统计、系统发育分析、序列比对与操作、排序可视化以及群落差异检验。
限制与注意事项
- PERMANOVA 和 PCoA 要求元数据索引与 DistanceMatrix ID 匹配,否则会失败;可通过取交集并使用 filter 对齐。
- UniFrac 计算可能占用大量内存,大规模数据集可考虑优化版本或外部工具。
- 标准 DNA 对象默认支持 IUPAC 模糊字符(N、R、Y 等);若含有非标准字符,可使用通用 Sequence 对象。
- 性能方面:计算多样本多样性时应将整个二维数组传给 beta.pw_distances 而非循环;大树(超过 10000 个叶节点)遍历应使用 tree.preorder() 或 tree.postorder(),而非手动递归。
官方文档:http://scikit-bio.org/ 教程:http://scikit-bio.org/docs/latest/ 搜索模式:skbio.sequence、skbio.stats.distance、skbio.diversity、skbio.stats.ordination