做生物信息学分析的人,几乎都逃不过给基因做注释这一步,尤其是拿到一批差异基因或候选基因之后,第一反应基本都是"这些基因到底参与了哪些功能、富集在哪些通路上"。GO和KEGG注释就是回答这个问题的标准手段。但真正动手做的时候,大家才会发现,批量的基因注释远比想象中麻烦——ID格式五花八门、数据库更新不及时、物种选择不对、富集结果一堆冗余条目不知道怎么过滤,每一个环节都能卡住人。这篇我就把整套流程掰开揉碎讲清楚,从基因列表整理到工具选型,从在线平台实操到R语言本地跑通,再到结果解读和可视化,一次讲透,帮大家少走弯路。
1. 注释之前,先把基因列表整理明白
很多人在批量注释上翻车,不是工具不会用,而是输入数据就没准备好。拿到一个基因列表,先别急着粘贴到网页上,花几分钟把格式和ID类型理顺,后面能省下好几个小时。
1.1 基因ID的常见格式与转换逻辑
基因ID这回事,看着简单,实际上坑很多。同样的一个基因,在不同数据库里有不同的叫法:Entrez ID是一串数字,比如TP53对应的Entrez ID是7157;Ensembl ID是ENSG开头的字符串,比如ENSG00000141510;还有最常见的Gene Symbol,也就是TP53这种简洁写法;另外还有RefSeq的NM_编号、UniProt的蛋白ID等等。
做GO和KEGG注释时,不同工具支持的ID类型不一样。DAVID支持多种ID,KOBAS也可以自动识别一部分,但最稳妥的做法是统一转成Entrez ID或者Gene Symbol再提交。为什么?因为这两个ID的覆盖率高,几乎所有注释工具都能识别。
ID转换有几种方式:如果是人类的基因,可以用R语言里的clusterProfiler包配上org.Hs.eg.db注释包直接转;也可以用在线工具如bioDBnet、DAVID的ID转换功能,或者Ensembl官网的BioMart。我个人的习惯是用R语言转,因为批量处理方便,而且可以保留原始列表的顺序。
1.2 去重、过滤与格式清洗的实操细节
这一节的细节直接决定结果的可靠性。基因列表最常见的几个问题:一是含有重复项,二是包含无法识别的基因名,三是混入了空行和特殊字符。
去重这一步千万别省。提交重复基因名进去,有些工具会报错,有些工具会静默去重,还有些工具会把同一个基因算多次,导致富集结果偏差。建议在Excel或R里提前去重,R里就是unique()一行代码的事。
过滤方面,建议把表达量为0的基因、没有对应注释信息的基因都考虑是否剔除。另外,如果做的是转录组数据,基因列表里可能包含一些非编码RNA,它们的GO注释覆盖度比较低,KEGG通路注释更少,不处理可能会拉低整体的注释率。
格式清洗容易被忽略。基因列表里如果有空格、中文标点、全角字符,某些在线工具会识别失败。粘贴之前,最好在文本编辑器里把逗号、分号统一成换行符,确保每一个基因占一行。
提示:下载基因列表时,Excel另存为CSV格式时容易把基因名自动转成日期格式,比如"SEPT2"会被改成"9月2日",这是Excel的经典坑,务必在导入时把列格式设为"文本",或者用R的
read.csv(..., colClasses="character")来读取。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 工具选型:在线平台与本地脚本怎么取舍
工具选型这事,很多人觉得随便拿一个能出结果就行,但实际用下来差异很大。不同工具背后的数据库版本、算法细节、物种覆盖度都不一样,结果自然有偏差。选工具前,先想清楚三个问题:物种是什么、基因数量多少、有没有编程基础。
2.1 主流GO和KEGG注释工具对比
我这些年用下来,主流工具无非是这几类,各自特点如下表:
| 工具 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| DAVID | 中小规模基因列表,快速出结果 | 操作简单、结果全面、自带ID转换 | 数据库更新慢,部分新基因注释不到 |
| KOBAS | 中等规模列表,支持多种ID | 对KEGG注释比较好用,物种覆盖广 | 有时服务器不稳定,结果页面响应慢 |
| clusterProfiler | 大规模转录组数据,本地R语言环境 | 灵活可控、图表一体、数据库版本可管理 | 需要写R代码,对新手有门槛 |
| g:Profiler | 在线快速注释 | 界面友好,支持多物种,g:SCS多重检验校正优秀 | 结果表格式不太直观,需要熟悉字段含义 |
| WebGestalt | 中等规模列表,做富集分析 | 支持多种注释来源,可视化美观 | 上传的基因格式要求较严 |
DAVID是老牌工具,2003年就有了,很多人的GO和KEGG注释初体验都是从DAVID开始的。它的优势在于封装好了,不需要任何代码基础,把基因Symbol或Entrez ID贴进去,选好物种和背景,点提交就能出结果。但它的注释数据库更新滞后,基本上一年才更新几次,对于研究新物种或新注释版本的人来说,注释率会明显偏低。
KOBAS是我个人比较推荐的KEGG注释方案之一,它对KEGG数据库的整合做得比较好,能自动将多种ID映射到KEGG通路。而且它支持列表输入和富集分析两种模式,灵活性高。不过它的网页端有时不太稳定,提交大列表后可能要等待较长时间。
clusterProfiler是R语言生态里功能注释的扛把子。它的优势不只在注释本身,而是整个分析链路的整合——你可以从DESeq2或limma得到差异基因后,直接管道式地传入clusterProfiler做注释和富集,再直接出图。对于处理几十个样品、上万基因的转录组数据来说,这种本地脚本的方式最可靠、最可复现。
2.2 为什么我建议至少掌握一种本地方案
在线平台最大的问题是"黑盒"
