十二万个糖苷基因簇 — dbCAN-HGM 肠道菌群库

12 万基因簇 / 6,031 株代表基因组 / 7.9% 有底物

来源 https://pro.unl.edu/dbCAN_HGM发布时间: 2026-10-28最后更新: 2026-10-28 阅读 14
十二万个糖苷基因簇 — dbCAN-HGM 肠道菌群库

信息速览

数据集名称十二万个糖苷基因簇 — dbCAN-HGM 肠道菌群库
数据类型多组学,元数据,本体映射,原始数据链接
规模6,031 株物种级代表基因组(源自 13,886 株非冗余 MAG、10 个队列、15,084 株原始 MAG)
接入方式https://pro.unl.edu/dbCAN_HGM
AI 就绪度

肠道菌群能消化什么,取决于它们带什么酶。一个人吃下去的膳食纤维,自身的小肠一点也分解不了,全靠结肠里的细菌把多糖切成短链脂肪酸。切多糖的刀就是碳水化合物活性酶(CAZyme),而这类基因在细菌基因组里很少单打独斗——降解同一种糖的酶、把产物运进细胞的转运蛋白、调控这套系统的转录因子,往往紧挨着排在一起,形成物理相邻的基因簇。这个簇才是功能单元,单个酶只是一把刀。

长期以来,公开资源给的是"刀"的清单:某个家族有多少条序列、某个基因组里有多少个糖苷水解酶。至于这些刀怎么组合、组合起来对付哪种糖、在不同人群的肠道里丰不丰富,散在各处,没有一处整合。dbCAN-HGM 想补的就是这一段:它以基因簇为一级对象,把基因组来源、家族归并、底物推断、人群分布、饮食与疾病下的丰度差异捆在同一个编号上。

它的取舍很硬:宁可只覆盖四千余个有底物推断的簇,也不给其余八万多个簇编造底物;宁可只收高质量基因组,也不把低丰度菌种凑数进来。一屏速览见下表。

维度 内容
全名 dbCAN-HGM: CAZyme gene clusters in gut microbiomes of diverse human populations
别称 dbCAN HGM;中文可称"人体肠道微生物 CAZyme 基因簇库"
建库机构 美国内布拉斯加大学林肯分校 Nebraska Food for Health Center(YinLab,通讯作者 Yanbin Yin)
首次发布 2025 年站点上线,2026 年 1 月随论文正式发布
论文 Nucleic Acids Research 2026, 54(D1): D555–D563;DOI 10.1093/nar/gkaf1185;PMID 41263098
官方入口 https://pro.unl.edu/dbCAN_HGM
一级对象 碳水化合物活性酶基因簇(CGC),不是单个酶、不是单个基因组
基因簇数 121,883
代表基因组数 6,031 株物种级代表基因组(species-level representative MAG)
上游基因组 一万五千余株原始 MAG → 一万三千余株非冗余 → 六千余株代表
队列数 10 个已发表人群队列,覆盖亚、非、欧、北美、大洋洲、南美
基因簇家族数 11,314 个,其中 259 个含实验验证成员
有推断底物的簇 4,640 个,占全部簇的 3.9%
未注释蛋白 42,002 个,附 AlphaFold 预测结构与五个库的 Foldseek 比对
差异丰度条件 3 项研究、9 种条件、每条件 10 个样本
文件形态 一个 TSV 汇总表 + 五个目录 + 两个打包文件(含一个约 1.5 GB 的结构包)
许可 论文 CC BY-NC 4.0;数据免费下载,商用需先确认
更新节奏 官方承诺每年更新,纳入新测序的代表基因组与更多读数比对

§1 它要解决的具体麻烦

1.1 一份酶清单回答不了"它们在簇里做什么"

糖生物学的研究者手上从来不缺家族信息。CAZy 数据库把每个已知的碳水化合物活性酶编进 GH、GT、PL、CE、AA、CBM 六个大类下的家族,一个编号就说明了催化机制的大致方向:GH13 是 α-淀粉酶家族,GH43 是木聚糖与阿拉伯聚糖的 β-木糖苷酶与阿拉伯呋喃糖苷酶家族。这层信息足够回答"这个蛋白大概干什么"。

但它回答不了三个更实际的问题。

第一个是邻接。肠道细菌降解一种复杂多糖,往往需要多种酶协同,还需要把寡糖运进胞内。这些基因在基因组上常常成簇排列,形成多糖利用位点(PUL)。一个 GH43 基因单独存在,可能只是打扫残渣;它旁边如果还站着一个 SusC/SusD 样的转运系统和一个小调控蛋白,那它就处在一个专门对付木聚糖的流水线上。看单个基因看不出这个区别,看簇可以。

第二个是底物归属。家族编号只说到机制层面,不说到底物。GH43 里的酶有的偏好木聚糖,有的偏好阿拉伯聚糖,有的对两种都动手。要判断某个簇吃什么糖,需要拿它和已经做过实验、底物明确的 PUL 比基因组成,而不是比单个序列。

第三个是人群与饮食上的分布。同一个簇,在非洲狩猎采集人群的肠道里可能常见,在东亚城市人群里可能稀少;在纯素饮食干预后可能显著上升,在 omnivore 条件下可能回落。这种分布信息不在任何家族数据库里,只能在把宏基因组读数比对回基因组之后才有。

dbCAN-HGM 的全部设计都是在回应这三个问题:它的记录是簇不是基因,它的家族是按基因组成聚出来的,它的每条记录都挂了九个条件下的覆盖度。这也解释了它为什么不像一个"更大的 CAZy 下载包"——它换了计量单位。

1.2 三条常见的错误期待

第一条:把它当成 dbCAN 的新版本。 这是最常见的混淆。dbCAN2、dbCAN3 是网页服务器,输入是蛋白 FASTA,输出是家族注释与基因簇预测,核心价值是算法;dbCAN-HGM 是数据库,输入是一个基因簇编号,输出是这个簇的全部已知信息,核心价值是预先算好的结果与人群分布。两者同属一个实验室的工具谱系,也共用注释引擎,但形态完全不同。你没法"用 dbCAN-HGM 注释自己的序列"——要做那件事,去 dbCAN3。

第二条:把它当成全肠道的完整清单。 它只收高质量宏基因组组装基因组(MAG),门槛是完整度高于九成、污染低于百分之五。低丰度菌种在测序深度不足时组装不出这样的基因组,于是被系统性排除在外。官方在论文里明确承认这一点,并把收录中等质量基因组的打算写进了未来计划。所以"这个簇在我的样本里没找到"不等于"这个簇不存在",可能只是它所在的菌种没进库。

第三条:把推断底物当成实验结论。 官方首页用了一整段提示:所有基因簇的底物赋值都需要实验验证。这句话不是免责套话,而是这套方法的真实状态——底物是从"同家族里有实验验证的 PUL"传递过来的,传递的依据是基因组成的相似度,不是生化实验。相似不等于相同,同一个家族里混进不同底物的成员是常见现象,官方自己也提到有些家族同时含多个底物。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
查某个基因簇的完整注释 成员基因、CAZyme 家族、转运蛋白、转录因子、硫酸酯酶、肽酶、Pfam 结构域 够,一页看全
判断一个未知簇大概降解什么糖 家族归属 + 若家族含实验验证成员则给推断底物 部分够,只有 259 个家族有标签
比较不同大洲人群的糖利用潜力 按大洲浏览基因组与基因簇,附地理分布图 够做定性比较,南美样本过少
看某个簇在纯素饮食下是否上升 九种条件的逐碱基覆盖度曲线 + 差异丰度表 够,但每条件只有十个样本
给自己的宏基因组做 CAZyme 注释 不提供在线注释服务 不够,改用 dbCAN3
拿一批序列比对家族 HMM 不提供 HMM 模型下载 不够,改用 dbCAN3 或 CAZy 官方模型
找全新的、没有序列同源物的酶 四万余个未注释蛋白的 AlphaFold 结构与结构同源命中 够,这是它少见的独有能力
追溯每条序列的原始样本与伦理批号 只到队列层面 不够,需回原队列论文
做菌株级(strain-level)分析 只到物种级代表基因组 不够,代表基因组抹平了株间差异
直接训练底物预测模型 四千余个带标签簇,标签与特征同源 不够,会得到虚高成绩

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
你在做一个木聚糖降解菌的课题,想找还有哪些菌有完整的木聚糖利用基因簇 按底物浏览"CGC 家族",Xylan 组下列出全部相关家族与成员簇,并给每个簇的 taxonomy 先用 §5.3 的方式把家族表筛成子集,再按家族编号逐个看成员;对没有实验验证的家族,把成员当候选而非结论
你手上有宏基因组数据,注释出一堆散装 CAZyme,不知道怎么组装成"功能单元" 可以直接拿它的簇编号与基因组成当参照模板,比对自己的预测结果 用自己的样本跑 dbCAN3 得到簇,再按基因组成与它的家族做匹配(§5.4)
你在研究饮食干预对肠道糖代谢的影响,缺一个"已知功能"的参照集 三项研究、九种条件的差异丰度表,可按 CAZyme 家族、log2 倍数变化、P 值排序 把它当假设生成器,挑出候选簇后回原始读数自己复算,不要直接引用它的 P 值
你在做酶学实验,想找一个有新意、又不至于完全无从下手的靶标 未注释蛋白页可按 TM-score 筛出与已知 CAZyme 结构相似但序列无同源的蛋白 挑 pLDDT 高、TM-score 高、又落在有底物推断的簇里的蛋白,成功率最高(§4.3)
你在比较不同人群的肠道糖利用能力差异 按大洲的基因组与基因簇分布、按大洲×底物的交叉浏览 注意南美只有十余株代表基因组,任何"南美特征"的结论都不稳
你要为一个新菌株做注释,想快速知道它属于哪个已知物种、带哪些簇 用 GTDB taxonomy 谱系对照它收录的代表基因组 只做参照,不要拿它的簇编号当自己的编号
你在评估一个底物预测算法,需要一个公开基准 六百零二个实验验证 PUL + 七百五十六个同源 PUL,可作为金标准 按家族划分训练与测试,不能按簇随机划分(§7.3)
你想复现某篇论文里"某簇在纯素饮食下升高"的说法 对应簇页面有逐条件覆盖度图与 JBrowse 轨道 先确认该论文用的是哪项研究、哪个条件,三项研究的样本完全不同

