2、富集分析常用工具:DAVID、clusterProfiler、Enrichr、Metascape 的优缺点对比
说实话,刚开始做 GO 富集分析那会儿,我也不太清楚该用哪个工具。
每次看到同学在群里问「DAVID 好还是 clusterProfiler 好」,我就头大。直到自己踩了不少坑,才慢慢摸清了每把刀的脾气。
今天我就把常用的四把刀——DAVID、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。到时候我会带上真实项目的数据,一步步演示。
你自己先试着上手玩玩这几个工具,有问题随时联系我。