1. 物种丰度表简介

做微生物组分析,你第一个碰到的文件就是物种丰度表。说白了,它就是一个矩阵——行是物种(OTU/ASV/属种),列是样本,单元格里填的是丰度值。这个表记录了「每个样本里有哪些微生物、各有多少」。我个人习惯把丰度表看作整个分析的起点,后面所有可视化、统计检验、差异筛选都从这张表出发。

核心定义: 物种丰度表 = 样本 × 物种的数值矩阵,每个数值代表该物种在对应样本中的定量(序列数、相对丰度或归一化值)。

1.1 丰度表里有什么

先看一个极简的 TSV 格式例子:

#OTU ID	Samp1	Samp2	Samp3
OTU_1	120	85	210
OTU_2	45	160	30
OTU_3	0	12	88
OTU_4	78	0	0

每行一个物种,每列一个样本。数字是原始序列计数,没有经过归一化。你在实际项目中拿到的表可能多达几万行,几百列。我记得第一次处理 16S 数据,看到那个 2 万行的表格时,心里直呼「这怎么搞」——后来学会了格式转换和过滤,才没那么慌。

1.2 常见格式一览

格式文件扩展名数据组织典型应用
BIOM.biomJSON/HDF5,含元数据QIIME2、MG-RAST、Huttenhower 生态分析
TSV.tsv / .txt制表符分隔,纯文本手动检查、R/Python 快速读取
CSV.csv逗号分隔,纯文本Excel 打开、数据导入通用
Excel.xlsx / .xls带格式的多工作表协作汇报、手动编辑
HDF5.h5 / .hdf5二进制,支持大矩阵大规模宏基因组,压缩存储

每种格式都有自己的「脾气」。我在项目中遇到过好几次「费半天劲分析完,发现导出格式不对,又得重跑」的情况。所以提前搞清楚格式特性非常关键。

⚠ 注意: Excel 格式自带格式、合并单元格、下拉菜单等元信息,这些在程序化读取时经常引发解析错误。我建议只把 Excel 当作「查看」工具,分析流程中尽量用纯文本格式。

1.3 BIOM 格式详解

BIOM(Biological Observation Matrix)是目前微生物组领域的标准格式。它不只是存数字,还嵌入物种分类、样本元数据、处理流程等。你想想看,一个文件就包含了整个实验的所有生物观测信息,省去到处找 metadata 的麻烦。

BIOM 1.0 是 JSON 结构,2.0 及以上用 HDF5。典型的 JSON 格式 BIOM 文件片段:

{
  "id": "MyStudy",
  "format": "Biological Observation Matrix 1.0.0",
  "matrix_type": "dense",
  "shape": [4, 3],
  "data": [[120,85,210],[45,160,30],[0,12,88],[78,0,0]],
  "rows": [
    {"id":"OTU_1","metadata":{"taxonomy":"k__Bacteria;p__Firmicutes"}},
    {"id":"OTU_2","metadata":{"taxonomy":"k__Bacteria;p__Bacteroidetes"}},
    {"id":"OTU_3","metadata":{"taxonomy":"k__Bacteria;p__Proteobacteria"}},
    {"id":"OTU_4","metadata":{"taxonomy":"k__Bacteria;p__Actinobacteria"}}
  ],
  "columns": [
    {"id":"Samp1","metadata":{"body_site":"gut"}},
    {"id":"Samp2","metadata":{"body_site":"skin"}},
    {"id":"Samp3","metadata":{"body_site":"oral"}}
  ]
}

看到没?物种 ID、分类树、样本分组都塞在一个文件里。用 Python 的 biom-format 包读写非常方便。

import biom
table = biom.load_table('example.biom')
print(table.shape)       # (4, 3)
print(table.ids('observation'))  # ['OTU_1', 'OTU_2', 'OTU_3', 'OTU_4']

1.4 TSV 与 CSV:最朴实的格式

TSV 是我个人最常用的交换格式。理由很简单:物种名、样本名里经常有逗号(比如 Escherichia coli 里没逗号,但某些注释里有),用逗号分隔很容易解析出错。制表符就安全得多。CSV 的优势是 Excel 和各类脚本原生支持,导入导出最方便。

实际操作中,我一般这样处理:

  • 快速查看 → 用 Excel 打开 CSV(注意大文件会卡)
  • 脚本清洗 → 用 Python 的 pandas.read_csv('file.tsv', sep='\t')
  • 长期存储 → 转为 BIOM 或 HDF5(节省空间、保留元数据)

我曾经因为一个 TSV 文件里混了拉丁学名中的句点和括号,导致 pandas 把整列读成了字符串。排查了很久,后来发现是 delimiter 不一致——那个文件前 10 行用制表符,后面突然混了两个空格。从那以后我每次读取都会先检查行长度是否一致。

1.5 常见应用场景

  1. Alpha/Beta 多样性分析:输入丰度表,计算 Shannon 指数、Bray-Curtis 距离等。
  2. 差异丰度分析:DESeq2 / edgeR / ANCOM 等都要求计数矩阵。
  3. 物种组成可视化:堆叠柱状图、热图、网络图,数据源全是丰度表。
  4. 机器学习分类:将丰度表转为特征矩阵,样本标签来自列元数据。
  5. 跨平台数据整合:不同测序平台产出格式不同,统一转为 BIOM 再合并。
一句话总结: 丰度表是整个微生物组分析的「通货」。格式转换错了,后面全是废活儿。宁可多花 10 分钟确认格式,也不要在最终出图时发现数据对不上。

1.6 本章知识体系

下面这张图帮你理清思路:

物种丰度表知识体系 物种丰度表 核心结构 常见格式 应用场景 样本×物种矩阵 计数/相对丰度 元数据嵌入 BIOM (JSON/HDF5) TSV / CSV Excel / HDF5 多样性计算 差异丰度分析 可视化/ML分类 ⚠ 格式转换是错误高发区 分隔符混淆 / 缺失值处理 / 元数据丢失 / 整数/浮点类型错误

图中展示了三个核心分支:结构(矩阵维度、计数类型、元数据)、格式(BIOM/TSV/CSV/Excel/HDF5)、应用(多样性、差异、可视化、ML)。底部标出了最容易踩坑的地方——格式转换。

我的实践建议: 入门阶段,先用 TSV 格式练手。等熟悉了数据结构和处理流程,再切换到 BIOM 拥抱标准化。切换时一定要做「来回转换验证」——把 BIOM 转成 TSV 再转回 BIOM,保证前后数据完全一致。这一步能提前帮你排掉 80% 的格式错误。