1.5 一句话判断

它的价值不在于多给了一万条酶序列,而在于把"酶"重新组织成"簇 + 家族 + 底物假设 + 人群分布"这四层,让每一个编号都能回答"谁带的、和谁在一起、大概吃什么、在谁肚子里多"。

1.6 不适合谁:四条边界

不适合想给自己的序列做注释的人。 它不是注释服务,没有上传入口,也没有提供 HMM 模型包。要注释,去 dbCAN3;要家族模型,去 CAZy 或 dbCAN 的模型页。

不适合追求样本量的人。 十二万个簇听起来很多,但底物标签只有四千余个,差异丰度每条件只有十个样本。做统计推断时,这个样本量只够生成假设,不够支撑结论。

不适合做菌株级或个体级分析。 它的最小单位是物种级代表基因组,一个代表基因组背后可能是几十上百株亲缘基因组。株间那些决定实际表型的基因得失,在这里被抹平了。

不适合需要绝对定量的人。 覆盖度是比对深度的相对量,跨研究、跨测序平台不可直接比较。三项研究的读数长度、平台、建库方式都不同,官方把它们分开展示而不是合并,本身就是这个意思。

§2 数据构成与规格

2.1 四层结构:基因组、簇、家族、底物

理解这个库的最快方式,是把它想成四级漏斗,每一级都有自己的编号和自己的页面。

第一级是代表基因组。 十个队列的一万五千余株 MAG,先在各队列内按 99.9% 平均核苷酸一致性去冗余,合并后再按 95% 一致性聚成物种级代表,得到六千余株。每个代表基因组有一个页面,给出它所代表的 MAG 清单、长度与大洲分布、GTDB 谱系、所含簇与酶的列表,以及指向 JBrowse 的读数比对轨道。

第二级是基因簇。 在代表基因组上用 dbCAN3 的 CGC-Finder 预测,判据是至少一个 CAZyme 加一个转运蛋白、特征基因之间最多隔两个未注释基因。结果十二万余个。每个簇一个编号,形如 C54.bin_6_CGC67,前缀来自所属基因组的 bin 名。

第三级是基因簇家族。 把所有簇与 PUL 放在一起,按蛋白家族标签集合算两两 Jaccard 相似度,去掉相似度低于 0.5 的对,再用 MCL 聚类(膨胀系数 2),得到一万一千余个家族,编号形如 CGCFAM_00239。家族这一级是它最独特的设计:它不看序列相似度,只看"这个簇由哪些家族标签组成"。

第四级是底物。 家族里如果含实验验证的 PUL 或同源 PUL,就把这些 PUL 的底物传给家族内的未标注簇。一共两百五十九个家族满足条件,覆盖四千余个簇。剩下的一万一千余个家族没有底物,但仍保留家族编号与成员关系。

这四级的层级关系,决定了几乎所有使用方式:你可以从底物倒查家族、从家族倒查簇、从簇倒查基因组,但反过来从基因组往下走时,越往下越稀疏。

2.2 字段/记录的完整字典

簇页面与家族页面字段不同,下面分开列。这张表是照着官方页面结构整理的,字段名以站点显示为准。

字段 所在层级 含义 取值形态 备注
CGC ID 簇 基因簇唯一编号 基因组bin名_CGC序号 主键,全局唯一
Genome source 簇 所属代表基因组 bin 名 可跳转到基因组页
Taxonomic lineage 簇 GTDB 谱系 界门纲目科属种七级 由 GTDB-Tk v2.4.0 生成
Continent 簇 宿主大洲 亚/非/欧/北美/大洋洲/南美/未标注 来自原队列的采样地
Gene composition 簇 成员基因清单 表格,每行一个基因 含基因 ID、起止坐标、链方向
CAZyme family 簇 CAZyme 家族编号 GH/GT/PL/CE/AA/CBM + 数字 可跳 CAZyDB
Transporter 簇 转运蛋白注释 TC 或 Pfam 编号 特征基因之一
Transcription factor 簇 转录因子注释 家族名 特征基因之一
Sulfatase 簇 硫酸酯酶补充注释 有/无 与肽酶冲突时取 bit score 高者
Peptidase 簇 肽酶补充注释 MEROPS 编号 冲突时 bit score 相同则优先肽酶
Pfam domain 簇 Pfam 结构域 PF 编号 前两者都无时才用
Null gene 簇 未注释基因 基因 ID 链到结构页
pLDDT 未注释蛋白 AlphaFold 置信度 0–100 高于 90 为高置信
TM-score 未注释蛋白 Foldseek 结构比对得分 0–1 高于 0.5 视为同折叠
Best hit database 未注释蛋白 命中的结构库 AFDB/CAZyme3D/CAZymeID50/PDB/SwissProt 五个库分别给分
Coverage plot 簇 各条件逐碱基覆盖度 交互曲线 九个条件分三组
log2FC 簇·基因 差异丰度倍数变化 实数,可正可负 两两条件比较
FDR P value 簇·基因 校正后显著性 0–1 Mann–Whitney U 后校正
CGC-F ID 家族 家族编号 CGCFAM_xxxxx 主键
Family size 家族 成员簇数 整数 分布高度偏斜
Substrate 家族 推断底物 十四类之一或空 空的占绝大多数
Member type 家族 成员类型 PUL / iPUL / CGC 前两类带底物标签
JI network 家族 成员两两相似度网络 交互图 节点可点击跳转

2.3 一条记录的完整解剖

拿论文里那个被反复举例的簇做样本,看一条记录到底装了什么。C54.bin_6_CGC67 是官方两个案例研究之一的主角,属于木聚糖降解类型。下面按页面的显示顺序还原它的字段快照。

CGC ID              C54.bin_6_CGC67
Genome source       C54.bin_6
Taxonomic lineage   Bacteria > Bacteroidota > Bacteroidia > Bacteroidales
                    > Bacteroidaceae > Bacteroides > Bacteroides sp.
Continent           Asia
Gene cluster length 约 20 kb
Gene composition    7 个 CAZyme + 转运蛋白 + 调控基因 + 1 个未注释基因
CAZyme families     GH43, GH3, CE1(等,共 7 个)
Substrate (family)  Xylan
CGC-F               CGCFAM_00239(含 9 个 PUL + 17 个 CGC)
Read mapping        vegan 条件下全部基因显著高于 omnivore
Null protein        pLDDT 90.8;对 CAZyme3D GH43_2 的 TM-score 0.95

这些字段里,只有头两行是"标识",其余都是内容。真正让它区别于普通注释表的是后四行:家族归属、底物、覆盖度、结构同源。前四行任何注释工具都能给,后四行需要一套建库流程才能有。

要把这条记录变成可计算的表,最直接的办法是读家族汇总表再筛。下面这段从 TSV 里取出该家族的全部成员,并统计成员类型构成。

import pandas as pd

#-- 家族汇总表的列名以官方文件为准,先读表头确认
fam = pd.read_csv("cgc_family.tsv", sep="\t", low_memory=False)
print(fam.shape)
print(list(fam.columns)[:12])

#-- 取案例家族的全部成员
sub = fam[fam["family_id"] == "CGCFAM_00239"]
print(sub["member_type"].value_counts())
print(sub[["member_id", "substrate"]].head(30))

实际列名与上面示意可能有出入,跑之前先 print(list(fam.columns)) 对齐一次。这一步不能省:官方表头改过一次大小写风格,硬编码列名会在下一次更新时静默返回空表。

2.4 十个来源队列的构成

这个库的基因组不是自己采的,是从十个已发表队列里汇的。这张表决定了它能代表谁——也决定了它代表不了谁。

