信息速览
人类肠道微生物组研究的每一个结论,最终都要落回「这是哪个物种、这是哪个基因」这两个坐标。而这两个坐标最初并不存在:相当比例的肠道细菌至今没有纯培养的代表株,只能靠把宏基因组测序读长重新拼装成基因组片段(MAG),才能得到一个近似的基因组。各个实验室各拼各的,同一个物种在不同论文里被起了不同的临时编号,跨研究比较就成了一件要重做一遍的苦活。
UHGG(Unified Human Gastrointestinal Genome,统一人类胃肠道基因组集)就是为这件事建的。它由 EMBL-EBI 的 MGnify 团队与 Wellcome Sanger Institute 合作,把全球公开项目中拼出来的肠道原核基因组集中起来,去冗余、按物种聚簇、给每个簇挑一个代表、配谱系、再逐层注释,最后把全部编码序列汇总成一份蛋白目录 UHGP。它不是样本表,也不是丰度矩阵,而是一套可以拿来当参考的基因组坐标系。
它最容易被误会的地方,也正在这里:一份「几十万个基因组」的目录,看上去像样本库,实际是参考库;看上去像物种清单,实际是物种簇清单;看上去给了完整度数字,实际那个数字是给筛选用的门槛说明,不是质量承诺。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Unified Human Gastrointestinal Genome collection(UHGG);配套蛋白目录 Unified Human Gastrointestinal Protein(UHGP) |
| 中文名 | 统一人类胃肠道基因组集;统一人类胃肠道蛋白目录 |
| 维护机构 | EMBL-EBI MGnify 团队;合作方 Wellcome Sanger Institute 寄生虫与微生物组研究组 |
| 首版论文 | Almeida A. 等,Nature Biotechnology 2021,39:105–114;DOI 10.1038/s41587-020-0603-3 |
| 论文标题 | 首版论文原题,标题开头即点出首版的确切基因组数 |
| 首版规模 | 204,938 个非冗余基因组;4,644 个物种;蛋白目录逾一亿七千万条序列 |
| 当前版本 | v3.0,FTP 元数据表最后修改于 2026-09-30 |
| 当前版本规模 | 二十八万六千余个基因组;六千余个物种级簇;来自 2,327 项研究 |
| 一级对象 | 基因组(一个 MGYG 编号对应一个 MAG 或一个分离株) |
| 物种层级 | 以 Species_rep 指向的物种代表基因组为单位,官方称「物种级簇」 |
| 地理覆盖 | 官方称 41 个以上国家与地区;元数据表按国家与大洲两列记录 |
| 质量字段 | 完整度、污染度、长度、contig 数、N50、GC 含量、rRNA 完整度、tRNA 数 |
| 蛋白目录 | 按 100%、95%、90%、50% 氨基酸同一性四级聚类 |
| 下载方式 | FTP 目录逐文件下载;MGnify REST API 分页查询与逐基因组下载清单 |
| 许可 | MGnify 基因组目录通行声明:数据无使用限制;下游注释受各上游库条款约束 |
| 与 UHGG 同源的其他目录 | 口腔、皮肤、阴道、牛瘤胃、猪肠、鸡肠等,结构一致,编号体系一致 |
| 更新节奏 | 不定期大版本,v1.0 → v2.0 → v2.0.1 → v2.0.2 → v3.0 |
§1 它要解决的具体麻烦
1.1 同一个物种在十篇论文里有十个名字
宏基因组组装出的基因组,天然带有「临时身份证」的问题。一个实验室从自己的 300 份粪便样本里拼出一批高质量基因组,按自己的聚类阈值划成若干物种,起一批内部编号;另一个实验室从另一批样本里拼出结构相近的基因组,按另一套阈值划分,起了另一批编号。两边都没错,但两边对不上。想把两批数据的差异丰度结果合并,第一件事就得手工做一次「这个编号等于那个编号」的对照,而对不上的部分只能各自保留。
UHGG 的出发点就是把这个对照表一次性做掉。它把全球公开项目里的肠道基因组全部收进来,统一去冗余,统一聚簇,统一赋谱系,然后给每个物种簇一个稳定的代表基因组和一套 MGYG 开头的新编号。此后不管你的菌来自哪个国家的哪个队列,只要落进同一个物种簇,就有一个共同的参照物。
这件事的价值不在「数据更多」,而在「编号可以互通」。CAMI 之类的评测任务用的是模拟数据,模拟时用的参考基因组集必须与真实分析时用的同一套;菌株水平的差异分析要判断两个基因组是不是同一个种,也需要一个共同的分界口径。UHGG 提供的就是这个共同口径,而且这个口径是公开的、可复现的、有版本号的。
1.2 三条常见的错误期待
第一条:把它当成一个更大的丰度库。 这是从「肠道微生物组」这个类目名带来的最普遍误判。丰度类资源每行是一个样本与一个物种的组合,值是该物种的读数占比;UHGG 每行是一个基因组,没有任何样本维度。打开元数据表你会看到 Sample_accession 和 Study_accession 两列,很容易误以为这就是样本信息,其实它们只是记录「这个基因组是从哪个样本拼出来的」,一个样本可以贡献几十个基因组,一个基因组也只追溯到一个样本。用这张表算不出任何丰度。
第二条:以为 MGYG 编号就是模式菌株编号。 MGYG 是 MGnify Genomes 的内部流水编号,只保证在当前版本内唯一。它不对应任何培养物保藏号,也不保证跨版本稳定:v3.0 移除了近十万个基因组,其中一部分 MGYG 编号从此不再出现;同时有上千个物种代表被替换成了另一个更高质的基因组,编号变了,物种没变。把它写进论文的补充材料时,必须同时注明版本号。
第三条:把完整度当成交付质量。 完整度高于九成、污染低于五个百分点,是进入目录的门槛,不是质量的统一水平。目录里同样有完整度刚过五成的基因组,官方明确把这些标为中等质量。真正需要高质量基因组的场景,应当自己按完整度过滤,而不是默认全库可以直接用。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 给宏基因组读长一个稳定的物种参照 | 六万余个物种级簇的代表基因组与谱系 | 够,是目前肠道域密度最高的参考集之一 |
| 把新拼出的 MAG 归进已知物种 | Mash 距离、平均核苷酸一致性、GTDB 谱系 | 够,但需自己跑聚类工具 |
| 找某个物种的全套功能基因 | 代表基因组下的 GFF、eggNOG、InterProScan、KEGG、CAZy、COG | 够,非代表基因组只有基础注释 |
| 做跨队列的差异丰度分析 | 什么都没有,没有丰度列 | 不够,需改用带丰度表的资源 |
| 判断某菌是不是新种 | 谱系末段标了 sp 加数字的新种名 | 部分够,新种判定要自己做 ANI 与 GTDB 比对 |
| 拿到原始测序读长 | 只给组装结果,不给 fastq | 不够,需按 Sample_accession 回 ENA 取原始数据 |
| 研究菌株水平的功能差异 | 同种基因组的集合与泛基因组 | 够,物种代表目录下的 pan-genome 子目录提供 |
| 训练物种分类器 | 官方打包的 Kraken 2 与 Bracken 库 | 够,可直接用或按需重建 |
| 查询某蛋白的结构 | 不给结构,只给序列与功能注释 | 不够,需另接结构预测或结构库 |
| 定量每一株在某样本中的占比 | 没有株水平丰度 | 不够,目录本身不承担这个功能 |
| 判断某个基因是否存在于某一国家人群 | 不给人群分层结论 | 不够,需自己做比对与汇总 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 手上有一批新测的粪便宏基因组,只想标出物种构成 | 提供一套与 GTDB 谱系对齐的参考基因组,可直接建索引做定量 | 先决定用官方 Kraken 2 库还是自己按代表基因组重建索引 |
| 从自己的队列里拼出了两千个 MAG,想放进公共参照系 | 提供统一的物种簇与代表基因组,可作聚类基准 | 用 Mash 先粗筛,再用平均核苷酸一致性与本目录的代表基因组对齐 |
| 要做某条代谢通路的跨研究比较,发现每篇论文菌名不一致 | 把不同来源的基因组归到同一物种簇,提供可比的编号 | 把你的物种名映射到 MGYG,检查映射是否一对多 |
| 想找一个能产某种酶的肠道菌作为实验起点 | 提供全库蛋白序列与注释,可按功能域检索 | 按 InterPro 或 eggNOG 的域检索,再回到基因组看操纵子上下文 |
| 在建临床菌群分类流程,需要一份长期可引用的参考 | 提供有版本号、有 README、有变更记录的目录 | 把版本号写进流程配置,并监控新版本发布 |
| 想找某一地区人群特有的菌株多样性 | 提供按国家与大洲列出的来源信息 | 按国家列筛选子集,再自行统计,不要把它当人群代表样本 |
| 需要一个能直接训进模型的物种嵌入 | 提供谱系与代表基因组序列 | 自己用序列或泛基因组构造嵌入,目录不提供向量 |
1.5 一句话判断
如果你的问题是「这个序列属于哪一类菌」,它几乎是目前最好的肠道参照系;如果你的问题是「这类菌在人群中多不多」,它一点也帮不上,那属于丰度表的活。
1.6 不适合谁:四条边界
不适合做人群流行病学描述。 目录里每个国家分到的基因组数,取决于该国有多少公开测序项目、每个项目产出多大规模,而不是该国人群的肠道菌多样性。用国家列直接统计「某国肠道菌多样性最高」,得到的其实是「某国公共数据最多」。这不是数据缺陷,而是目录的建库目标本来就不包含抽样代表性。
不适合做纵向追踪或个体内变化分析。 目录在去冗余阶段就刻意保留了「每个物种、每个样本至多一个基因组」的约束,个体内的时间变化信息在这里已经被当作冗余处理掉了。要做纵向分析,必须回到 ENA 的原始样本层。
不适合做基因表达或活性推断。 它给的是基因组的编码潜力,即「带着什么基因」,而不是「这个基因此刻转录了多少」。宏转录组、宏蛋白组、代谢组的数据都不在这里,需要另找来源。
不适合直接当成临床微生物鉴定工具。 目录主要覆盖肠道,虽然包含少量致病相关类群,但既没有临床分离株的药敏信息,也没有按临床微生物学标准做的鉴定验证。把它用于诊断级判断,会缺少必要的质控链条。
§2 数据构成与规格
2.1 目录的文件骨架
UHGG 的交付形态是一个标准的 FTP 目录树,而不是一个数据库服务。以 v3.0 为例,根目录下是版本说明、变更记录、元数据总表、几个大类文件夹,以及一张 Mash 草图。理解这套结构,比记住任何一个数字都重要,因为日常使用时你其实只会在其中三四个位置来回进出。
| 层级 | 名称 | 内容 | 你什么时候会用它 |
|---|---|---|---|
| 根 | README_v3.0.txt | 版本规模、文件清单、相对上一版的变更说明 | 第一次上手、要对齐版本口径时 |
| 根 | genomes-all_metadata.tsv | 每个基因组的组装统计、质量、谱系、来源 | 筛选子集、建索引清单 |
| 根 | study_list.txt | 全部来源研究的项目编号 | 追溯某个基因组的出处 |
| 根 | added_genomes.tsv / removed_genomes.tsv | 相对上一版的新增与移除清单及原因 | 跨版本对齐、排查编号消失 |
| 根 | removed_species.tsv / replaced_species_reps.tsv | 被移除的物种、被替换的物种代表 | 检查旧引用是否仍然有效 |
| 根 | known_issues.txt | 已知问题与误收录的基因组 | 引用前的必读项 |
| 根 | all_genomes.msh | 全部基因组的 Mash 草图 | 一次性做相似度粗筛 |
| 根 | species_catalogue/ | 按物种簇组织的代表基因组与泛基因组 | 取单个物种的全套注释 |
| 根 | all_genomes/ | 全部基因组的 Prokka 输出 | 取非代表基因组的注释 |
| 根 | protein_catalogue/ | 四级同一性聚类的蛋白目录 | 做功能检索与去冗余 |
| 根 | gene_catalogue/ | 与蛋白簇代表对应的核酸序列 | 做核酸层面的检索或建索引 |
| 根 | phylogenies/ | 细菌与古菌的两棵系统树及 iTOL 图层 | 画树、看谱系结构 |
| 根 | kraken2_db_human-gut_v3.0/ | 预建的 Kraken 2 与 Bracken 库 | 直接做物种注释 |
这个结构有一个容易忽略的性质:species_catalogue/ 与 all_genomes/ 是两套并存的入口。前者按物种组织,只放代表基因组与泛基因组,注释最全;后者按基因组编号组织,放全部基因组,注释是流水线的基础版。同一个基因组在两处都出现,但深度不同。想拿「全库所有基因组的注释」,走 all_genomes;想拿「某个物种注释最全的一份」,走 species_catalogue。
2.2 元数据表的字段字典
genomes-all_metadata.tsv 是唯一一张横向打通所有基因组的表,二十列,制表符分隔。它的字段少而精,没有冗余,也没有嵌套。下面逐列说明,并标注每个字段在实务中的实际作用与坑。
| 字段 | 含义 | 类型 | 实务作用 | 坑 |
|---|---|---|---|---|
| Genome | MGYG 编号 | 字符 | 主键,全库唯一 | 只在本版本内唯一,跨版本可能消失 |
| Genome_type | 基因组来源类型 | 枚举 | 区分 MAG 与分离株 | 只有两类,不含「培养物」等细分类 |
| Length | 组装总长度 | 整数 | 判断是否接近完整基因组 | 不等于真实基因组大小 |
| N_contigs | contig 条数 | 整数 | 判断组装连续性 | 与完整度不直接对应 |
| N50 | contig 长度加权中位数 | 整数 | 判断组装连续性 | 高 N50 也可能是低完整度 |
| GC_content | GC 含量百分比 | 浮点 | 物种层面的粗略指纹 | 用于物种判定不可靠 |
| Completeness | 完整度百分比 | 浮点 | 质量筛选用 | 是单一标记基因集的估计值 |
| Contamination | 污染度百分比 | 浮点 | 质量筛选用 | 低污染不等于无嵌合 |
| rRNA_5S | 5S rRNA 完整度 | 浮点 | 判断 rRNA 操纵子完整度 | 大量 MAG 此处为 0 |
| rRNA_16S | 16S rRNA 完整度 | 浮点 | 判断能否做 16S 分析 | 为 0 时无法做 16S 层面比对 |
| rRNA_23S | 23S rRNA 完整度 | 浮点 | 判断 rRNA 操纵子完整度 | 同上 |
| tRNAs | tRNA 条数 | 整数 | 判断组装完整度 | 少数分离株异常偏少 |
| Genome_accession | ENA 组装编号 | 字符 | 回溯原始组装记录 | MAG 常见为空 |
| Species_rep | 所属物种代表 | 字符 | 归并到物种层级 | 代表基因组自身此列等于本行 Genome |
| Lineage | GTDB 谱系 | 字符串 | 门纲目科属种的完整路径 | 末段多带 sp 加数字的新种名 |
| Sample_accession | 来源样本编号 | 字符 | 回溯生物样本记录 | 只记录「从哪拼出来」,不是丰度单位 |
| Study_accession | 来源研究编号 | 字符 | 回溯项目 | 一个研究贡献的基因组数差异极大 |
| Country | 来源国家 | 字符串 | 地理来源 | 有「未提供」这一取值 |
| Continent | 来源大洲 | 字符串 | 地理聚合 | 有「未提供」这一取值 |
| FTP_download | 逐基因组下载路径 | URL | 直接取 GFF | 指向 all_genomes 下的 gff.gz,不含全部注释 |
这张表的设计取向很清楚:它服务的是「找到基因组、判断质量、知道出处」,而不是「描述样本」。任何希望从这张表直接得出生物学结论的使用方式,都会撞上它刻意省略的维度。
2.3 一条记录的完整解剖
拿一条真实的记录逐步读一遍,比抽象描述有效。下表是一条物种代表基因组的元数据与它对应的物种级 JSON 摘要的对照。JSON 文件位于 species_catalogue/<前七位>/<MGYG 编号>/<MGYG 编号>.json,是同一份信息在网页端的展开形态。
| 字段 | 元数据表取值 | 物种 JSON 取值 | 说明 |
|---|---|---|---|
| 编号 | MGYG000000100 | MGYG000000100 | 两处一致 |
| 来源类型 | Isolate | Isolate | 分离株而非 MAG |
| 长度 | 2,685,359 bp | 2685359 | 约两兆七兆碱基对量级 |
| contig 数 | 16 | 16 | 组装较连续 |
| N50 | 396,778 bp | 396778 | 单 contig 中位数近四十万碱基对 |
| GC 含量 | 35.27% | 35.27 | 低 GC,符合厚壁菌门的常见区间 |
| 完整度 | 99.47% | 99.47 | 接近完整 |
| 污染度 | 0.35% | 0.35 | 很低 |
| 16S 完整度 | 99.74% | 99.74 | 可直接用于 16S 比对 |
| 谱系 | d__Bacteria;p__Bacillota;c__Negativicutes;o__ICN-92133;f__ICN-92133;g__Selenobaculum;s__Selenobaculum gibii | 同左 | 目与科都是 GTDB 的占位编号 |
| 来源样本 | ERS2046508 | ERS2046508 | 欧洲核苷酸档案样本号 |
| 来源研究 | ERP105624 | ERP105624 | 该项目贡献了众多种内基因组 |
| 国家 | 未在元数据表完整给出 | North America(JSON 的 geographic_origin) | 两处口径不完全相同 |
| 蛋白数 | 未在表内 | 2542 | 只在 JSON 中给出 |
| eggNOG 覆盖 | 未在表内 | 90.4% | 只在 JSON 中给出 |
| InterPro 覆盖 | 未在表内 | 83.56% | 只在 JSON 中给出 |
| ncRNA 数 | 未在表内 | 48 | 只在 JSON 中给出 |
这里已经能看到一个实务要点:元数据表与物种 JSON 的字段集合并不相同。前者偏组装与溯源,后者多出蛋白数、注释覆盖率、ncRNA 数这些与功能解读直接相关的量。做功能层面的筛选时,只靠元数据表会缺料。这条记录后来在 §4.3 的案例里被完整解读了一遍,包括它与组装质量、谱系命名、注释覆盖之间的三层关系;如果你只想先看一个样本,可以跳到那里。
取一个基因组的注释,最短的路径是三条命令:读元数据、按物种代表定位、取该物种代表目录下的文件。
#-- 取 v3.0 元数据表
curl -O https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0/genomes-all_metadata.tsv
#-- 只看分离株、完整度高于 95、污染低于 2 的行,打印前 5 行
awk -F'\t' 'NR==1 || ($2=="Isolate" && $7>95 && $8<2)' genomes-all_metadata.tsv | head -6
#-- 取某个物种代表基因组的蛋白序列与 GFF
curl -O https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0/species_catalogue/MGYG0000001/MGYG000000100/genome/MGYG000000100.faa.gz
curl -O https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0/species_catalogue/MGYG0000001/MGYG000000100/genome/MGYG000000100.gff.gz
2.4 版本之间的结构差异
UHGG 到目前为止走过五代版本,每一代不只是数字变大,结构也在变。下表的对照有助于判断一篇旧论文的数字属于哪一代。
| 版本 | 基因组总数 | 物种代表数 | 聚类工具 | 泛基因组工具 | 显著变化 |
|---|---|---|---|---|---|
| v1.0 | 286,997 | 4,644 | 自建流程 | Roary | 首版,随 2021 年论文发布 |
| v2.0 | 289,232 | 4,744 | 自建流程 | Panaroo | 扩充物种,更新谱系参考 |
| v2.0.1 | 同上 | 同上 | 同上 | 同上 | 修正 Kraken 库的未知物种归并 |
| v2.0.2 | 同上 | 同上 | 同上 | 同上 | 修正元数据表的四项组装统计错误 |
| v3.0 | 二十八万六千余 | 六千四百余 | 流水线 v4.0.0 | Panaroo | 移除近十万个冗余与质控不合格基因组,新增近十万个 |
这组数字里最反直觉的一点是:v3.0 的基因组总数比 v1.0 还少。原因写在版本说明里——v3.0 在入目录前做了更严格的去冗余,把「同一源样本、同一物种」的重复基因组清掉了六万八千余个,另有近两万两千个未通过质控,七千余个来源样本不明。与此同时新增了近十万个 MAG 与数百个分离株。两种力量方向相反,净结果是总数略降,而物种数涨了将近四成。
2.5 与同类资源的字段差异
同为肠道微生物组资源,UHGG 的字段集与丰度类、整合类资源差异明显。下表选了四个最常被拿来对照的资源做横向比较,重点看「一级对象」这一行,它决定了一份数据能做什么、不能做什么。
| 资源 | 一级对象 | 是否含丰度 | 是否含原始读长 | 物种划分依据 | 主要用途 |
|---|---|---|---|---|---|
| UHGG | 基因组 | 无 | 无 | 平均核苷酸一致性聚类 | 参考基因组与物种注释 |
| UHGP | 蛋白簇 | 无 | 无 | 四级氨基酸同一性 | 功能检索与去冗余 |
| curatedMetagenomicData | 样本 | 有,统一重算 | 无 | MetaPhlAn 标记基因 | 跨研究丰度比较 |
| American Gut Project | 样本 | 有,16S 计数 | 有 | 16S 扩增子序列变体 | 公民科学、队列分析 |
| MGnify 分析结果 | 分析任务 | 有,逐任务 | 有 | 流水线自动赋值 | 单项目解读 |
| dbCAN-HGM | 基因簇 | 有,条件覆盖度 | 无 | 基因组成相似度 | 糖代谢功能研究 |
可以看到,UHGG 与 UHGP 是这一排里唯一不含丰度的两行,也是唯一以「基因组 / 蛋白簇」为一级对象的两行。这个差异不是精度问题,而是层级问题:它们在丰度分析的上游,是别人做丰度时用的尺子,而不是被量的对象。
§3 它是什么:一套有版本的参考坐标系
3.1 三层对象
UHGG 的语义结构可以拆成三层,由细到粗:基因组、物种簇、谱系域。三层各有自己的编号或名称,混用会产生大量误解。
最细一层是基因组。每个基因组有唯一 MGYG 编号、一个来源类型(MAG 或分离株)、一份组装统计、一份质量评估、一个来源样本与一个来源研究。这是唯一可以下载到具体序列的层级,all_genomes/ 下的目录就是以它为单位。
中间一层是物种簇。官方在版本说明里用的是「species-level cluster」这个说法,含义是把平均核苷酸一致性足够高的基因组归作同一物种。每个簇选一个代表基因组,其余成员通过 Species_rep 列指回它。这一层的编号其实就是代表基因组的 MGYG 编号,没有独立的一套。
最粗一层是谱系。谱系来自 GTDB,形如 d__Bacteria;p__Bacillota;c__Negativicutes;o__ICN-92133;f__ICN-92133;g__Selenobaculum;s__Selenobaculum gibii,七段分别对应域、门、纲、目、科、属、种。末段经常是一个带 sp 加数字的名字,这是 GTDB 给尚未正式命名的物种分配的工作名,说明这个物种在正式分类学里没有合法名称。
3.2 SGB 与 SLC:一名称谓的澄清
「SGB」这个缩写在宏基因组文献里用得极广,但严格来说它是另一套体系的术语。SGB 指 species-level genome bin,最初由 Pasolli 等的整合研究提出,指的是一组基因组在平均核苷酸一致性上高于某个阈值的集合。UHGG 官方在自己的文档里更常用「species-level cluster」或「物种代表基因组」这两个说法,并明确说谱系用 GTDB 赋。
两者在实际含义上高度重合,都指「基因组层面的物种单位」,都不等同于培养学意义上的种。差别在执行细节:阈值、代表选取方式、版本更新时如何稳定旧编号。所以引述时可以说 UHGG 的物种簇在实践上就是 SGB,但不宜写成「UHGG 提出了 SGB 概念」,那会把归属搞错。
3.3 内部编号与外部编号的对照
一条基因组记录会牵扯到至少五套编号,梳理清楚能省掉大量检索时间。下表把它们逐一对齐。
| 编号体系 | 示例形态 | 归属机构 | 何时会用到 |
|---|---|---|---|
| MGYG | MGYG000000100 | MGnify | 目录内检索、下载路径、论文补充材料 |
| ENA 组装编号 | CABIZH02 一类 | 欧洲核苷酸档案 | 回溯原始组装、查提交记录 |
| ENA 样本编号 | ERS 或 SAMEA 开头 | 欧洲核苷酸档案 | 回溯生物样本与项目 |
| ENA 研究编号 | ERP、SRP、DRP 开头 | 欧洲核苷酸档案 | 统计来源项目、找原始读长 |
| GTDB 谱系 | d__…;p__…;s__… 七段 | GTDB 项目 | 跨库比对、与 GTDB 自身对照 |
| NCBI 编号 | GCA 或 GCF 开头 | NCBI | 与 NCBI 侧记录对照,MAG 常缺 |
实证一点说:元数据表里的 Genome_accession 列对 MAG 大量为空,只有分离株才相对齐全。想去 NCBI 找对应的记录,成功率对两类基因组差别很大。这也是目录为什么把 ENA 的样本与研究编号作为主要溯源线索的原因——它本来就是从 ENA 上游汇集出来的。
3.4 与 MGnify 平台上其他基因组目录的关系
UHGG 不是孤立存在的,它是 MGnify Genomes 这一整套目录里最老、最大的一支。同一套流水线还产出了口腔、皮肤、阴道、牛瘤胃、猪肠、鸡肠、蜜蜂肠道、小鼠肠道、土壤、海洋、海洋沉积物、植物根际等多个目录。它们的文件骨架完全相同:一样的版本说明格式、一样的元数据表列名、一样的物种目录结构、一样按四级同一性聚类的蛋白目录。
这一点在工程上很有用。写一套解析器,理论上可以同时读七八个目录;把人体各部位的目录拼起来,就有了一个跨部位的肠道外参考集。官方也正是这么做的:口腔目录与肠道目录共用 GTDB 谱系,同一个属在两个目录里能对上。若你的研究对象跨越不同部位,先确认对应部位有没有独立目录,再决定是否拼。
§4 质量分层与注释深度
4.1 门槛是门槛,不是水平
先说清一点:UHGG 没有在元数据表里放一个「质量等级」的枚举列。你在表里找不到「完整」「高质」「中等」这种字面标记,只能看到 Complete 与 Contamination 两个连续值。所谓的三级划分,是使用侧按阈值切出来的通行做法,官方在说明里承认这个划分,但交付物本身不给标签。
通行切法大致是:完整度高于九成、污染低于五个百分点算高质量;完整度在五成到九成之间算中等;低于五成一般不作为参考。官方在相关文档里提到过要把中等质量基因组纳入,是为了让低丰度类群也能有代表,代价是这些代表的质量低于整体水平。
| 层级 | 通行阈值 | 目录中的状态 | 适用场景 |
|---|---|---|---|
| 完整 | 完整度 100%、污染 0% | 少数分离株可达 | 做模式株级分析、要求无缺口 |
| 高质量 | 完整度高于九成、污染低于五个百分点 | 主体 | 建索引、功能注释、菌株比较 |
| 中等 | 完整度五成到九成 | 有一定比例 | 低丰度类群的补充代表 |
| 边缘 | 完整度低于五成 | 少量 | 仅作多样性记录,不宜做定量 |
门槛与水平的区别,在这套数据上体现得很直白:完整度是一个估计值,由一组单拷贝标记基因的检出比例推算,不同的标记集给出不同的数。两个基因组一个报 90.1%,一个报 89.9%,它们没有实质差别,但在「高于九成」这个门槛下被分到了两边。任何以门槛为分界的正式结论,都应当配一句「阈值附近结果对阈值敏感」。
4.2 注释的九个层次
一个物种代表基因组目录下的文件可以按功能分成九类。这个层次划分不是官方给的,是按注释来源与用途重新组织的,便于取舍。
| 层次 | 注释来源 | 主要输出 | 典型用途 |
|---|---|---|---|
| 序列层 | 组装本身 | fna、faa、fna.fai | 重建索引、比对、读码框 |
| 结构层 | Prokka 与 GFF 合并 | gff | 基因坐标、操纵子结构 |
| 通用功能层 | eggNOG | 直系同源群、COG、KEGG 派生 | 通路层面的粗粒度比较 |
| 结构域层 | InterProScan | Pfam 等域匹配 | 蛋白家族判定、域检索 |
| 通路层 | KEGG 派生 | 三级统计与模块完整度 | 通路是否完整、缺哪一步 |
| 碳水化合物层 | dbCAN 派生 | CAZy 汇总、多糖利用位点 | 糖代谢能力、膳食纤维研究 |
| 次级代谢层 | AntiSMASH、SanntiS、GECCO | 生物合成基因簇 | 天然产物挖掘 |
| 防御与移动层 | DefenseFinder、CRISPRCasFinder、mobilome | 抗噬菌体系统、CRISPR、病毒与移动元件 | 菌株演化、水平转移研究 |
| 临床相关层 | AMRFinderPlus、PathoFact2 | 耐药基因、致病因子 | 风险类群筛查 |
要强调的是,这套注释只对物种代表基因组做全。非代表基因组在 all_genomes/ 下只有 Prokka 输出加少量附加注释,功能层的九类并不齐备。如果你的研究对象是「同一个物种里不同菌株的功能差异」,代表基因组做不了这件事,必须回头去找同种的其它基因组,并接受它们注释较浅。
4.3 案例:一个物种簇的三层证据
下面用一条能同时展示质量、谱系、注释三层信息的记录走完一遍。这条记录在 §2.3 已列出元数据,此处把它放到注释与质量的语境里读。
第一层是质量。完整度接近满值、污染很低、contig 只有二十条以内、N50 近四十万碱基对,这是一份接近完成态的组装。特征上它不像 MAG,因为典型的 MAG 即使完整度高,也往往有上百条 contig。元数据表的 Genome_type 列也印证了这一点:它是分离株,不是拼出来的。这个区分在实务上很重要:分离株的基因组更连续,rRNA 操纵子更完整,做 16S 层面的比对更可靠;MAG 则可能整段缺 rRNA 区。
第二层是谱系。七段里,门与纲是常规名称,目与科却是 ICN-92133 这样的占位编号,属名是 Selenobaculum,种名带 gibii 这个种加词。这意味着这个属在 GTDB 里有明确归属,但这个属下的目与科还没有拿到正式名称。对使用者来说,这提示一件事:目录里的「物种」有相当一部分处在分类学的过渡地带,谱系看起来完整,实际中间几段是编号而不是名字。
第三层是注释。这一条记录的 eggNOG 覆盖率略高于九成,InterPro 覆盖率略高于八成,蛋白数两千五百余条。这两个覆盖率并不是质量指标,衡量的是「有多少蛋白能被现有数据库打到」,与基因组的完整程度是两件事。一个低质量的基因组可以有很高的注释覆盖率,因为被注释到的部分正好都是保守蛋白。
把三层叠起来看,这条记录回答的是「这个物种的一份高质量参考长什么样」。它答不了「这个物种在人群中多常见」,因为目录里根本没有这个信息。这个边界在 §4.3 的案例里体现得最清楚,所以后面 §5 与 §7 还会回到它。
4.4 跨版本的稳定性
在长期项目里,一个绕不开的问题是版本漂移。v3.0 的变更记录给出了一个量级:九个物种不再在目录里,上千个物种代表被换成了另一个基因组,其中绝大多数是因为新代表质量更高。
| 变更类型 | 数量级 | 原因 | 对使用者的影响 |
|---|---|---|---|
| 新增基因组 | 近十万 | 新项目汇入 | 旧集群需要重建索引才能用上 |
| 移除基因组 | 近十万 | 去冗余、质控、溯源不明 | 旧编号可能查不到 |
| 移除物种 | 百个以内 | 成员全部被移除 | 旧论文引用的物种可能消失 |
| 替换物种代表 | 千个左右 | 找到更高质量的基因组合 | 同一物种的 MGYG 编号变了 |
| 注释重算 | 全部 | 流水线版本升级 | 同一基因组的基因坐标可能变 |
这张表的实务含义是:任何以 MGYG 编号为主键的下游数据库,都必须把 UHGG 版本号作为联合主键的一部分,否则跨版本刷新时会出现「编号存在但含义变了」的静默错误。这不是数据缺陷,是版本化数据集天然的代价,关键在于用的人有没有把它当版本化数据对待。
§5 怎么拿到:FTP 与 API 两条路
5.1 三条下载通路的取舍
UHGG 有三条官方通路,各自适合不同的取数规模。
第一条是 FTP 直取。优点是简单、稳定、可以 wget 递归、可以在集群上跑;缺点是没有分页、没有筛选,想拿一个子集你得先下元数据表自己过滤,再按路径逐条取。适合「知道自己要哪几个基因组」的场景。
第二条是 MGnify REST API。优点是结构化、可分页、能做过滤、能直接拿到某个基因组的下载清单;缺点是有速率与分页上限,且部分字段在 API 与 FTP 之间不完全一致。适合「程序化检索、按条件筛、做网页展示」的场景。
第三条是网页端的目录浏览页。优点是能看能点,适合快速感受一下;缺点是页面由前端渲染,直接抓 HTML 拿不到数据,必须走 API。做批量取数时不要指望它。
| 通路 | 端点数 | 是否需要认证 | 是否可筛选 | 分页方式 | 适合规模 |
|---|---|---|---|---|---|
| FTP | ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/ | 否 | 否 | 无 | 任意,按需逐文件 |
| REST API | www.ebi.ac.uk/metagenomics/api/v1/ | 否 | 是 | 页码 | 中小规模程序化检索 |
| 网页浏览 | www.ebi.ac.uk/metagenomics/browse/genomes | 否 | 是 | 前端 | 人工查看 |
| 批量打包 | FTP 下的 tar.gz | 否 | 否 | 无 | 一次取全量,体积巨大 |
5.2 用 API 查目录规模
API 的目录端点会返回当前目录的文件数、版本、流水线版本与 FTP 地址。这是核对版本最快的一步。
#-- 列出全部基因组目录,只看名字、版本与最近更新时间
curl -s "https://www.ebi.ac.uk/metagenomics/api/v1/genome-catalogues?page_size=25" \
| python3 -c "import json,sys;d=json.load(sys.stdin);[print(x['id'],x['attributes']['version'],x['attributes']['last-update']) for x in d['data']]"
#-- 看某一个目录的规模与说明
curl -s "https://www.ebi.ac.uk/metagenomics/api/v1/genome-catalogues/human-gut-v2-0-2" \
| python3 -c "import json,sys;a=json.load(sys.stdin)['data']['attributes'];print(a['name'],a['genome-count'],a['unclustered-genome-count'])"
上面的第二步会输出该目录的物种代表数与未聚类的基因组总数两个量。这两个量的关系是:前者是物种簇的个数,后者是目录收录的基因组总条数。任何看到「UHGG 有多少个基因组」这类数字时,先分清它说的是哪一个。
5.3 分页取元数据
API 的基因组端点按页返回,每页的记录带完整属性,包括组装统计、质量、谱系、地理来源、蛋白数、注释覆盖率与泛基因组统计。写一个循环把全量拉到本地,是很多人做的第一件事。合理的做法是先只取需要的字段,再决定要不要拉全。
import json, urllib.request
BASE = "https://www.ebi.ac.uk/metagenomics/api/v1/genome-catalogues/human-gut-v2-0-2/genomes"
def fetch(page, size=100):
url = f"{BASE}?page={page}&page_size={size}"
with urllib.request.urlopen(url, timeout=60) as r:
return json.load(r)
first = fetch(1)
total_pages = first["meta"]["pagination"]["pages"]
print("物种代表总数", first["meta"]["pagination"]["count"], "页数", total_pages)
rows = []
for p in range(1, total_pages + 1):
d = fetch(p)
for g in d["data"]:
a = g["attributes"]
rows.append({
"id": a["accession"],
"type": a["type"],
"completeness": a["completeness"],
"contamination": a["contamination"],
"lineage": a["taxon-lineage"],
"proteins": a["num-proteins"],
"continent": a["geographic-origin"],
})
print("取到", len(rows), "条")
需要注意的是,这个端点返回的是「物种代表基因组」这一层,不是全部基因组。要拿全量,得用 FTP 的元数据表——这在 §5.5 会再提一次。
5.4 从基因组编号取下载清单
拿到一个 MGYG 编号后,想知道它有哪些可下载的文件,应当查下载端点而不是猜文件名。API 会返回一个带标签的清单,告诉你每个文件的别名、说明与格式。
#-- 列出 MGYG000000001 的全部可下载文件
curl -s "https://www.ebi.ac.uk/metagenomics/api/v1/genomes/MGYG000000001/downloads" \
| python3 -c "import json,sys;d=json.load(sys.stdin);[print(x['attributes']['alias'],'|',x['attributes']['description']['label']) for x in d['data']]"
这个清单比 FTP 目录更友好,因为它给出了每个文件的语义标签。FTP 目录只给文件名,文件名里的下划线后缀需要对照版本说明才知道是什么意思。
5.5 全量清单的正确取法
要拿全量基因组清单,FTP 上的元数据表是唯一权威来源。API 的目录端点覆盖的是代表基因组这一层,而全量里包含大量非代表的同种基因组。
#-- 取全量元数据表并统计各来源类型的条数
curl -s -o genomes-all_metadata.tsv \
https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0/genomes-all_metadata.tsv
#-- 第二列是来源类型,统计各类型条数
tail -n +2 genomes-all_metadata.tsv | cut -f2 | sort | uniq -c
#-- 第一列是 MGYG 编号,数一数总条数
tail -n +2 genomes-all_metadata.tsv | wc -l
这一步会得到一个数:元数据表的数据行数。它应当与版本说明里写的基因组总数一致。若不一致,说明取数时中断过——这张表有百余兆,在网络不稳时容易出现只下了前一部分的情况。用一个简单的判断就能发现:文件首行的列名有二十个字段,末行应当是一个完整的记录;若末行被截断,说明下载不完整。
5.6 用 Mash 草图做相似度粗筛
根目录下的 all_genomes.msh 是全库基因组的 Mash 草图。它体积远小于序列本身,用途是先做一次全库近邻查询,再把候选拿到序列层面做精确比对。这是把新 MAG 归进 UHGG 最快的一条路。
#-- 取全库 Mash 草图与物种代表目录下的单基因组序列
curl -O https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0/all_genomes.msh
#-- 用自己的 MAG 查询,取最近的 5 个参考
mash dist all_genomes.msh my_assembly.fna -p 8 | sort -k3,3g | head -5
需要注意,Mash 距离是 k-mer 层面的近似,对近缘物种之间的区分力有限。用它筛出候选后,必须用平均核苷酸一致性之类的指标做二次确认,再决定能否归入某个物种簇。直接拿 Mash 距离当物种判定的依据,是这套数据上最常见的误用之一。以 §4.3 的案例为例,那条记录是分离株、组装连续、16S 完整,Mash 能很快把它落到正确的属,但同一个属内另外几个物种的 Mash 距离也已经相当接近,单靠距离无法分开,必须再做 ANI 确认。
§6 与库内词条的关系
6.1 关系图谱
本库已收录的微生物组相关词条,按「一级对象」大致可以分成四群:参考基因组与目录群、丰度与整合群、功能注释群、评测基准群。UHGG 属于第一群,且是这一群里最基础的一环。
| 群组 | 库内词条 | 一级对象 | 与 UHGG 的关系 |
|---|---|---|---|
| 参考基因组与目录 | mgnify | 分析任务与基因组目录 | UHGG 是 MGnify Genomes 的肠道分支 |
| 参考基因组与目录 | UHGG(本词条) | 基因组 | 基准 |
| 丰度与整合 | curatedmetagenomicdata | 样本 | 用同类参考做物种定量,对象在下游 |
| 丰度与整合 | american-gut-project | 样本 | 16S 层面,与基因组目录互补 |
| 丰度与整合 | ckm-gut-metagenome | 样本 | 单队列 16S,需外部参考注释 |
| 功能注释 | dbcan-hgm | 基因簇 | 其输入基因组与本目录高度重叠 |
| 功能注释 | card-db | 耐药基因 | UHGG 的耐药注释借用此类库 |
| 评测基准 | cami2 | 模拟数据与任务 | 模拟所用的参考基因组集与本目录同源 |
这张表的核心结论是:UHGG 与库内其它微生物组词条的关系几乎都是「上游对下游」。丰度类词条需要一套参考才能把读长落到物种上,功能类词条需要一套基因组才能做注释,评测类词条需要一套基因组才能造模拟数据。UHGG 站在这些需求的上游。
6.2 检索路径
按需求倒推该进哪个词条,比按名字找更有效。
| 你的问题 | 先进哪个词条 | 再看哪里 | 理由 |
|---|---|---|---|
| 我的粪便样本里有哪些菌,各占多少 | curatedmetagenomicdata | 再回 UHGG 取代表序列 | 丰度在样本层,参照在基因组层 |
| 这个物种的基因组长什么样 | UHGG | 取 species_catalogue 下的代表 | 目录就是干这个的 |
| 这个物种降解什么糖 | dbcan-hgm | 再回 UHGG 看操纵子上下文 | 糖代谢注释链在功能库 |
| 我写的分析流程该用哪套参考 | UHGG | 对齐版本号 | 版本化数据集要锁定版本 |
| 某个菌株带不带耐药基因 | UHGG | 再看 card-db 的注释口径 | 耐药注释来自外部库 |
| 我想评估一个物种分类软件 | cami2 | 再回 UHGG 取真实参考 | 评测需模拟,模拟需真实参考 |
| 我的样本是 16S,不是宏基因组 | american-gut-project | 看 16S 参考库 | 16S 不需要整套基因组 |
| 我要一个能跑起来的平台,不想自己搭 | mgnify | 看平台流水线说明 | 平台替你跑,目录做底 |
6.3 与 mgnify 词条的分工
库内已有 MGnify 平台词条,与 UHGG 容易混淆。两者的分界可以一句话说清:MGnify 是「帮你算」的平台,UHGG 是「给你比」的目录。前者接收你的读长,跑流水线,产出丰度与功能谱;后者是前者在组装阶段所依赖的参考集之一,也是独立于平台可以单独下载的静态资源。
在实务上,如果你的目标是「分析我自己的数据」,进 MGnify;如果你的目标是「拿一套参考去建我自己的流程」,进 UHGG。两者的数据规模数字也不可比:前者的统计是分析任务数,后者是基因组数。
6.4 与丰度类词条的分工
curatedMetagenomicData 与 UHGG 常被并提,因为它们都涉及「跨研究的肠道微生物组」。区别在一级对象:前者一行是一个样本,后者一行是一个基因组。前者解决「多少」,后者解决「是谁」。做一项跨队列研究时,合理的组合是先在前者里筛样本、取丰度,再回后者取物种的代表序列做验证或做功能解读。
需要注意的是,两者对物种的划分依据不同。前者常用标记基因法,后者用全基因组的平均核苷酸一致性。同一个物种名在两边的成员集合可能有出入,跨库拼接时必须先做名称映射,不能假设同名即同物。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
在给这套数据打分之前,得先纠正一个常见的错位:很多人会拿「样本库」的标准来评它,比如「样本量够不够」「人群代表性如何」「有没有纵向随访」。这些标准对丰度库是核心,对参考基因组目录却是次要的。一个基因组目录的价值在于「覆盖了哪些物种」「每个物种的参考够不够好」「编号体系稳不稳」,而不是「抽了多少人」。
因此本节的分项评分针对的是「作为肠道参考基因组目录」这个用途。若换成别的用途,同一套数据的分数会完全不同。这种误判在跨类目比较时尤其常见,所以在看分数时请先确认它评估的是哪个用途。
7.1 五维评分
按 DAIMS 的常用维度打分,每项 1 到 5 分,针对「作为肠道参考基因组目录」这个用途。
| 维度 | 分数 | 依据 |
|---|---|---|
| 可发现性 | 5 | FTP、REST API、网页浏览三路齐备,目录端点直接给出规模与版本 |
| 可访问性 | 5 | 无需注册、无需申请,FTP 与 HTTPS 均可直取,无速率限制 |
| 可理解性 | 4 | 版本说明详尽,字段语义清楚;扣分在质量分层没有显式标签,需自行切分 |
| 可互操作性 | 4 | 编号与 GTDB、ENA 打通;扣分在 MGYG 跨版本不稳定,需联合版本号使用 |
| 可复用性 | 5 | 数据无使用限制,有版本记录与变更说明,可直接进分析流程 |
| 综合 | 4.6 | 作为参考目录接近满分,扣分集中在版本漂移与质量标签缺失 |
7.2 与同类目录的取舍
同属 MGnify Genomes 家族的口腔、皮肤、阴道等目录,规模远小于肠道目录,但结构完全一致。若研究涉及多部位,用同一个解析器可以同时读入,代价是各目录的物种划分相互独立,跨部位的物种对应需要经 GTDB 谱系中转。
与 GTDB 本身相比,UHGG 的覆盖面窄得多,但在肠道这一域里的密度远高于 GTDB 的全环境汇总。原因很直接:GTDB 要把算力摊到所有生境,UHGG 只做人肠道,可以把同一物种的更多菌株收进来。选择哪一个取决于你的样本是不是几乎全部来自肠道。
7.3 已知的、可枚举的偏差
偏差不是缺陷清单,而是使用时必须知道的边界条件。下面六条都是官方文档里提到或结构上可以推断的。
| 偏差 | 表现 | 适用时的处理 |
|---|---|---|
| 抽样偏差 | 基因组条数按国家分布,取决于公共数据量而非人群 | 不要用国家列做多样性比较 |
| 培养偏差 | 无法培养的类群靠 MAG 进入,质量参差 | 对难培养类群下调质量预期 |
| 冗余清理偏好 | 同一源样本同一物种只留一个,个体内信息被抹平 | 纵向分析回 ENA |
| 谱系过渡带 | 大量物种只有 sp 加数字的工作名 | 引用时区分正式名与工作名 |
| 代表替换 | 版本升级会换物种代表,编号变动 | 版本号必须进主键 |
| 注释依赖外部 | 功能注释受上游库版本影响,重算后可能变化 | 锁定版本,记录流水线版本号 |
还有一条结构性的偏差值得单独说:目录的去冗余规则是「同一源样本、同一物种只保留一个基因组」。这条规则对做参考集是合理的,它避免了同一样本里十几个近同菌株占满目录;但它同时意味着「个体内的菌株多样性」被系统性压缩。任何声称从 UHGG 估计「个体内菌株多样性」的研究,都在越界使用这套数据。
7.4 外部验证矩阵
一份参考目录的质量,最终要靠外部证据来校验。下表列出四类可用的验证方式及其在本目录上的可行性。
| 验证方式 | 具体做法 | 可行性 | 能得到什么 |
|---|---|---|---|
| 与 GTDB 对照谱系 | 取同一基因组的 GTDB 分类结果比对 | 高 | 谱系是否一致,差异点在哪 |
| 与培养株对照 | 拿 ATCC 或 DSM 的模式株做全基因组比对 | 中 | 分离株部分的参考质量 |
| 与独立整合库对照 | 与 curatedMetagenomicData 的物种清单比对 | 高 | 覆盖度差异 |
| 与临床分离株对照 | 用医院分离株做鉴定一致性检验 | 低 | 临床适用性,但样本难获取 |
其中第一项最容易做,也最有用,因为 UHGG 的谱系本来就是 GTDB 赋的,两者的差异只可能来自版本不同步。第二项与第四项的成本高,通常只在有明确应用目标时才做。§4.3 的案例可以作为第一项的现成检验对象:那条记录的谱系在目与科两级都是占位编号,说明它的谱系虽完整,但并非每一段都对应正式分类名;拿同一基因组去 GTDB 查,若版本不同步,就可能出现某一段从编号换成了正式名。
7.5 它为何能持续:一个不断汇入的公共数据流
这套目录能活下来,靠的不是一次性的大投入,而是一个稳定的输入:全球的肠道宏基因组测序项目持续往公共档案里提交数据,而汇编这些数据的人只需要不断重跑流水线。每多一个项目,目录的物种覆盖就密一点;每换一版流水线,注释就统一一层。输入端是别人付钱做的测序,维护端是公共基础设施的常规运维,这个结构让它不需要靠某个具体课题的经费活着。
代价也随之而来:它的更新节奏由下游需求驱动,不由上游供给驱动,所以版本间隔不固定;它的质量由流水线的阈值决定,不由人工审校决定,所以错误以系统性偏差的形式出现,而非个别记录的错误。
7.6 五个最常见的误判后果
误判不会报错,只会安静地把结论带偏。下面五条是按后果严重度排的。
| 误判 | 后果 | 严重度 |
|---|---|---|
| 把它当丰度库 | 分析根本没有样本维度,结论无意义 | 高 |
| 忽略版本号 | 跨版本编号错配,静默的数据污染 | 高 |
| 用国家列做人群比较 | 得到的是数据量的比较,不是生物学的比较 | 中高 |
| 把完整度当质量承诺 | 低质量基因组混进参考集,定量失真 | 中 |
| 直接用 Mash 距离定物种 | 近缘物种混淆,物种层面结论不可靠 | 中 |
§8 生态位与历史
8.1 从 2021 年到今天
UHGG 的时间线并不长,但节点密集。它诞生于一个具体的背景:肠道宏基因组测序在 2010 年代后期迅速普及,各个大队列陆续发表了自建的非冗余基因目录,但这些目录之间物种命名不统一,跨研究比较困难。2021 年的那篇论文给出了一次性整合,规模是二十万余个基因组、四千余个物种、逾一亿七千万条蛋白序列。
此后进入维护期。v2 扩充了物种与谱系参考;v2.0.1 与 v2.0.2 是两个修补版,前者修正 Kraken 库把未知物种归到同一属的错误,后者修正元数据表里四项组装统计的错误。v3.0 是一次结构性更新,一边大量新增,一边大量清理,物种数涨了近四成,基因组总数却略降。
8.2 与相邻资源的生态位差异
在肠道微生物组的参考资源版图上,UHGG 占据的位置可以这样描述:它不是唯一的参考集,但是规模最大、结构最规范、与 GTDB 衔接最紧的一个。
| 资源 | 覆盖 | 优势 | 劣势 |
|---|---|---|---|
| UHGG | 仅肠道原核 | 规模大、结构规范、版本可追 | 只做肠道,不含真核 |
| GTDB | 全环境原核 | 覆盖广、分类权威 | 肠道密度低于 UHGG |
| 整合型宏基因组库 | 多部位样本 | 有丰度,可直接比较 | 依赖参考,物种划分口径不同 |
| 单项目非冗余基因目录 | 单队列 | 深度高、样本一致 | 跨研究不可比 |
8.3 目录化这件事的意义
把「基因组目录」当成一类独立的资源来看,它的意义在于把物种的定义从「一个名字」变成了「一组基因组加一个代表」。这个转变带来两个后果:物种边界可以被复现,因为阈值和聚类流程都写在版本说明里;物种边界也可以被质疑,因为任何一次阈值调整都会让边界移动。二者是同一件事的两面。
UHGG 是这种方式做得最彻底的一个:它把流程写成流水线,把流水线版本号写进目录,把每次变更写成清单。使用者在拿到一个物种时,拿到的不是一条断言,而是一条带出处的证据链。
8.4 后续可能的走向
从现有材料能看出两条线。一条是质量线下探,把中等质量基因组正式纳入,使低丰度类群也有代表;另一条是跨部位拼接,把口腔、皮肤、阴道等目录与肠道目录用统一的谱系串联起来。第一条会提高覆盖度、降低平均质量;第二条会提高通用性、增加映射成本。两条都不改变一个基本事实:它仍然是参考目录,不是样本库。
§9 使用指引
9.1 三种角色的路径
做物种注释的工程人员。 你的第一步是锁定版本。把版本号写进流程配置,把元数据表纳入版本控制,把「用哪个 Kraken 库」写进文档。之后每次升级都是一次显式的迁移,而不是一次静默的覆盖。
做功能挖掘的研究者。 你的第一步是确定对象层级。如果对象是「物种有什么潜力」,从物种代表基因组入手,九层注释都在那里;如果对象是「某个基因家族在全库的分布」,从蛋白目录入手,按四级同一性选一级检索。
做跨研究整合的分析者。 你的第一步是明确自己需要的是哪一层。若要做丰度比较,进丰度类资源,UHGG 只作为参考;若要做物种集合的并集与差集,UHGG 可以直接给出一份统一的物种清单。
9.2 一条最短的可用流程
从零到能用,最短的路径是四条命令加一次核对。
#-- 1 取版本说明与元数据表
BASE=https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0
curl -s -o README_v3.0.txt $BASE/README_v3.0.txt
curl -s -o genomes-all_metadata.tsv $BASE/genomes-all_metadata.tsv
#-- 2 核对条数是否与说明一致
SOURCES=$(tail -n +2 genomes-all_metadata.tsv | wc -l)
REPS=$(awk -F'\t' 'NR>1 && $1==$14' genomes-all_metadata.tsv | wc -l)
echo "基因组 $SOURCES 条;物种代表 $REPS 条"
#-- 3 筛出高质量分离株,作为最保守的参考子集
awk -F'\t' 'NR==1 || ($2=="Isolate" && $7>=95 && $8<2)' genomes-all_metadata.tsv > rep_isolate.tsv
#-- 4 取该子集第一个基因组的蛋白序列
FIRST=$(tail -n +2 rep_isolate.tsv | head -1 | cut -f1)
P=$(tail -n +2 rep_isolate.tsv | head -1 | cut -f14)
echo "$FIRST 属于物种代表 $P"
这四步走完,你就有了一个可核对、可筛选、可下载的最小工作集。后续要不要扩到全库,取决于你的分析需要多少物种覆盖。
9.3 引用方式
引用这套数据必须同时写清三件事:数据集的正式名称、使用的版本号、获取日期。只写名称与论文,等于没写版本,因为论文对应的是 v1.0,与当前版本差着几千个物种。
标准做法是引用 2021 年那篇论文作为资源来源,同时在方法或数据可用性声明里写明「UHGG v3.0,FTP 路径,最后访问日期」。如果用了 UHGP,还要写明用的是哪一级同一性聚类,因为四级之间不可互换。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 词条性质 | 面向使用者的数据集说明页,非原始论文的复述,非审计报告 |
| 数字来源 | 规模类数字取自官方版本说明与 FTP 元数据表;论文数字取自摘要 |
| 未做全量审计 | 未下载全量序列,未逐条统计质量分布,只核对清单与文件结构 |
| 口径处理 | 不同版本的数字并列陈述,不判断孰对孰错 |
| 应当核实的项 | 引用前请以官方版本的版本说明为准,本页可能滞后于最新发布 |
| 不应推导的结论 | 本页不含丰度、不含人群代表性、不含临床适用性判断 |
| 使用许可 | 数据侧为无使用限制;下游注释受各上游库条款约束 |
| 更新策略 | 官方发新版本时,本页需要按版本说明重写规模类数字 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| UHGG 有二十万个基因组,现在还是这个数 | 那是 v1.0 的非冗余数,v3.0 的总数是另一个量级 | 首版论文摘要与 v3.0 版本说明 |
| 四万四千…不,四千多个物种 | 论文期是四千余个,v3.0 已涨到六千余个物种级簇 | 两个版本的版本说明 |
| 里面每个基因组都是高质量 | 门槛是门槛,目录里同时有中等质量的基因组 | 元数据表完整度列 |
| 这是个人群队列数据 | 是参考目录,来源项目的样本不代表人群 | 元数据表无丰度列 |
| 可以直接做差异丰度分析 | 没有任何丰度值 | 元数据表二十列中无丰度字段 |
| 只要物种名对得上就能合并 | 物种划分依据不同,跨库需做名称映射 | 与标记基因法的口径差异 |
| MGYG 编号永久有效 | 跨版本可能消失或含义改变 | v3.0 的移除与替换清单 |
| 用 Mash 距离就能定物种 | Mash 是近似,需 ANI 二次确认 | 近缘物种区分力的局限 |
| 蛋白目录就是一个文件 | 是四级聚类,各有独立的表与注释 | 蛋白目录下的四个打包文件 |
| 官方页面能直接抓取数据 | 页面由前端渲染,须走 API 或 FTP | 直接抓 HTML 只得到空壳 |
FAQ
问:UHGG 与 UHGP 是同一个东西吗?
不是。UHGG 是基因组集合,每条记录是一个基因组;UHGP 是蛋白集合,每条记录是一个蛋白簇。UHGP 由 UHGG 的全部编码序列聚类而来,一份上游、一份下游,用的时候要分开引。
问:为什么论文写的数字,和站点上现在的数字不一样?
版本不同。论文对应 v1.0 的某个精确口径,站点对应当前版本的另一个口径。两者都真,引用时必须带版本号与获取日期。
问:物种数四千多还是六千多?
取决于版本。论文期约四千六百余个,v3.0 是六千四百余个。涨的原因是新项目汇入,降的原因是部分物种因成员全被移除而退出目录。
问:能直接拿来做机器学习吗?
可以,但要想清楚用什么做特征。基因组序列与注释可以作为输入,物种标签可以作为分类目标;但如果目标是预测疾病,需要另配表型表,目录里没有。
问:为什么同一个物种的基因组质量参差不齐?
物种代表挑的是该簇里质量最好的一个,其余成员保持原样。代表与非代表的注释深度也不同,非代表通常只有基础注释。
问:下载体积有多大?
蛋白序列压缩后的单文件在百吉字节量级,基因目录的核酸文件在四十吉字节量级。全量下载对存储与带宽都有要求,建议按物种或按子集取。
问:有没有网页界面直接查?
有,MGnify 的基因组浏览页可以按目录、谱系、地理来源筛选并查看单基因组详情。但页面由前端渲染,程序化访问应走 API。
问:它和 GTDB 是什么关系?
UHGG 借 GTDB 赋谱系,因此两者的分类体系一致;区别在覆盖范围,GTDB 是全环境,UHGG 只做人体肠道。
问:可以用它来设计 16S 引物吗?
可以用来查看某物种的 16S 序列与完整性,但设计引物需要物种覆盖面更广的比对集,仅靠肠道目录会漏掉非肠道类群。
问:版本升级后旧结果还能用吗?
能用,但要标注版本。跨版本直接比较会有编号错配的风险,正确做法是选定一个版本重跑,或在两版之间做显式映射。
问:最新的目录就是最好的吗?
不一定。最新版物种覆盖更广,但去冗余更严,部分旧的基因组已消失。如果你的分析需要与既有论文对齐,用与论文相同的版本更稳妥。
问:要引用它作为方法依据,怎么写最稳?
在方法里写清目录名、版本号、获取日期与用到的层级(基因组、物种代表、蛋白目录的哪一级),再加上原始论文的引用。
术语表
| 术语 | 含义 |
|---|---|
| MAG | metagenome-assembled genome,从宏基因组读长拼装出的基因组 |
| SGB | species-level genome bin,按基因组相似度划分的物种级集合 |
| 物种级簇 | UHGG 对同一物种成员基因组的归并单位 |
| 物种代表 | 每个物种簇中选出的注释最完整的一个基因组 |
| 泛基因组 | 同一物种所有成员基因组中出现的全部基因集合 |
| 核心基因 | 几乎全部成员都携带的基因 |
| 附属基因 | 只在部分成员中出现的基因 |
| ANI | average nucleotide identity,平均核苷酸一致性 |
| Mash 距离 | 基于 k-mer 的快速基因组相似度估计 |
| N50 | contig 长度按长度加权的累计中位值 |
| 完整度 | 由单拷贝标记基因检出比例推算的基因组完整程度 |
| 污染度 | 由标记基因重复检出推算的外源序列比例 |
| GTDB | Genome Taxonomy Database,基因组分类学数据库 |
| 工作名 | 形如 sp 加数字的临时物种名,尚未正式发表 |
| GFF | 基因结构注释文件格式 |
| eggNOG | 直系同源群的注释资源 |
| InterProScan | 蛋白结构域注释工具 |
| CAZy | 碳水化合物活性酶分类 |
| COG | 直系同源群的经典分类体系 |
| AntiSMASH | 次级代谢基因簇预测工具 |
| AMRFinderPlus | 耐药基因注释工具 |
| Kraken 2 | k-mer 比对式物种分类器 |
| Bracken | Kraken 输出到物种层级的重估工具 |
| 非冗余基因组 | 去重后每个样本每个物种只留一个的集合 |
| 分离株 | 可培养、有实体菌株的基因组 |
| 参考目录 | 一组带代表与谱系的基因组集合 |
| 版本漂移 | 升级导致编号或内容变化的现象 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 首版论文基因组数 | 论文标题即写明该数 | 首版论文摘要 | 论文摘要 |
| 首版论文物种数 | 4,644 | 首版论文摘要 | 论文摘要 |
| 首版论文蛋白序列数 | 逾一亿七千万条 | 首版论文摘要 | 论文摘要 |
| 首版论文中未培养物种占比 | 七成以上 | 首版论文摘要 | 论文摘要 |
| 首版论文中无功能注释蛋白占比 | 四成 | 首版论文摘要 | 论文摘要 |
| v3.0 基因组总数 | 二十八万六千余个 | v3.0 版本说明 | 官方页面 |
| v3.0 物种级簇数 | 六千四百余个 | v3.0 版本说明 | 官方页面 |
| v3.0 来源研究数 | 2,327 | v3.0 版本说明与研究清单 | 官方页面 |
| v3.0 新增基因组数 | 近十万 | v3.0 版本说明 | 官方页面 |
| v3.0 移除基因组数 | 近十万 | v3.0 版本说明 | 官方页面 |
| v2.0.2 物种代表数 | 4,744 | REST API 目录端点 | 官方接口 |
| v2.0.2 未聚类基因组数 | 289,232 | REST API 目录端点 | 官方接口 |
| 蛋白目录层级 | 四级同一性 | v3.0 版本说明 | 官方页面 |
| 地理覆盖 | 41 个国家与地区以上 | 官方 README | 官方页面 |
| 全库蛋白序列压缩文件 | 约 132 GB | FTP 文件头 | 官方接口 |
| 基因目录核酸文件 | 约 43 GB | FTP 文件头 | 官方接口 |
附录 B:数字的来源分层
来自官方页面的数字。 二十八万六千余个基因组、六千四百余个物种级簇、2,327 项来源研究、41 个国家与地区、蛋白目录四级聚类、各版本之间的变更量。这些数字的出处是 FTP 上的版本说明与文件清单,属于第一手来源,但只覆盖官方自己写下的口径。
来自官方接口的数字。 v2.0.2 的物种代表数、未聚类基因组数、单基因组的注释覆盖与蛋白数、各下载文件的体积。这些数字通过 REST API 与 FTP 文件头获得,反映的是查询当时的状态,官方更新后可能变化。
来自论文摘要的数字。 首版的基因组数、物种数、蛋白序列数、未培养物种占比、无注释蛋白占比。摘要写于 2020 至 2021 年,对应 v1.0,不能直接套到当前版本上。
未核实或无法核实的项。 目录内基因组质量的逐级分布、各省份或国家的细粒度来源构成、蛋白目录每一级的具体簇数、各物种成员基因组数分布。这些需要下载全量并逐条统计,按写作规范不纳入,任何看到的「某级质量占多少比例」的说法,请回到原始表自行核算。
附录 C:完整参考文献
- Almeida A., Nayfach S., Boland M., 等. A unified catalog of reference genomes from the human gut microbiome(首版规模见 §2.4 与附录 A). Nature Biotechnology, 2021, 39: 105–114. DOI: 10.1038/s41587-020-0603-3.
- MGnify Genomes 目录总览页. EMBL-EBI. https://www.ebi.ac.uk/metagenomics/browse/genomes
- UHGG v3.0 版本说明. EMBL-EBI FTP. https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0/README_v3.0.txt
- UHGG v3.0 元数据表. EMBL-EBI FTP. https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0/genomes-all_metadata.tsv
- UHGG v1.0 版本说明. EMBL-EBI FTP. https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v1.0/README.txt
- MGnify REST API 目录端点. EMBL-EBI. https://www.ebi.ac.uk/metagenomics/api/v1/genome-catalogues
- MGnify 基因组目录流水线源码. EBI-Metagenomics. https://github.com/EBI-Metagenomics/genomes-catalogue-pipeline
- MGnify 主站. EMBL-EBI. https://www.ebi.ac.uk/metagenomics/
- GTDB 基因组分类学数据库. https://gtdb.ecogenomic.org/
- Parks D. H., 等. GTDB: an ongoing census of bacterial and archaeal diversity through a phylogenetically consistent, rank normalized and complete genome-based taxonomy. Nucleic Acids Research, 2022, 50: D785–D794.
附录 D:任务代码
把「取清单、核规模、筛子集、取序列」串成一条可复现的脚本,便于在本地或集群复跑。
import csv, subprocess, sys, tempfile, os
BASE = "https://ftp.ebi.ac.uk/pub/databases/metagenomics/mgnify_genomes/human-gut/v3.0"
META = f"{BASE}/genomes-all_metadata.tsv"
WORK = tempfile.mkdtemp(prefix="uhgg_")
def download(url, dest):
subprocess.run(["curl", "-s", "-o", dest, url], check=True)
meta_local = os.path.join(WORK, "meta.tsv")
download(META, meta_local)
rows = list(csv.DictReader(open(meta_local), delimiter="\t"))
print("元数据行数", len(rows))
reps = {r["Species_rep"] for r in rows}
print("物种代表数", len(reps))
by_type = {}
for r in rows:
by_type[r["Genome_type"]] = by_type.get(r["Genome_type"], 0) + 1
print("来源类型分布", by_type)
strict = [r for r in rows
if r["Genome_type"] == "Isolate"
and float(r["Completeness"]) >= 95
and float(r["Contamination"]) < 2]
print("保守子集条数", len(strict))
if strict:
target = strict[0]
acc = target["Species_rep"]
shard = acc[:7]
url = f"{BASE}/species_catalogue/{shard}/{acc}/genome/{acc}.faa.gz"
local = os.path.join(WORK, f"{acc}.faa.gz")
download(url, local)
size = os.path.getsize(local)
print("已取蛋白序列", acc, size, "字节")
跑完会打印四个数:元数据行数、物种代表数、来源类型分布、保守子集条数。前两个数应当与版本说明一致,若对不上说明下载不完整——这是判断取数是否成功的第一个信号。
附录 E:如果只记五件事
- 它是参考基因组目录,不是样本库。 每条记录是一个基因组,没有丰度、没有表型,做丰度分析要另找资源。
- 数字必须带版本。 论文的二十万余个对应首版,当前版本是另一个量级,物种数也从四千余涨到六千余。
- 三个层级别混。 基因组、物种代表、谱系是三层,编号与用途各不相同。
- 注释分深浅。 物种代表有九层注释,非代表只有基础注释,取的时候要对准目录。
- 许可宽松但有尾巴。 数据本身无使用限制,下游注释来自第三方库,各有条款。
编辑说明
本页为数据集的说明性词条,写作过程中只核对官方版本说明、FTP 文件结构与官方接口返回,未做全量序列下载与逐条统计。规模类数字均标注了来源层级;涉及不同版本口径差异的部分,采取并列陈述而不做取舍。若官方发布新版本,规模类数字与变更清单需要同步重写。本页不构成对数据质量的保证,也不构成临床使用建议。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- silva — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释 / 测序数据
- greengenes2 — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释 / 测序数据
- gtdb — 共享标签:基因组学与多组学 / 微生物组 / 变异与注释 / 测序数据
- hmp — 共享标签:基因组学与多组学 / 微生物组 / 测序数据
- dbsnp — 共享标签:基因组学与多组学 / 变异与注释 / 测序数据
- ensembl — 共享标签:基因组学与多组学 / 变异与注释 / 测序数据
- mgnify — 共享标签:基因组学与多组学 / 微生物组 / 测序数据
- curatedmetagenomicdata — 共享标签:基因组学与多组学 / 微生物组 / 测序数据
- biosamples — 共享标签:基因组学与多组学 / 变异与注释 / 测序数据
- dgva — 共享标签:基因组学与多组学 / 变异与注释 / 测序数据
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

