2、富集分析常用工具:DAVID、clusterProfiler、Enrichr、Metascape 的优缺点对比

说实话,刚开始做 GO 富集分析那会儿,我也不太清楚该用哪个工具。

每次看到同学在群里问「DAVID 好还是 clusterProfiler 好」,我就头大。直到自己踩了不少坑,才慢慢摸清了每把刀的脾气。

今天我就把常用的四把刀——DAVID、clusterProfiler、Enrichr、Metascape——摊开来聊聊。

各自的优势在哪里?痛点在哪儿?适合什么场景?我会按自己的经验给你讲透。

嗯,先上张总览图,把这四个家伙的定位看清楚。

GO富集分析常用工具对比框架 GO 富集分析 DAVID clusterProfiler Enrichr Metascape 核心特征 • 网页端,无需编程 • 数据库更新慢 • 批量基因注释 • 收费不稳定 核心特征 • R包,灵活可定制 • 可视化强大 • 支持多种数据库 • 依赖R环境 核心特征 • 网页+API • 数据库丰富 • 交互式可视化 • 结果下载受限 核心特征 • 多基因列表比较 • 自动生成报告 • 集成多种数据库 • 较慢,结果冗余 选型建议:需要快速验证 → DAVID;R用户追求灵活 → clusterProfiler;快速初筛 → Enrichr;全面报告 → Metascape 易用性:★★★★★ 定制性:★★★★★ 数据库量:★★★★★ 报告自动:★★★★★

2.1 DAVID:老牌网页工具,上手简单但更新慢

先说说 DAVID。

DAVID 是圈子里最早一批网页端富集分析工具了。我记得 2016 年刚入坑时,实验室师兄就推荐我用它,因为不用装任何软件,浏览器打开就行。

优点很明显:

  • 上手门槛极低: 把基因 ID 粘贴上去,点个提交就出结果。
  • 整合了功能注释和通路: 除了 GO 和 KEGG,还带了疾病、蛋白功能等信息,一个页面全看完。
  • 可视化简单: 自带柱状图和热图,适合快速汇报。

但痛点也不少。

DAVID 的硬伤: 数据库更新非常慢。我做过一个测序项目,基因注释用的是最新版 Ensembl,结果 DAVID 里还在用旧版,导致很多基因匹配不上。更难受的是,过去几年 DAVID 对商业用户开始收费,而且经常挂,稳定性打折扣。

避坑指南: 我曾经在 DAVID 上选错物种数据库,结果富集出了一堆不相干的通路。提交前一定再三核对「Species」和「Background」选项。

2.2 clusterProfiler:R 用户的瑞士军刀

如果你习惯用 R 做生信分析,clusterProfiler 应该是绕不过去的工具了。

我个人习惯用这个包处理大多数富集场景。为什么呢?

  • 灵活定制程度高: 支持 GO、KEGG、Reactome、DO(疾病本体),还能自己传自定义基因集。
  • 可视化自带发布级: 搭配 enrichplot,能画出 dotplot、cnetplot、emapplot 等,基本不需要二次加工。
  • 批量化能力强: 一行代码可以做多个 GO 子本体(BP、CC、MF)的富集。
  • 社区生态好: 配套教程和案例很丰富,遇到问题 Stack Overflow 上基本能搜到答案。

举个例子,最简单的 GO 富集代码:

library(clusterProfiler)
library(org.Hs.eg.db)

# 假设你有基因列表 gene_list,格式为 ENTREZID
ego <- enrichGO(gene = gene_list,
                OrgDb = org.Hs.eg.db,
                keyType = "ENTREZID",
                ont = "BP",
                pAdjustMethod = "BH",
                qvalueCutoff = 0.05)

dotplot(ego, showCategory = 20)

你想想看,就这几行,p 值矫正、多组比较、可视化全搞定了。

避坑指南: 我曾经在装 org.Hs.eg.db 时栽了跟头——某些 R 版本下数据库包不兼容,导致映射失败。建议用 BiocManager::install() 而不是普通 install.packages(),并检查 R 版本是否匹配。

clusterProfiler 的缺点也很明显:它是 R 包,得会 R 才行。如果团队里都是 Python 党,就尴尬了。

2.3 Enrichr:网页端的富集数据库超市

Enrichr 是另一个我喜欢的网页端工具。