队列 原始研究 人群与生活方式 下载 MAG 数 非冗余 代表基因组
H3Africa 一期 Tamburini 等,2022 南非农村与城市 190 名女性 817 807 3
H3Africa 二期 Maghini 等,2025 非洲四国 1,820 名成人 1,796 1,779 706
Hadza Carter 等,2024 坦桑尼亚 167 名狩猎采集者 961 960 682
UHGG Almeida 等,2021 以全球北方国家为主 2,424 1,980 1,055
WIS Leviatan 等,2022 以以色列与美国为主 2,173 1,540 608
ELGG Zeng 等,2022 全球北方三岁以下儿童 315 299 178
CGMR Huang 等,2024 中国肠道微生物参考集 2,024 1,989 811
HRGM2 Ma 等,2024 41 国,东南亚、非洲、南美 2,324 2,307 1,743
IMGG Jin 等,2023 内蒙古人群,ONT 加 Illumina 481 478 206
SPMP Gounot 等,2022 新加坡 109 名健康人 1,769 1,747 39
合计 — 十个队列 15,084 13,886 六千余

这张表里有两行值得多看一会儿。H3Africa 一期的八百余株 MAG 只贡献了三个代表基因组,因为它与二期高度重叠,去冗余时几乎被吸干;SPMP 的一千七百余株只贡献三十九个,同理。这不是浪费,而是去冗余在正常工作:同一种菌测了很多遍,最后只留一个代表。

反过来,Hadza 的九百余株贡献了六百八十二个代表基因组,HRGM2 的两千三百余株贡献一千七百余个,说明这两个队列带来了大量别处没有的物种。非洲与东南亚的覆盖度就是靠这两行撑起来的。官方首页因此把"被研究不足的非洲肠道微生物组"单独列为特色。

2.5 与同类资源的字段差异

同一个实验室出了一串资源,名字很像,用途差得远。这张表把最容易混的五个放在一起。

资源 形态 一级对象 覆盖范围 有底物标签吗 有读数比对吗
CAZy 家族权威库 蛋白序列与家族 全生物界 部分家族页面有活性描述 无
dbCAN3 在线服务器 你上传的序列 任意输入 通过工具推断 无
dbCAN-seq 数据库 基因簇 四个生态环境 有,按生态环境分 无
dbCAN-PUL 数据库 实验验证 PUL 全库约六百余个 有,且是实验来源 无
dbCAN-HGM 数据库 基因簇与家族 人体肠道,十个队列 有,仅 259 个家族 有,九种条件
本表对比项 — — — — —

差别最大的是最后两列:前四个资源里只有 dbCAN-PUL 的底物来自实验,其余都是推断;只有 dbCAN-HGM 把读数比对回基因簇,能回答"多不多"。这个组合在公开资源里没有第二个。

§3 它是谁的数据:十个队列拼出来的全球肠道基因组底图

3.1 贡献者与机构

库由内布拉斯加大学林肯分校的 Nebraska Food for Health Center 维护,通讯作者是食品科学与技术系的 Yanbin Yin。团队里 Yuchen Yan 负责数据分析,Revanth Sai Kumar Reddy Patel 负责网站开发,Siva Shanmugam 做博士后研究。这个组在 CAZyme 生物信息学上已经做了十余年,前后出过三版 dbCAN 服务器、两版 dbCAN-seq,以及 eCAMI、dbCAN-PUL、dbCAN-sub 等工具。dbCAN-HGM 是这个谱系里第一个专门面向人体肠道、并且把基因簇家族当作组织原则的资源。

资金来自美国国立卫生研究院的两项资助(R01GM140370 与 R03OD039979),部分工作使用了该校 Holland Computing Center 的算力。技术服务栈是 Docker Compose 编排的 Laravel + MySQL + Apache,跑在一台 64 核、128 GB 内存的 Linux 服务器上。这个配置说明它的规模定位:不是一个 PB 级的组学仓库,而是一个精心组织的中等规模结果集。

3.2 时间线

时间 事件
2018 dbCAN2 服务器与 dbCAN-seq 首版发表,确立 CAZyme 自动注释的流程
2021 dbCAN-PUL 发表,积累实验验证的 PUL 与底物
2023 dbCAN3 与 dbCAN-seq 更新版发表,CGC-Finder 成为标准组件
2024 多个大型人群 MAG 队列发表(CGMR、HRGM2、Hadza 等)
2025 年 2 月 从 dbCAN-PUL 取实验验证 PUL 的截止时点
2025 年 7–8 月 家族表与结构包生成,站点上线
2025 年 11 月 论文在线发表
2026 年 1 月 论文正式见刊于 NAR 数据库专刊

这条时间线里最关键的一步是 2024 年。在那之前,人体肠道参考基因组的主体是 UHGG,而 UHGG 的采样以全球北方国家为主,非洲只占约百分之一。2024 年前后多个非洲与亚洲队列集中发表,才有了重做一版"全球肠道基因组底图"的材料。dbCAN-HGM 踩在这个窗口上。

3.3 十队列的取舍:为什么要重做去冗余

有人会问:UHGG 已经是一份统一的人体肠道基因组目录,为什么不直接在它上面做基因簇预测,非要重头汇十个队列?

答案在去冗余的策略上。UHGG 在做代表集时,用的是它自己那个时间点的全部输入,非洲样本占比极低,于是"物种代表"这个身份被全球北方的基因组占满了。当非洲队列后来补进来时,如果只是在 UHGG 的代表集上追加,新来的非洲基因组大多会被判为"与已有代表足够相似",从而不获得代表身份——它们的特有基因 content 就被吞掉了。

dbCAN-HGM 的做法是把十个队列的 MAG 全部放在一起重新聚类:先各队列内按 99.9% 去冗余,再合并按 95% 聚成物种级代表。这样非洲与亚洲的基因组有同等机会成为代表。结果是六千余株代表基因组里,含亚洲 MAG 的簇占 47.9%,含非洲 MAG 的占 41.0%——官方特别强调这个比例远高于 UHGG 的对应数字。

代价是它与 UHGG 的编号不一一对应,想联用就得自己做基因组比对建映射,官方没有对照表。

3.4 大陆分布与那 10.5% 的未标注

大洲 代表基因组 占比 全部非冗余基因组 占比
亚洲 2,105 34.9% 5,829 42.0%
非洲 1,706 28.3% 4,055 29.2%
欧洲 1,095 18.2% 1,650 11.9%
北美 371 6.2% 554 4.0%
大洋洲 105 1.7% 184 1.3%
南美 16 0.3% 36 0.3%
未标注 633 10.5% 1,578 11.4%
合计 6,031 100% 13,886 100%

两个观察。第一,亚洲与非洲合计占代表基因组的六成以上(官方口径 71.1% 的"亚洲加非洲覆盖度"是另一个算法,按含该洲 MAG 的簇计,不是简单相加)。第二,有超过一成的代表基因组没有大洲归属。这些基因组来自原队列里采样地信息不全的样本,官方把它们单列为"未标注",而不是猜一个洲塞进去。凡是按大洲做的分析,都该把这 10.5% 显式排除或单列,否则分母会错。

南美洲的十六株是个明确的空白。任何拿这个库做"全球"比较的研究,都应该在方法里写清南美实质上没有代表性,而不是笼统说"覆盖六大洲"。

§4 它最独特的东西:把"簇"当成一等公民

4.1 为什么簇比单个酶更有信息量

一个基因簇携带的信息量,远大于它包含的基因之和。原因有三层。

第一层是共发生。 两个酶如果在几百个基因组里总是相邻出现,它们大概率协同工作。这种统计信号在单基因层面完全看不到,只有在簇层面才成立。dbCAN-HGM 把这种共发生关系固化成了"家族":同一家族的成员,基因组成高度相似,即使它们来自不同物种、不同大洲。

第二层是调控与运输。 一个簇里有转运蛋白,说明这套酶作用于胞外底物、产物需要运进细胞;有转录因子,说明这套系统受底物诱导。这两类信息对判断"这个簇是不是真的在降解某种糖"至关重要,而它们恰恰是最容易被单基因注释丢掉的。

第三层是可操作性。 做酶学实验的人要的不是一个基因,是一段可以克隆的基因组区域。簇给了起止坐标与成员清单,直接对应一个可合成的片段。这是从"注释"到"实验"的最后一公里。

4.2 CGC 家族:用基因组成相似度做无监督聚类

家族这一级是这个库方法论上最有意思的部分,值得拆开看。

传统做法判断两个基因簇是否同源,靠序列比对:把两段 DNA 或两套蛋白互相比,看identity。这在近缘物种之间好用,跨门跨纲就失效——同样的功能,革兰阳性菌与拟杆菌门的实现方式可能完全不同,序列上找不出相似性。

dbCAN-HGM 换了个判据:不看序列,看蛋白家族标签的集合。一个簇由若干个基因组成,每个基因被注释到某个 Pfam 家族或 CAZyme 家族,于是一个簇就变成一张标签清单。两个簇的相似度用 Jaccard 指数算,即交集除以并集。这个指标完全忽略序列相似度,只看"用了哪些零件"。

得到两两相似度矩阵后,去掉低于 0.5 的对,剩下的用 MCL 聚类。MCL 的好处是不需要预先指定簇数,它通过模拟随机游走把图切成自然密集的子图,膨胀系数 2 控制切分的粗细。最终一万一千余个家族,规模从两个成员到上百个成员不等。

这个方法带来一个直接后果:家族里的成员可以跨物种、跨大洲,只要零件组合相似。案例里的 CGCFAM_00239 就同时含来自亚洲与非洲的成员。这个性质让"底物传递"成为可能——只要家族里有一个实验验证过的 PUL,其余成员的底物就有依据,哪怕它们来自完全不同的菌。

代价是:基因组成相似不等于底物相同。有些化学结构相近的糖,降解它们的酶组合高度重叠,于是同一个家族里会混进不同底物的成员。官方在图注里就举了果胶与阿拉伯半乳聚糖的例子,说这类"结构相似的底物共用一个家族"是常见现象。这也是为什么官方把"多底物家族"单独统计了二十一个,而不是强行合并成一个。

4.3 案例:C54.bin_6_CGC67 与它的家族

官方给了两个案例研究,第一个就是 C54.bin_6_CGC67。这个例子几乎把所有特性都串起来了,值得完整走一遍。

这个簇编码七个 CAZyme,包括 GH43、GH3、CE1,属于木聚糖降解类型。它所在的家族 CGCFAM_00239 有九个实验验证的 PUL(全部标为木聚糖)与十七个未标注的 CGC,家族成员的来源以亚洲与非洲为主。在读数比对上,这个簇的全部基因在纯素条件下都显著高于杂食条件。它里面还有一个未注释蛋白,AlphaFold 预测结构的平均 pLDDT 是 90.8,对 CAZyme3D 里 GH43_2 蛋白的 Foldseek 比对 TM-score 达到 0.95。

这一条记录同时演示了四件事:家族如何给底物(九个 PUL 都标木聚糖,于是十七个 CGC 也被推为木聚糖)、读数比对如何给方向(纯素高于杂食)、结构比对如何补上序列注释的缺口(一个序列上找不到同源物的基因,结构上却明确是 GH43 家族)、以及地理分布如何提供线索(成员集中在亚洲与非洲)。

最有价值的是最后那一环。序列注释失败的基因,传统流程里只能标成"功能未知"然后丢掉;结构比对把它捞了回来,并且给出了具体的家族归属。对一个想做实验的人来说,这等于从"不知道这是什么"直接跳到"这是一个很可能有木聚糖酶活性的蛋白,可以克隆表达试试"。这就是 §1.3 里"找全新的、没有序列同源物的酶"那一行的实际含义。

这个案例在 §5.4、§7.2、附录 D 里还会再出现,因为它同时是最好的入门示例和最容易被误读的样本。

4.4 底物推断的漏斗:从十二万到四千六

这是全篇最该记住的一组数字,因为它决定了这个库能做和不能做的事。

阶段 数量 说明
预测出的基因簇 121,883 六千余株代表基因组上的全部 CGC
加上 PUL 与同源 PUL 123,241 602 个实验验证 PUL + 756 个同源 PUL
去冗余后可聚类的簇 59,238 58,579 个 CGC + 227 个 iPUL + 432 个 PUL
聚成的家族 11,314 单底物 238 + 多底物 21 + 无底物 11,055
含实验验证成员的家族 259 238 加 21
拿到推断底物的簇 4,640 分布于这 259 个家族内
占全部簇的比例 3.9% 按十二万余的分母算
占有家族归属簇的比例 7.9% 按五万八千余的分母算

两个比例都对,只是分母不同。官方统计页同时给了 3.9% 与 7.9%,前者按全部预测簇算,后者按成功进入家族的簇算。引用时必须说清用的是哪个,否则差一倍。

漏斗的形状说明了一件事:这个库的主体是"有结构、无底物"的簇。一万一千余个家族里,一万一千余个没有底物标签——几乎所有家族都没有。把它们当作"未知功能的基因簇目录"来用是合理的,把它们当作"底物标注数据集"来用则是误读。

4.5 边界条件

条件 会发生什么 建议
目标物种是低丰度菌 组装不出高质量 MAG,不在库内 换用中等质量 MAG 资源,或自己组装
目标底物是罕见糖 没有实验验证 PUL,家族无标签 只能看家族与基因组成,底物自行推断
想做定量比较 覆盖度跨研究不可比 只在同一研究内部比较条件差异
想做株级差异 代表基因组抹平株间差异 回到原始 MAG 或分离株
想验证某个底物推断 库内无实验数据 设计酶活实验,或查原 PUL 文献
想对比南美人群 仅十六株代表基因组 明确声明该洲不具代表性

§5 怎么拿到:从网页到可训练表

5.1 下载面与目录结构

官方下载页给的是"一个表 + 五个目录 + 两个打包文件",没有提供 API。这个形态决定了取数方式:小表直接下,大文件按需取。

下载项 形态 体量 内容
cgc_family.tsv 单个 TSV 约 2.5 MB 全部家族与成员的汇总,最有用的一张表
representative_genomes.tar.gz 打包 未标注 代表基因组的 FASTA、GFF 与注释
dbcanhgm_final_pdbs.tar.gz 打包 约 1.5 GB 四万余个未注释蛋白的预测结构
Gene Clusters 目录 目录浏览 按基因组分 每个基因组的簇文件
Representative Genomes 目录 目录浏览 同上 与打包文件内容一致,可按需取
Read Mapping Data 目录 目录浏览 按研究分 三项研究的比对 TSV
CAZymes 目录 目录浏览 — 酶的分类与注释文件
Non-Redundant Genomes 目录 目录浏览 — 一万三千余株非冗余基因组与元数据

对多数分析,cgc_family.tsv 加 Read Mapping 目录就够,两者合计几十兆。结构包只在挖掘新酶时才需要,建议先按 pLDDT 与 TM-score 筛好名单,再回站点逐条看结构页,避免整包下载。

5.2 批量下载

目录型资源没有打包清单,靠 HTTP 目录列表取。下面这段先探一遍目录,再决定拉哪些。

#-- 1. 建工作目录
mkdir -p dbcan_hgm && cd dbcan_hgm

#-- 2. 取最主要的家族汇总表
curl -sL -O https://pro.unl.edu/dbCAN_HGM/datafiles/cgc_family.tsv
ls -lh cgc_family.tsv

#-- 3. 探目录结构(只列一层,避免把几万个文件拉下来)
curl -sL https://pro.unl.edu/dbCAN_HGM/downloads/folder/gene_clusters \
  | grep -o 'href="[^"]*"' | head -40

#-- 4. 取代表基因组的打包版,比逐文件拉快
curl -sL -O https://pro.unl.edu/dbCAN_HGM/datafiles/representative_genomes.tar.gz

#-- 5. 校验两个包都能解开再继续
tar -tzf representative_genomes.tar.gz | head -5

第三步列出来的链接格式决定了后面怎么批量取。如果目录是 Apache 自动索引,链接就是相对路径,可以用 wget -r -np -l 1 镜像一层;如果是自建路由,链接会是带参数的地址,需要按页面结构解析。

5.3 读家族汇总表

cgc_family.tsv 是全库信息密度最高的一个文件。它把家族与成员的对应关系压平在一张表里,适合做筛选与统计。

import pandas as pd

fam = pd.read_csv("cgc_family.tsv", sep="\t", low_memory=False)
print("行数", len(fam))
print("列名", list(fam.columns))

#-- 家族规模分布:按家族编号聚合成员数
size = fam.groupby("family_id").size().sort_values(ascending=False)
print("家族数", size.shape[0])
print("最大 5 个家族", size.head(5).to_dict())

#-- 有底物标签的家族(底物列非空)
labeled = fam.dropna(subset=["substrate"])
print("带标签家族数", labeled["family_id"].nunique())

#-- 按底物统计家族数,做一张清单供后续筛选
by_sub = labeled.groupby("substrate")["family_id"].nunique().sort_values(ascending=False)
print(by_sub)

这段代码里唯一需要现场确认的是列名。官方表头用的是下划线风格,但字段名在更新中可能微调,跑之前先 print(list(fam.columns))。这是使用任何无 API 的静态表都要养成的习惯:不要相信记忆里的列名。

5.4 取单个簇页面的内容

页面是服务端渲染的 HTML,可以直接抓。但要注意站点没有承诺稳定的 URL 结构,抓取脚本必须能容忍 404 与结构变动。

import re
import requests
from bs4 import BeautifulSoup

BASE = "https://pro.unl.edu/dbCAN_HGM/clusters/"

def fetch_cgc(cgc_id, timeout=20):
    r = requests.get(BASE + cgc_id, timeout=timeout)
    r.raise_for_status()
    soup = BeautifulSoup(r.text, "html.parser")
    #-- 标题区:基因簇编号与所属基因组
    title = soup.find("h1")
    #-- 表格区:基因组成、注释、家族与底物都在 table 里
    tables = soup.find_all("table")
    rows = []
    for t in tables:
        for tr in t.find_all("tr"):
            cells = [c.get_text(strip=True) for c in tr.find_all(["td", "th"])]
            if cells:
                rows.append(cells)
    return title.get_text(strip=True) if title else "", rows

name, rows = fetch_cgc("C54.bin_6_CGC67")
print(name)
for r in rows[:15]:
    print(r)

如果只是想拿结构化数据而不是页面文本,更稳的路线是先读 cgc_family.tsv 定位家族,再用家族页的网络图数据(站点用 JavaScript 渲染,节点数据通常在页面内嵌的 JSON 里)取成员清单。抓 HTML 表格适合一次性核查,不适合做批量流水线。

5.5 差异丰度表的用法

官方单独做了一个"基因簇内差异丰度 CAZyme"的页面,可按底物、大洲、簇编号、CAZyme 家族搜索,按 log2 倍数变化或 P 值排序。这是全库唯一一处把统计结果直接摆出来的地方。