它的特色是「数据库多到离谱」,收录了 200 多个基因集库,包括 ARCHS4、TF Perturbations、Kinase Perturbations 等冷门库。做转录调控和药物重定位时,DAVID 里找不到的库,Enrichr 里经常有。

  • 交互可视化不错: 结果页直接展示 clustered barcode plot 和交互式表格,鼠标悬停就看详情。
  • 支持 API: 我经常用 Python 调 Enrichr 的 API,批量处理多个基因列表。

Enrichr 的 Python 调用示例:

import requests

gene_list = ["TP53", "EGFR", "MYC"]
# Enrichr 提交 API
ENRICHR_URL = "https://maayanlab.cloud/Enrichr/addList"
payload = {"list": (None, "\n".join(gene_list)),
           "description": (None, "My gene list")}
response = requests.post(ENRICHR_URL, files=payload)

# 获取富集结果
user_list_id = response.json()["userListId"]
ENRICHR_URL = f"https://maayanlab.cloud/Enrichr/enrich?userListId={user_list_id}&backgroundType=KEGG_2019_Human"
result = requests.get(ENRICHR_URL)

你看,几行 Python 就能拿到结果 JSON,适合集成到管道里。

个人建议: Enrichr 适合快速做「初筛」——比如你有 2000 个差异基因,先扔进去看看大概富集什么通路。但它的 P 值计算方法偏保守,有时候真阳性反而没富集出来,所以别把 Enrichr 的结果当最终结论。

缺点也很直接:网页版结果页广告推送不少,而且导出时表格格式有点乱,需要自己清理。

2.4 Metascape:集大成的自动报告机

Metascape 是我做过大项目时最常用的工具。

它最吸引我的一点是:能自动生成一份 PPT 级别的研究报告,图表、统计、基因列表全排好。做完分析直接拿图写论文,省了大把时间。

  • 多基因列表比较: 可以一次上传多组基因(比如对照 vs 处理、不同时间点),它会自动对比每组富集的异同。
  • 内置通路网络分析: 自动把富集到的通路画成互作网络图,能一眼看出哪些通路共享基因。
  • 统一后台: 背后整合了 GO、KEGG、Reactome、CORUM、TRRUST 等 40 多个数据库。

但 Metascape 不是万能的。

避坑指南: 我曾经用 Metascape 分析 5000 个基因的列表,结果生成了一份 80 页的报告,里面一半是冗余通路。建议上传后先调高 Q-value cutoff(比如 0.01),否则结果多到你看不完。另外,它的页面加载很慢,特别是分析大列表时,可能等上三五分钟才出结果,要有耐心。

对比表格:一句话总结四个工具

为方便你快速对比,我把它们的核心区别整理成表格。

维度 DAVID clusterProfiler Enrichr Metascape
形式 网页端 R 包 网页 + API 网页端
上手难度 ★☆☆☆☆(最简单) ★★★★☆(需 R 基础) ★★☆☆☆(简单) ★★★☆☆(中等)
数据库 较少、更新慢 中(可扩展) 极多(200+) 多(40+)
可视化 基础柱状图/热图 极强(dot/cnet/emapplot) 交互式条形图 自动生成报告+网络图
批量处理 手动点 代码循环 API 批量 网页表单
稳定性 一般(常挂) 高(本地运行) 高 中等(服务器慢)
收费 商业用需付费 完全免费 完全免费 完全免费
适合场景 快速验证、小白上手 定制化分析、R 用户 快速初筛、调控网络 多组比较、自动出报告

2.5 我的使用经验和选型建议

说了这么多,你会问我:那你平时到底怎么选?

我个人习惯分场景来处理。

  • 如果是探索性分析: 先扔到 Enrichr 里看几眼,确认大概通路方向。
  • 如果是正式论文分析: 我肯定用 clusterProfiler。代码可复现、可控性高,出图质量也够发文章。
  • 如果是多组比较: 首选 Metascape,省心,报告直接发给合作者看。
  • 如果是紧急汇报: 快速用 DAVID 跑一下,但事后会再用其他工具验证一遍。

一个实用技巧: 我的建议是你至少熟悉两个工具——一个本地化的(clusterProfiler)和一个网页端的(Metascape 或 Enrichr)。这样你无论在办公室还是在家里,掏出电脑就能干活。我出差时经常用 Enrichr 连 API 远程跑分析,不依赖 R 环境。

嗯,这四种工具没有绝对的好坏,关键看你手头的工作流和团队背景。

等下节课,我会详细讲讲怎么用 clusterProfiler 做一套完整的 GO 富集分析,并生成你想要的 dotplot 和 cnetplot。到时候我会带上真实项目的数据,一步步演示。

你自己先试着上手玩玩这几个工具,有问题随时联系我。