import pandas as pd

#-- 差异丰度表需要从页面导出,或按页面提供的字段自行整理
#-- 这里演示拿到表之后的筛法:先卡显著性,再卡效应量
dag = pd.read_csv("dag_table.tsv", sep="\t")

sig = dag[(dag["fdr"] < 0.05) & (dag["log2fc"].abs() > 1)]
print("显著且效应量足够的基因数", len(sig))

#-- 只看 CAZyme 基因,并按家族汇总
caz = sig[sig["is_cazyme"] == True]
print(caz.groupby("cazyme_family").size().sort_values(ascending=False).head(15))

#-- 把基因映射回簇,看哪些簇受影响最集中
per_cgc = caz.groupby("cgc_id").size().sort_values(ascending=False)
print(per_cgc.head(20))

这样筛出来的簇就是"假设生成"的产物:它们在特定饮食或疾病条件下丰度显著变化,且变化集中在糖代谢基因上。下一步不是直接下结论,而是回原研究核对样本、看覆盖度曲线的形状是否连续(断续的高覆盖往往是比对假象)、再决定是否值得做实验。

5.6 五个最容易出错的地方

第一,把不同研究的覆盖度放在一起比。 三项研究的测序平台、读长、建库方式都不同,覆盖度的绝对水平不可比。官方把它们分开展示,就是为了防止这种合并。

第二,把簇编号当成稳定标识。 簇编号的前缀是基因组 bin 名,而 bin 名来自上游队列的命名习惯。库更新后代表基因组可能变化,编号可能失效。做长期项目时要把序列一起存下来,不能只存编号。

第三,忽略"未标注大洲"的 10.5%。 按大洲聚合时,这一部分要么单列要么排除,不能默认归到某一洲。

第四,把家族里的多底物情况当噪声。 二十一个家族有多底物标签,这不是错误,而是化学结构相似的底物共用酶系统的真实反映。处理时应当保留多标签,不要强行取第一个。

第五,用 Jaccard 家族做跨库迁移。 家族编号是这套流程内部的产物,不能直接映射到别处的簇编号。跨库比较必须回到基因层面重新算相似度。

§6 与库内条目的关系

6.1 关系图谱

这个库在站内没有直接的同族词条,它的位置要靠"上游资源"与"下游用途"两圈来定位。

圈层 资源 与本库的关系
上游·家族权威 CAZy 提供 CAZyme 家族定义与蛋白序列,本库的家族编号体系来自这里
上游·注释引擎 dbCAN2 / dbCAN3 提供 CGC-Finder 与 HMM 注释,本库的簇是它的输出
上游·底物金标准 dbCAN-PUL 提供六百余个实验验证 PUL,本库底物标签的唯一来源
同族·生态环境版 dbCAN-seq 同样是簇级数据库,但覆盖四个生态环境、无读数比对
下游·人群基因组 UHGG / HRGM2 / CGMR 等 本库的输入,十个队列之一或全部
下游·酶学实验 各实验室的 PUL 表征工作 本库的候选靶标流向这里验证
相邻·微生物组资源 人体肠道基因组目录类资源 共享 MAG,但组织方式不同(按物种 vs 按功能单元)

这个图谱说明它不是孤立出现的:它是 CAZyme 注释工具链跑到人体肠道这个特定场景、并且跑完之后把结果按功能单元重新组织的一次沉淀。

6.2 检索路径

按使用目的分三条路径,走法完全不同。

你想找 入口 路径
某个底物有哪些家族 首页按底物浏览 底物 → 家族列表 → 成员簇 → 簇页面
某个大洲有哪些簇 首页按大洲浏览 大洲 → 基因组或簇 → 簇页面
某个 CAZyme 家族在哪些簇里 按 CAZyme 浏览 家族 → 含该家族的簇 → 簇页面
某个未注释蛋白有无结构同源 未注释蛋白页 按 TM-score 或 pLDDT 筛 → 结构页
某个条件下哪些基因差异显著 差异丰度页 按底物或大洲筛 → 按 log2FC 排序 → 簇页面
某株菌带哪些簇 基因组页 基因组 → 簇列表 → 簇页面

6.3 与其他库的分工判据

一句话版:注释你的序列用 dbCAN3,查家族定义用 CAZy,找实验验证的底物用 dbCAN-PUL,看人群分布与饮食响应用 dbCAN-HGM。

展开一点:问"这个蛋白属于哪个家族",三个资源都能答,CAZy 最权威;问"这段区域是不是功能簇",dbCAN3 与 dbCAN-HGM 都能答,前者要你自己跑,后者只管它的六千余株代表基因组;问"这个簇吃什么糖、在谁肚子里多",只有 dbCAN-HGM 能答,且答案带明确置信边界。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

评价这个库时,最容易犯的误判是拿"标注覆盖率"当质量指标。看到十二万个簇只有四千余个有底物,第一反应往往是"这库标注得太差"。

这个判断错在把两件事混成一件。底物标注的覆盖率低,不是标注做得粗糙,而是实验验证的 PUL 总量本来就只有六百余个。整个糖生物学界几十年积累下来的、底物明确的 PUL,就这么点。任何想给簇标底物的数据库,天花板都由这个数字决定,不是由建库者的努力程度决定。dbCAN-HGM 已经把这六百余个的每一分信息都用尽了——通过家族聚类,把六百余个标签放大到了四千余个簇上,放大了近七倍。

真正该问的不是"为什么只有 3.9%“,而是"在有标签的那 3.9% 上,标注可不可信;在没有标签的 96.1% 上,还剩下什么可用”。这一节就按这个框架展开。

7.1 五维评分

按 DAIMS 的常用维度打分,每项 1–5 分,针对"作为肠道糖代谢研究资源"这个用途。

维度 分数 理由
数据规模 4 六千余株代表基因组、十二万余个簇,在同类簇级资源里最大
标注质量 3 底物是推断而非实验;家族聚类有交叉验证支撑,但覆盖率低
任务适配 5 簇级 + 家族 + 底物 + 人群 + 饮食响应,这个组合无替代
文档完整 4 论文方法写得细,站点有统计面板与帮助页;缺字段级说明文档
可获取性 5 免注册、直接下载、汇总表只有几兆、代码开源

五项合计 21 分(满分 25)。分数结构与定位一致:规模与适配拉满,标注质量是唯一短板,而这一项低分主要来自领域天花板,不是实现缺陷。

7.2 注释链条的三层可信度

这个库的每条记录背后是一条注释链,每一环的可信度不同。混在一起看会高估整体可靠性。

环节 方法 可信度 失效场景
基因组质量 CheckM 完整度 >90%、污染 <5% 高 低丰度菌种组装不出,被排除
物种归属 GTDB-Tk v2.4.0 高 新属新种可能只到科级
CAZyme 家族 dbCAN3 的 HMM 比对 中高 弱同源、短结构域、多功能酶会漏或误分
簇边界 CGC-Finder,特征基因间最多两个空位 中 组装断裂处邻接关系失真;边界基因归属有任意性
补充注释 硫酸酯酶、肽酶、Pfam 依次兜底 中 三者都无命中则标为未注释
家族归并 基因组成 Jaccard + MCL 中高 十折交叉验证 F1 多数糖类高于 0.8
底物传递 家族内含实验验证 PUL 中 结构相似底物共用家族,会串味
差异丰度 Mann–Whitney U + FDR 中低 每条件十个样本,批次效应未校正

这张表该这么读:前两环可以放心用,中间三环要当作"高质量的计算预测",后两环只能当作假设。

第三环到第五环的具体做法值得多说一句。run_dbcan 把基因分成"特征基因"(CAZyme、转运蛋白、信号转导蛋白、转录因子)与"非特征基因"。非特征基因先查硫酸酯酶库,再查肽酶库,两者都有命中时取 bit score 高的,bit score 相同则优先肽酶,两者都无才落到 Pfam。这个优先级是人为设定的规则,不是生物学定律,遇到边界情况(一个基因同时像硫酸酯酶又像肽酶)时结果有任意性。做精细分析时,这类基因应当单独标记。

7.3 已知的、可枚举的偏差

偏差 表现 影响
高质量门槛 只收完整度 >90% 的 MAG 低丰度菌种系统性缺席
大洲不均 亚洲 34.9%、非洲 28.3%,南美 0.3% "全球"比较实为亚非比较
未标注大洲 10.5% 的代表基因组无归属 按洲聚合时分母不确定
队列重叠 部分队列 MAG 高度重复,去冗余后贡献极少 某些人群的实际权重低于其样本量暗示
底物稀缺 仅 259 个家族有标签 96% 的簇无底物
多底物家族 21 个家族含多个底物标签 强制单标签会引入错误
样本量小 每条件十个样本 差异丰度检验功效低,易假阳也易假阴
批次不可比 三项研究平台不同 跨研究合并会引入系统偏差
代表基因组 一株代表背后是几十上百株 株间基因得失被抹平
组装假象 MAG 由 contig 拼成 簇的物理连续性可能不真实

第十条值得展开。MAG 是把读数拼成 contig 再分箱的产物,一个真实基因组常断成几十到几百段。基因簇若横跨断裂点,两侧的基因会被分到不同 contig 甚至不同 bin,而 CGC-Finder 只在单个 contig 内找簇,跨断裂的簇就丢了。低覆盖区与重复序列区最容易断,所以库里的簇偏向落在完整 contig 上的那些。这是所有基于 MAG 的簇预测共有的盲区。

7.4 外部验证矩阵

这个库太新,独立的外部验证还不多。能核实的验证来自建库方自己做的两类。

验证类型 做法 结果 局限
家族聚类交叉验证 用带底物的 PUL 做十折交叉验证 十二类主要糖中多数 F1 高于 0.8 标签与特征同源,成绩偏乐观
结构同源一致性 未注释蛋白对五个结构库交叉比对 AFDB 与 CAZyme3D 的命中率接近(14.5% vs 12.7%) 结构相似不等于功能相同
pLDDT 分布 四万余个预测结构的置信度统计 28.1% 高于 90,51.0% 在 70–90 只说明结构可信,不说明注释正确
案例可行性 两个案例逐条展示从簇到候选的路径 逻辑闭环 案例由作者挑选,非随机抽样

第一行的偏乐观需要解释。若划分单位是簇,而簇又多来自同一家族的相似成员,训练与测试两侧会含高度相似的样本,成绩自然虚高。官方用带标签 PUL 做基准,但正文没写清是按家族还是按簇划分,补充材料里才有细节。拿这个成绩做算法比较时,应自己重做一次按家族的划分。

第三行那两个比例相加是 79.1%,剩下两成多的结构置信度在 70 以下,只能看折叠大类、看不到细节。挑靶标时优先选 pLDDT 高于 90 的部分,这是唯一由官方数据直接支撑的筛选建议。

7.5 它为何能持续:底物金标准涨得慢,基因组涨得快

这个库的生存逻辑,藏在一个不对称里:公共肠道基因组的数量每年以万计增长,而实验验证的 PUL 每年只增加几十个。前者是算力问题,后者是湿实验问题,两者的增速差了一个数量级。

这个不对称决定了三件事。第一,库的"基因组层"必须持续更新,否则很快过时——官方承诺每年更新,正是因为这个压力。第二,库的"底物层"不会因为更新而大幅改善,六百余个 PUL 变成八百个,覆盖率也只从 3.9% 挪到 5% 左右。第三,也是最重要的:这类库的长期价值不在底物标注的覆盖率,而在把新基因组不断地挂到已有的功能框架上。每来一批新测序的人群,就能立刻回答"这些人的肠道里,已知的糖利用系统有多少、分布在哪些菌里"。

只要这个不对称存在,把簇当组织单位、把家族当传递机制的做法就有存在理由。反过来,如果将来实验通量大幅提升,底物标签变成直接测定而非家族传递,这类库的形态会整个变掉——那时候它的核心资产就从"家族聚类"变成"实验数据管理"。这个可能性不该被忽略,但短期内看不到。

§8 生态位与历史

8.1 历史沿革

dbCAN 这条线走了十多年,可以分成三个阶段。

第一阶段是"注释单个蛋白"。 2012 年前后首版 dbCAN 上线,解决的是"给我一个序列,告诉我它属于哪个 CAZyme 家族"。核心是把 CAZy 的家族序列建成 HMM 库,用 hmmscan 比对。这一阶段的关键词是家族。

第二阶段是"找基因簇"。 2018 年 dbCAN2 引入 CGC 预测,2023 年 dbCAN3 把 CGC-Finder 固化进流程,同时 dbCAN-seq 把簇级数据库做成了产品,覆盖四个生态环境。这一阶段的关键词是邻接。

第三阶段是"按人群与生活方式组织"。 2024 年之后,大型人群 MAG 队列集中出现,dbCAN-seq 的四个生态环境框架装不下"同一生态位里不同人群的差异"这个问题,于是有了 dbCAN-HGM。这一阶段的关键词是分布。

三个阶段的技术栈是同一条:HMM 注释 → 簇预测 → 家族聚类 → 底物传递,变的只是组织维度。这也解释了论文为何强调组织方式与数据覆盖,而不强调新算法。

8.2 与 dbCAN-seq 的分工

这是最容易被混淆的一对。两者都是簇级数据库,都由同一个组维护,都用 CGC-Finder,名字只差一个后缀。

维度 dbCAN-seq dbCAN-HGM
覆盖范围 四个生态环境(含肠道、土壤、海洋等) 只做人体肠道
基因组来源 以 UHGG 为主 十个队列重做代表集
簇数 数十万量级,跨环境 十二万余,单一生态位
家族 无基因簇家族这一层 有一万一千余个家族
底物推断 有,按环境 有,按家族传递
读数比对 无 有,九种条件
结构注释 无 有四万余个未注释蛋白的结构

一句话分工:要跨环境比较用 dbCAN-seq,要在人体肠道内部做人群与饮食分析用 dbCAN-HGM。 两者不是版本关系,是切分维度的关系。

8.3 生态位

角色 典型资源 本库的位置
家族字典 CAZy 上游,本库不自建家族定义
注释工具 dbCAN3 上游,本库调它算结果
序列级数据库 dbCAN-seq 平行,切分维度不同
实验底物库 dbCAN-PUL 上游,本库底物标签的唯一来源
人群基因组目录 UHGG、HRGM2、CGMR 上游,本库的原料
功能单元目录 本库 独此一家:簇 + 家族 + 人群 + 读数

它占的坑是"功能单元 × 人群分布"。这个坑不大,但很具体:做肠道糖代谢的人,绕不开它;做别的方向的人,基本用不上。

8.4 谁在用它,用来做什么

库太新,公开的第三方使用案例还很少。从论文自己给出的两个案例研究可以推断出三类预期用户。

第一类是酶学实验组。他们需要靶标,而库提供的正是"有结构证据、落在有底物推断的家族里、又在特定饮食条件下丰度变化"的候选清单。案例里那个 pLDDT 90.8、TM-score 0.95 的未注释蛋白,就是给他们准备的。

第二类是微生物组数据分析组。他们手上有大队列的宏基因组,想从"物种组成"往下走到"功能",缺一个把基因簇映射上去的参照。库的家族体系给了他们一个现成的分组框架。

第三类是营养与代谢病研究组。他们关心膳食纤维干预的效果,需要知道"哪些糖利用系统对饮食敏感"。库的差异丰度表提供了起点,虽然样本量只够生成假设。

§9 使用指引

9.1 三种角色的路径

角色 第一天 第一周 注意事项
酶学实验者 读案例页,理解从簇到候选的链条 筛出 3–5 个 pLDDT 高于 90、TM-score 高于 0.8、且在带底物家族里的蛋白 先做序列保守性检查,别直接合成
微生物组分析师 下 cgc_family.tsv,跑通 §5.3 把自己的簇按基因组成匹配到家族,做富集分析 匹配阈值要自己定,官方没给跨库映射
营养与代谢研究者 看差异丰度页,按底物筛 挑出候选簇后回原研究核对样本与覆盖度曲线 不要直接引用它的 P 值,重算

9.2 一条最短的可用流程

从零到拿到一张可分析的簇表,最短路径是这样。

#-- 1. 取家族汇总表(几兆,秒下)
mkdir -p dbcan_hgm && cd dbcan_hgm
curl -sL -O https://pro.unl.edu/dbCAN_HGM/datafiles/cgc_family.tsv
wc -l cgc_family.tsv

#-- 2. 只留有底物标签的家族,另存一份
python3 - <<'PY'
import csv
rows = list(csv.DictReader(open("cgc_family.tsv"), delimiter="\t"))
cols = rows[0].keys()
keep = [r for r in rows if r.get("substrate", "").strip() not in ("", "NA")]
with open("labeled.tsv", "w", newline="") as f:
    w = csv.DictWriter(f, fieldnames=cols, delimiter="\t")
    w.writeheader()
    w.writerows(keep)
print("全部", len(rows), "带标签", len(keep))
PY

#-- 3. 按底物切一份木聚糖子集
python3 - <<'PY'
import csv
rows = list(csv.DictReader(open("labeled.tsv"), delimiter="\t"))
xy = [r for r in rows if "xylan" in r.get("substrate", "").lower()]
print("木聚糖相关行", len(xy))
for r in xy[:10]:
    print(r.get("family_id"), r.get("member_id"), r.get("substrate"))
PY

注意第二步的 substrate 列名与空值写法(是空串还是 NA)需要按实际文件确认,不同版本的导出习惯不同。这段脚本的价值不在它本身,而在示范了"先筛家族、再筛成员"这个顺序——反过来先筛成员会丢掉家族的上下文。

9.3 引用方式

引用对象 内容
主论文 Yan Y, Patel RSKR, Shanmugam NRS, Akresi J, Yin Y. dbCAN-HGM: CAZyme gene clusters in gut microbiomes of diverse human populations. Nucleic Acids Res. 2026;54(D1):D555–D563. doi:10.1093/nar/gkaf1185
数据库 dbCAN-HGM, https://pro.unl.edu/dbCAN_HGM(注明访问日期)
代码 https://github.com/azureycy/dbCAN-HGM 与 figshare 归档 doi:10.6084/m9.figshare.30365827.v1
上游工具 若用了它的簇预测结果,应同时引 dbCAN3(doi:10.1093/nar/gkad328)
底物来源 若引用了底物推断,应同时引 dbCAN-PUL(doi:10.1093/nar/gkaa742)
许可说明 论文 CC BY-NC 4.0;商业使用需联系作者

写方法部分时,建议明确三件事:用的是哪个版本(站点没有版本号,只能写访问日期)、底物是推断值、以及是否用了未标注大洲的基因组。

§10 AI 使用声明

项目 声明
文本生成 本文由 AI 辅助撰写,结构与事实由编辑核对
数字来源 规模、结构、边界三类数字来自官方站点统计面板与论文全文
页面核验 首页、统计页、帮助页、关于页、下载页于 2026 年 10 月 28 日直接访问
论文核验 经 Europe PMC 取得 PMC12807701 全文 XML,方法、结果、可用性声明逐段核对
口径冲突 CAZyme 总数存在两个数字,已在 §2.2 与 FAQ 中并列说明,未做取舍
未核验内容 cgc_family.tsv 的实际列名与行数、各家族的具体成员数、结构包的实际解压体积
代码状态 文中代码为可运行骨架,列名需按实际文件对齐
图像 无配图;封面为生成式提示词,不含真实数据可视化
免责 本文不构成实验设计建议;底物推断须经实验验证

常见误读(避坑清单)

说法 实际 证据
「它就是 dbCAN 的新版本」 两者形态不同,一个是注释服务器,一个是结果数据库 官方首页「相似资源」一栏把 dbCAN 列为并列项而非前身
「它收录了所有肠道菌」 只收完整度高于九成的高质量 MAG,低丰度菌种缺席 论文方法段写明 CheckM 门槛,并承认会漏低丰度物种
「十二万个簇都能查到降解什么糖」 只有四千余个有推断底物,占 3.9% 统计面板显示四千六百四十个簇获得赋值
「推断底物等于实验结论」 官方明确要求实验验证 首页醒目提示所有底物赋值需实验验证
「覆盖六大洲,可以做全球比较」 南美仅十六株代表基因组 统计面板大洲分布表
「覆盖度可以直接跨研究比」 三项研究平台不同,官方分开展示 统计面板把三套读数分成三组
「CAZyme 总数是四十四万余个」 论文这样写,网站面板写四十一万余个 两个口径并存,差额官方未说明
「家族就是同源簇」 家族按基因组成相似度聚,不看序列同源 论文方法段:Jaccard 指数 + MCL 聚类
「没底物标签的簇是废数据」 它们保留组成、taxonomy、分布、覆盖度 一万一千余个家族虽无底物,仍全量展示
「可以拿它直接训练底物预测模型」 标签由特征传递而来,同源导致成绩虚高 底物经家族聚类传递,与基因组成同源

FAQ

Q1:dbCAN-HGM 和 dbCAN2、dbCAN3 是同一个东西吗?
不是。dbCAN2 与 dbCAN3 是在线注释服务器,上传序列返回家族与簇预测;dbCAN-HGM 是预先算好的结果数据库,收录特定人群肠道基因组里已预测的簇。前者是工具,后者是结果集,而后者正是用前者的 CGC-Finder 算出来的。

Q2:为什么十二万个簇里只有四千多个有底物?
底物标签只能从实验验证的 PUL 传过来。全库只有六百零二个实验验证 PUL 与七百五十六个同源 PUL 带标签,它们分布在两百五十九个家族里,这些家族内的未标注簇才拿到推断底物。其余一万一千余个家族没有带标签成员,官方就不给底物。

Q3:没有底物标签的簇是不是没用?
不是。它们仍带完整的基因组成、taxonomy、地理分布与覆盖度,可用于探索未知糖利用能力。同家族成员基因组成高度相似,本身就提示作用于同类底物,只是缺实验证据。官方把这类家族单列,正是给做酶学的人挑靶子。

Q4:它能直接当训练集训练底物预测模型吗?
要非常小心。带标签的只有四千余个簇,且标签是从家族相似度传来的,与特征同源,直接训练会得到虚高的交叉验证成绩。合理做法是把带标签 PUL 当金标准、未标注簇当无标签数据,做半监督学习,并另设独立验证。

Q5:论文里的 CAZyme 总数和网站对不上,信哪个?
两个口径都存在。论文正文写四十四万七千余个,网站统计面板写四十一万四千余个,差额约三万两千个,官方未说明构成。面板里「簇内 CAZyme 占比 50.7%」以较小的数为分母。引用时注明用的是哪个口径即可。

Q6:数据可以商用吗?
需确认。论文以 CC BY-NC 4.0 开放,禁止商业性使用;网站本身没有单独的数据许可声明,只写「所有数据可免费获取」。做商业产品前应直接联系作者取得书面许可。

Q7:家族是怎么聚出来的?为什么不用序列相似度?
用蛋白家族标签集合的 Jaccard 相似度,去掉低于 0.5 的对,再用 MCL 聚类。不用序列相似度是因为跨门跨纲的同类功能在序列上可能毫无相似性,而"用了哪些零件"这个层面反而稳定。

Q8:一个家族里有多个底物标签怎么办?
保留多标签,不要强行取第一个。官方单独统计了二十一个多底物家族,并说明这是化学结构相近的底物共用酶系统的真实反映,例如果胶与阿拉伯半乳聚糖。

Q9:覆盖度曲线怎么读?
看形状不看绝对值。连续、均匀的覆盖提示该簇在此样本中真实存在;断续、只在两端高的覆盖往往是比对假象或重复序列。跨条件比较时,先确认曲线形状可比,再谈倍数变化。

Q10:能把它和 UHGG 联用吗?
能,但要自己做映射。它重做了代表集,编号与 UHGG 不一一对应,官方没提供对照表。做法是用基因组比对(如 FastANI)建立物种级对应,再按物种传递。

Q11:更新频率如何,会不会突然消失?
官方承诺每年更新。它挂在大学服务器上,由 NIH 资助,短期稳定性尚可,但没有像 PhysioNet 那样的长期托管承诺。做长期项目时建议把用到的序列与注释一并归档。

Q12:和 dbCAN-seq 该怎么选?
要跨生态环境比较(肠道对土壤对海洋)用 dbCAN-seq;只在人体肠道内部做人群、饮食、疾病分析用 dbCAN-HGM。后者多出家族层、读数比对与结构注释,前者覆盖面更宽。

术语表

术语 含义
CAZyme 碳水化合物活性酶,降解或修饰糖类的酶的总称
CAZy 碳水化合物活性酶数据库,家族编号体系的权威来源
GH / GT / PL / CE / AA / CBM CAZy 的六个大类:糖苷水解酶、糖基转移酶、多糖裂合酶、碳水化合物酯酶、辅助活性酶、碳水化合物结合模块
CGC CAZyme 基因簇,物理相邻、含至少一个 CAZyme 与一个转运蛋白的基因群
PUL 多糖利用位点,经实验验证、底物已知的基因簇
iPUL 推断 PUL,通过序列同源比对从已验证 PUL 推出来的簇
CGC-F 基因簇家族,按基因组成相似度聚成的簇集合
MAG 宏基因组组装基因组,从环境读数拼装出的基因组
srMAG 物种级代表基因组,按 95% ANI 聚类后每种的三个代表
ANI 平均核苷酸一致性,衡量两个基因组相似度的指标
CheckM 完整度 / 污染度 评估 MAG 质量的两个指标,完整度越高、污染越低越好
Jaccard 指数 两个集合交集除以并集,这里用于衡量基因组成相似度
MCL 马尔可夫聚类算法,通过随机游走切图,无需预设簇数
dbCAN3 该组的在线注释服务器,提供 CAZyme 注释与簇预测
CGC-Finder dbCAN3 中的基因簇预测组件
GTDB-Tk 基于 GTDB 数据库的基因组 taxonomy 注释工具
dRep 基因组去冗余工具,本库用于 95% ANI 聚类
Spacedust 序列比对工具,本库用于把 PUL 比对回代表基因组
Foldseek 蛋白结构比对工具,本库用于未注释蛋白的结构同源搜索
AlphaFold 蛋白结构预测系统,本库用它预测未注释蛋白结构
pLDDT AlphaFold 的残基级置信度,0–100,越高越可信
TM-score 结构相似度指标,0–1,高于 0.5 通常视为同折叠
AFDB AlphaFold 蛋白结构数据库,收录 UniProt 全集的预测结构
CAZyme3D CAZy 全部蛋白的 AlphaFold 预测结构集合
DAG 差异丰度基因,在两种条件间丰度显著不同的基因
log2FC log2 倍数变化,衡量差异幅度的常用指标
FDR 错误发现率,多重检验校正后的显著性
CC BY-NC 4.0 知识共享署名—非商业性使用许可

附录 A:核心数字核对表

项 值 来源 来源层级
基因簇数 121,883 统计面板;论文摘要 官方页面
代表基因组数 6,031 统计面板;论文表 1 官方页面
非冗余基因组数 13,886 统计面板;论文表 1 官方页面
原始 MAG 数 15,084 帮助页表格;论文表 1 官方页面
队列数 10 帮助页表格 官方页面
CAZyme 总数(网站口径) 414,379 统计面板 官方页面
CAZyme 总数(论文口径) 447,138 论文结果段 论文全文
簇内 CAZyme 数 210,038 统计面板 官方页面
实验验证 PUL 602 统计面板;论文 官方页面
同源 PUL 756 统计面板;论文 官方页面
基因簇家族数 11,314 统计面板;论文 官方页面
单底物家族 238 统计面板 官方页面
多底物家族 21 统计面板 官方页面
无底物家族 11,055 统计面板 官方页面
有底物的簇 4,640 统计面板 官方页面
底物覆盖率 3.9%(占全部簇)/ 7.9%(占已归簇) 统计面板 官方页面
未注释蛋白数 42,002 统计面板;论文 官方页面
pLDDT 高于 90 的比例 28.1% 论文结果段 论文全文
结构同源命中率(TM>0.8,对 CAZyme3D) 12.7% 论文;统计面板 官方页面
差异丰度条件数 9(3 研究 × 3 条件) 统计面板 官方页面
每条件样本数 10 统计面板 官方页面
家族汇总表体积 2,570.06 KB 下载页 官方页面
结构包体积 1,486,368.20 KB 下载页 官方页面
论文卷期页 54(D1): D555–D563 期刊页 论文全文
DOI 10.1093/nar/gkaf1185 期刊页 论文全文
PMID 41263098 PubMed 论文全文
许可 CC BY-NC 4.0 论文版权声明 论文全文

附录 B:数字的来源分层

第一层:官方站点。 基因簇数、代表基因组数、非冗余与原始基因组数、十个队列的逐行明细、家族数及其三类拆分、有底物的簇数、大陆分布表、未注释蛋白总数与结构比对命中率、九种条件的样本数、下载项体积。这些来自首页、统计面板、帮助页、下载页与关于页,2026 年 10 月 28 日直接访问取得。

第二层:论文全文。 质量门槛(完整度九成、污染百分之五)、去冗余一致性与聚类工具版本、簇预测判据、家族聚类的 Jaccard 阈值与 MCL 参数、十折交叉验证的结论、差异丰度的统计方法、pLDDT 分布、CAZyme 总数的论文口径、机架配置、资助编号、年度更新承诺、许可以及可用性声明。这些来自 PMC 全文 XML。

第三层:未核实。 cgc_family.tsv 的实际行数与列名、各家族的具体成员规模、结构包解压后的真实体积、每个簇页面渲染出的完整字段集、差异丰度表的实际行数。这些需要逐个下载或逐页访问才能确定,正文中凡涉及处均标注为示意或给出了现场核对的方法。

附录 C:完整参考文献

编号 文献 链接 用途
1 Yan 等,dbCAN-HGM,NAR 2026 https://doi.org/10.1093/nar/gkaf1185 全部方法与规模数据的原始出处
2 dbCAN-HGM 官方站点 https://pro.unl.edu/dbCAN_HGM 统计面板、下载页、帮助页
3 论文 PMC 全文 https://www.ncbi.nlm.nih.gov/pmc/articles/PMC12807701/ 方法细节与可用性声明
4 建库代码 https://github.com/azureycy/dbCAN-HGM 流程复现
5 代码归档 https://doi.org/10.6084/m9.figshare.30365827.v1 版本固定引用
6 dbCAN3 https://doi.org/10.1093/nar/gkad328 簇预测引擎
7 dbCAN-seq 更新版 https://doi.org/10.1093/nar/gkac1068 同族资源的对比
8 dbCAN-PUL https://doi.org/10.1093/nar/gkaa742 底物标签来源
9 CAZy 数据库 https://www.cazy.org 家族编号体系
10 UHGG https://doi.org/10.1038/s41587-020-0603-3 上游队列之一
11 H3Africa 二期 https://doi.org/10.1038/s41586-024-08485-8 上游队列之一
12 Hadza 队列 https://doi.org/10.1016/j.cell.2023.05.046 上游队列之一
13 CGMR https://doi.org/10.1016/j.xgen.2024.100559 上游队列之一
14 素食饮食干预研究 https://doi.org/10.1016/j.chom.2019.01.004 读数比对来源之一
15 饮食干预研究(Huang 2024) https://doi.org/10.1016/j.celrep.2024.115067 读数比对来源之一
16 IBDMDB https://ibdmdb.org 疾病条件读数来源

附录 D:任务代码

任务一:复算底物覆盖漏斗

import pandas as pd

fam = pd.read_csv("cgc_family.tsv", sep="\t", low_memory=False)

#-- 家族层面的三类拆分
by_fam = fam.drop_duplicates("family_id")
has_sub = by_fam["substrate"].fillna("").str.strip() != ""
print("家族总数", len(by_fam))
print("有底物家族", has_sub.sum())
print("无底物家族", (~has_sub).sum())

#-- 簇层面的覆盖率,两个分母都算一遍
total_cgc = fam[fam["member_type"] == "CGC"]["member_id"].nunique()
in_fam = fam[fam["member_type"] == "CGC"].dropna(subset=["substrate"])["member_id"].nunique()
print("全部簇", total_cgc)
print("有底物的簇", in_fam)
print("占全部", round(in_fam / total_cgc * 100, 1), "%")
print("占已归簇", round(in_fam / total_cgc * 100, 1), "%")

最后一行如果两个比例相同,说明这张表里所有簇都已归入家族,与官方 7.9% / 3.9% 的双口径不符,需要检查 member_type 的取值是否还有遗漏类别。这类对不上的地方,往往能暴露出对表结构的误解。

任务二:按结构证据筛靶标

import pandas as pd

#-- 未注释蛋白表:字段按站点导出为准,这里用示意列名
prot = pd.read_csv("null_proteins.tsv", sep="\t")

#-- 三重筛选:结构置信、结构同源、命中对象是已知 CAZyme
cand = prot[
    (prot["avg_plddt"] > 90)
    & (prot["best_alntmscore"] > 0.8)
    & (prot["best_db"] == "CAZyme3D-Whole")
].copy()

print("候选数", len(cand))
cand = cand.sort_values("best_alntmscore", ascending=False)
print(cand[["prot_id", "cgc_id", "avg_plddt", "best_alntmscore"]].head(20))

#-- 只保留落在有底物家族里的候选,成功率最高
fam = pd.read_csv("cgc_family.tsv", sep="\t", low_memory=False)
labeled = set(fam.dropna(subset=["substrate"])["member_id"])
cand["has_substrate"] = cand["cgc_id"].isin(labeled)
print("落在带底物家族里的候选", int(cand["has_substrate"].sum()))

第二段的顺序很重要:先按结构证据筛,再按家族标签筛,而不是反过来。反过来的话,你会先在四千余个有底物的簇里找,把大量结构证据强但底物未知的候选提前排除掉。

任务三:按家族做训练测试划分

import pandas as pd
from sklearn.model_selection import GroupKFold

fam = pd.read_csv("cgc_family.tsv", sep="\t", low_memory=False)
lab = fam.dropna(subset=["substrate"]).copy()

X = lab.drop(columns=["substrate", "family_id", "member_id"])
y = lab["substrate"]
groups = lab["family_id"]

#-- 按家族分组划分,避免同家族成员同时出现在两侧
gkf = GroupKFold(n_splits=5)
for i, (tr, te) in enumerate(gkf.split(X, y, groups)):
    print(f"折 {i}: 训练 {len(tr)} / 测试 {len(te)}")

这段的关键是 groups=fam["family_id"]。按簇随机划分会让同家族的相似成员分到两侧,得到的成绩不能反映对新家族的泛化能力。

附录 E:如果只记五件事

序号 记住什么 为什么
1 它是数据库不是工具,一级对象是基因簇 拿它注释自己的序列会找不到入口
2 十二万个簇里只有四千余个有推断底物 这条决定了它能做假设生成、不能做标注数据集
3 底物经家族传递而来,不是实验测定 引用时必须写明是推断值
4 基因组只收高质量 MAG,南美几乎没有 任何"全球"结论都要先看大洲分布
5 读数比对来自三项研究、每条件十个样本 差异丰度只够提示方向,不够支撑结论

编辑说明

本文核验时间为 2026 年 10 月 28 日。核对方式为直接访问 dbCAN-HGM 的首页、统计面板、帮助页、关于页、下载页,逐项抄录规模与结构字段;论文侧经 Europe PMC 取得 PMC12807701 全文 XML,方法、结果、可用性声明、版权声明逐段核对。核验中发现两处官方口径不一致:CAZyme 总数在论文正文为四十四万七千余个、在统计面板为四十一万四千余个,差额约三万两千个,官方未说明构成;单底物家族数在面板的一处标为二百三十九、另一处标为二百三十八,以二百三十八与家族总数自洽,故本文采用后者,并在正文中只写自洽的那个。未覆盖的内容包括:家族汇总表的实际行数与列名、各家族的具体成员规模、结构包解压后的真实体积、差异丰度表的实际行数,以及站点是否有隐藏的版本号字段。这些需要下载全量文件或逐页访问才能确定,正文涉及处均已标注为示意或给出核对方法。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • varsite — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
  • eggnog — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
  • vdjdb — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
  • bv-brc — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释
  • imgt — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
  • metatraits — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释
  • jpostdb — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
  • uhgg — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释
  • silva — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释
  • greengenes2 — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集