1. NCBI数据库入门:先搞清楚它到底能干什么
刚接触生物信息分析的人,十有八九第一个撞上的就是NCBI。这四个字母的全称是美国国家生物技术信息中心,但说实话,名字本身不重要,重要的是它底下挂着的那一堆数据库——GenBank、PubMed、BLAST、SRA、dbSNP、RefSeq、Taxonomy……每一个单拎出来都够写一本手册。很多人第一次打开NCBI首页,看到满屏的链接和搜索框,直接懵了,不知道该点哪个。
我刚开始做序列分析那会儿也是这样,导师丢过来一句“去NCBI上把这个基因的序列找出来”,我愣是在首页转了十几分钟才摸到门路。后来用多了才明白,NCBI本质上就是一个超大型的生物数据超市,你需要的序列、文献、变异位点、表达数据、物种分类信息,它基本都有,关键是你得知道去哪个货架拿、怎么拿、拿回来怎么用。
这篇内容适合三类人看:第一类是生物、医学、农学相关专业的学生,正在做课题需要查序列、找文献、做比对;第二类是刚进入生物信息岗位的从业者,需要系统地把NCBI的常用功能过一遍;第三类是做数据库开发或数据管理的人,想了解NCBI这套体系的设计逻辑,借鉴到自己的项目里。不管你是哪一类,我都会尽量把每一步讲透,包括我踩过的坑和后来总结出来的省事办法。
提示:NCBI的界面和功能会不定期更新,但核心逻辑和数据库结构十几年没大变过。掌握了底层逻辑,界面怎么改你都能找到入口。
2. 核心数据库拆解与选型逻辑
2.1 GenBank、RefSeq、Ensembl到底用哪个
这是被问得最多的问题之一。三个都是序列数据库,但定位完全不同。
GenBank是原始提交库,任何人都可以往里面提交序列,所以它的特点是“全但杂”。同一个基因,可能有几十条甚至上百条不同实验室提交的序列,长度不一、注释质量参差不齐。好处是信息最原始、最全面,坏处是你得自己判断哪条靠谱。
RefSeq是NCBI自己维护的参考序列库,每一条序列都经过人工审核或自动化流程筛选,注释规范、冗余度低。做基因功能分析、设计引物、做进化树,优先用RefSeq。它的登录号通常以NM_、NR_、NP_、NC_开头,看到这些前缀就知道是RefSeq。
Ensembl是欧洲生物信息研究所维护的,和NCBI是竞争又互补的关系。它的强项在于基因组注释和比较基因组学,如果你做的是全基因组层面的分析,Ensembl的注释往往更细致。但如果你只是查一个基因的mRNA序列,NCBI的RefSeq通常更快更直接。
我的习惯是:查单基因序列用RefSeq,做基因组比对用Ensembl,找原始提交数据用GenBank。三者之间可以互相跳转,NCBI的每条RefSeq记录里都会标注对应的GenBank原始序列。
2.2 PubMed和PMC的分工
PubMed是文献摘要库,收录了超过3000万条文献记录,但大部分只有摘要,没有全文。PMC是全文库,收录了开放获取的全文文章。很多人不知道的是,PubMed里有一部分文章会标注“Free PMC article”,点进去就能看全文。
搜索文献的时候,我建议用MeSH词表来搜,而不是直接敲关键词。MeSH是医学主题词表,NCBI给每篇文章都打了MeSH标签,用MeSH词搜索的查准率比自由词高很多。比如你搜“lung cancer”,出来的结果可能包含各种不相关的文章,但如果你用“Lung Neoplasms”[MeSH]来搜,结果就精准得多。
2.3 SRA和GEO:高通量数据的入口
SRA是序列读取存档库,存放的是高通量测序的原始数据,比如RNA-seq、ChIP-seq、WGS的fastq文件。GEO是基因表达数据库,存放的是处理后的表达矩阵和实验设计信息。两者经常配合使用:你在GEO上找到感兴趣的实验,然后通过GEO页面提供的链接跳转到SRA去下载原始数据。
这里有个坑要注意:SRA的数据量非常大,一个项目动辄几十上百GB。下载之前一定要看清楚数据量,别贸然点下载。我见过有学生用校园网下了一个200GB的SRA项目,直接把实验室的带宽占满了,被全组人追着骂。
2.4 数据库选型速查表
| 需求场景 | 推荐数据库 | 登录号前缀 | 注意事项 |
|---|---|---|---|
| 查单基因mRNA序列 | RefSeq | NM_ / XM_ | XM_是预测序列,NM_是实验验证的 |
| 查蛋白质序列 | RefSeq | NP_ / XP_ | 同上,XP_是预测的 |
| 查基因组序列 | RefSeq / GenBank | NC_ / CM_ | NC_是完整基因组,CM_是染色体 |
| 查文献摘要 | PubMed | PMID | 用MeSH词搜索更精准 |
| 查文献全文 | PMC | PMC ID | 只有开放获取的才有全文 |
| 查测序原始数据 | SRA | SRR / ERR / DRR | 注意数据量,先看大小再下载 |
| 查表达谱数据 | GEO | GSE / GSM | 看平台和样本设计是否匹配你的需求 |
| 查变异位点 | dbSNP | rs | 注意版本号,不同版本位点信息可能不同 |
| 查物种分类 | Taxonomy | taxid | 做宏基因组分析必备 |
3. 序列检索与下载的完整实操
3.1 从基因名到序列:一步步走通
假设你要查人类TP53基因的mRNA序列。最直接的办法是在NCBI首页的搜索框里输入“TP53”,然后在下拉框里选择“Gene”数据库。出来的结果第一条通常就是TP53的基因页面,里面汇总了这个基因的所有信息:基因组位置、转录本、蛋白质产物、相关疾病、通路信息等等。
在基因页面里,往下翻找到“mRNA and Protein(s)”部分,你会看到多个转录本。这里要注意,一个基因往往有多个转录本,选哪个取决于你的实验目的。如果做功能实验,通常选最长的那个或者注释最完整的那个;如果做定量PCR,选你实验验证过的那个。
点进具体的mRNA记录后,页面上方有一个“Send to”按钮,点开可以选“File”下载FASTA格式的序列,也可以选“Clipboard”直接复制。我一般习惯下载FASTA文件,方便后续用软件处理。
注意:下载序列时一定要看清楚是mRNA还是基因组序列。mRNA序列里没有内含子,基因组序列里有。如果你要做引物设计,用mRNA序列来设计跨外显子的引物,可以避免扩增到基因组DNA。
3.2 BLAST比对:参数怎么设才靠谱
BLAST是NCBI最核心的工具之一,用来做序列相似性搜索。很多人用BLAST就是默认参数直接跑,但其实参数设置直接影响结果的质量。
最关键的几个参数:
- Database:选nr还是refseq_rna?nr是全库,结果多但杂;refseq_rna是参考序列库,结果少但精。做物种鉴定用nr,做基因注释用refseq_rna。
- Organism:可以限定物种范围。如果你确定序列来自人类,就限定Homo sapiens,能大幅减少无关结果。
- Expect threshold:默认是10,意思是随机匹配的期望值。这个值越小,结果越严格。我一般设成1e-5,过滤掉大部分噪音。
- Word size:默认11,对于短序列(<50bp)要调小到7,否则可能找不到匹配。
- Max target sequences:默认100,如果你要看更多结果可以调到500或1000。
跑完BLAST之后,结果页面会按得分从高到低排列。重点看几个指标:Query cover(查询序列覆盖度)、E value(期望值)、Per. ident(相似度)。Query cover低于80%的结果要谨慎对待,可能是部分匹配。E value小于1e-5通常认为是显著匹配。Per. ident低于90%的话,同源性可能不够高,需要进一步验证。
3.3 批量下载:别一个个点,用脚本
如果你需要下载几十上百条序列,一个个点“Send to”会疯掉。NCBI提供了批量下载的接口,可以用命令行工具或者Python脚本搞定。
最常用的工具是NCBI的Datasets命令行工具,安装之后可以用一行命令下载整个基因组或一组序列。比如:
datasets download genome accession GCF_000001405.40 --include genome,gtf这条命令会下载人类基因组的参考序列和注释文件。GCF_开头的是RefSeq的参考基因组,GCA_开头的是GenBank的。
如果只是下载一组序列,可以用efetch工具:
esearch -db nucleotide -query "TP53[Gene] AND Homo sapiens[Organism]" | efetch -format fasta > tp53_sequences.fasta这个管道命令的意思是:先在nucleotide库里搜索人类TP53基因的所有序列,然后把结果以FASTA格式输出到文件里。esearch和efetch是Entrez Direct工具集的一部分,安装之后可以直接在命令行用。
实操心得:批量下载之前先用esearch看一下结果数量,如果超过500条,建议加上更多筛选条件,否则下载下来的序列质量参差不齐,后续处理很麻烦。
4. 数据上传与管理的避坑指南
4.1 怎么从NCBI下载自己上传的数据
这个问题在热搜里出现了,说明很多人遇到过。你上传数据到NCBI之后,过了一段时间想重新下载,但忘了登录号或者找不到入口。解决办法分几种情况。
如果你上传的是GenBank序列,提交成功后NCBI会给你一个登录号,同时发邮件到你注册的邮箱。翻邮件是最直接的办法。如果邮件找不到了,可以登录NCBI的Submission Portal,在“My Submissions”里能看到你所有的提交记录。
如果你上传的是SRA数据,登录SRA的Submission Portal,在“My Submissions”里能找到所有项目。每个项目有BioProject号(PRJNA开头)、BioSample号(SAMN开头)和SRA号(SRR开头)。用这些号可以在SRA数据库里检索到你的数据。
如果连账号都忘了,那就比较麻烦。可以尝试用当时提交时填写的邮箱去搜,或者联系NCBI的支持团队,提供提交时的详细信息,让他们帮你找回。
注意:NCBI的数据一旦公开,就很难完全删除。即使你申请撤稿,数据也会保留在历史记录里。所以上传之前一定要确认数据没问题,尤其是涉及人类样本的数据,要确保符合伦理规范。
4.2 数据上传前的自查清单
上传数据到NCBI之前,我建议过一遍这个清单:
- 序列是否去除了载体污染?用VecScreen跑一遍,把载体片段切掉。
- 测序峰图质量是否合格?低质量碱基(Q<20)要修剪或标注。
- 注释信息是否完整?至少要有物种名、基因名、序列类型。
- 人类样本数据是否去除了个人身份信息?NCBI对隐私保护很严格。
- 文件格式是否正确?GenBank用.GB格式,SRA用.sra格式,FASTA用.fa格式。
- 元数据是否填写完整?BioSample里的属性字段尽量填全,方便别人检索。
4.3 版本更新与数据同步
NCBI的数据库不是静态的,每天都有新数据加入,旧数据也可能被修订。如果你在做一个长期项目,需要定期同步NCBI的数据,有几个策略可以用。
对于小规模数据,可以定期手动下载更新。对于大规模数据,建议用NCBI的FTP站点做增量同步。NCBI的FTP站点按日期组织文件,你可以写一个脚本,每天检查新文件并下载。
# 示例:用wget镜像NCBI的RefSeq人类基因组目录 wget -r -np -nH --cut-dirs=3 -R "index.html*" \ https://ftp.ncbi.nlm.nih.gov/genomes/refseq/vertebrate_mammalian/Homo_sapiens/这个命令会递归下载人类RefSeq基因组目录下的所有文件,但排除index.html。实际使用时要根据需求调整路径和过滤条件。
实操心得:NCBI的FTP站点结构比较深,建议先用浏览器打开看看目录结构,确认路径正确再写脚本。另外,FTP站点的文件更新有延迟,通常比网页版晚1-2天。
5. 常见问题与排查技巧实录
5.1 搜索不到结果怎么办
这是新手最常遇到的问题。搜一个基因名,结果为零,或者出来的结果完全不相关。排查思路如下:
第一,检查搜索的数据库对不对。基因名要在Gene库里搜,序列要在Nucleotide库里搜,文献要在PubMed里搜。选错库等于白搜。
第二,检查物种限定。如果你搜“TP53”但不限定物种,出来的结果可能包含小鼠、大鼠、斑马鱼等各种物种。加上“Homo sapiens[Organism]”限定一下。
第三,检查基因名是否准确。有些基因有别名,比如TP53也叫P53、BCC7、LFS1。用别名再搜一次试试。
第四,检查是否有拼写错误。NCBI的搜索对拼写很敏感,一个字母错了就搜不到。
第五,如果还是搜不到,试试用登录号直接搜。如果你知道序列的登录号,直接输入登录号是最快最准的。
5.2 下载的序列和预期不符
有时候下载下来的序列长度不对,或者注释信息缺失。可能的原因:
- 下载的是部分序列(CDS区而不是全长mRNA)
- 下载的是基因组序列而不是mRNA序列
- 下载的是预测序列(XM_开头)而不是验证序列(NM_开头)
- 下载的是旧版本序列,NCBI已经更新了
解决办法:在序列记录页面仔细看“Definition”和“Comment”字段,确认序列的类型和版本。如果发现版本不对,在记录页面找“Previous Version”链接,可以查看历史版本。
5.3 BLAST结果全是低质量匹配
跑BLAST出来一堆E value很大的结果,或者Query cover很低。可能的原因和解决办法:
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
| 结果全是E value>1 | 序列太短或质量差 | 检查序列质量,调小Word size |
| Query cover<50% | 序列有重复区域或嵌合体 | 检查序列是否拼接错误 |
| 结果全是同一物种 | 数据库选择太窄 | 换nr库重新搜 |
| 没有结果 | 序列方向反了 | 用反向互补序列再搜一次 |
| 结果太多太杂 | 数据库太大 | 限定物种或换refseq库 |
5.4 页面加载慢或打不开
NCBI的服务器在国外,国内访问有时候确实慢。几个应对办法:
- 避开高峰时段,早上或深夜访问通常快一些
- 用NCBI的API接口而不是网页界面,API的响应速度通常更快
- 如果只是查序列,可以用国内的镜像站点,比如一些大学和研究所维护的NCBI镜像
- 批量下载用FTP而不是网页,FTP的稳定性更好
提示:NCBI的E-utilities API有请求频率限制,每秒不超过3次请求。批量操作时要在脚本里加延时,否则会被封IP。
5.5 登录号格式搞混了
NCBI的登录号有很多种格式,新手容易搞混。这里列一下常见的:
- NM_ / NR_ / NP_:RefSeq的mRNA、非编码RNA、蛋白质
- XM_ / XR_ / XP_:RefSeq的预测序列
- NC_ / NG_ / NT_ / NW_:RefSeq的基因组序列
- AC_ / CM_ / DS_ / GG_:GenBank的基因组序列
- SRR / ERR / DRR:SRA的测序读取
- GSE / GSM / GPL:GEO的数据集、样本、平台
- PRJNA / PRJEB / PRJDB:BioProject号
- SAMN / SAMEA:BioSample号
- rs:dbSNP的变异位点
- PMID:PubMed的文献编号
- PMC:PMC的全文编号
记住这些前缀,看到登录号就知道是什么类型的数据,能省很多时间。
6. 进阶技巧:让NCBI用起来更顺手
6.1 用My NCBI保存搜索策略
如果你经常搜同一个主题的文献或序列,建议用My NCBI功能保存搜索策略。登录NCBI账号后,在搜索结果页面点“Create alert”,可以设置定期自动搜索并邮件通知你新结果。做文献综述的时候特别有用,不用每天手动搜。
6.2 用Collections管理下载的数据
NCBI的Collections功能可以把你下载的序列、文献、变异位点组织成集合,方便后续查找和分享。比如你做一个项目,把相关的所有序列都加到一个Collection里,下次直接打开Collection就能看到全部数据,不用重新搜。
6.3 用Genome Workbench做本地分析
NCBI的Genome Workbench是一个免费的桌面软件,可以本地浏览基因组、做比对、可视化变异。如果你需要频繁查看基因组数据,装一个比每次开网页方便得多。它支持直接导入NCBI的登录号,自动从网上下载数据。
6.4 用Entrez Direct做自动化
Entrez Direct是NCBI官方提供的命令行工具集,包含esearch、efetch、elink、esummary等命令。用它可以写脚本自动化完成搜索、下载、格式转换等操作。比如你要下载某个物种的所有线粒体基因组:
esearch -db nucleotide -query "mitochondrion[Title] AND Homo sapiens[Organism] AND complete genome[Title]" \ | efetch -format fasta > human_mito.fasta这条命令会搜索人类完整的线粒体基因组序列,并以FASTA格式下载。比网页操作快得多,而且可以集成到更大的分析流程里。
6.5 数据格式转换的常用工具
从NCBI下载的数据格式可能和你的分析软件不兼容,需要转换。常用的转换工具:
- seqkit:处理FASTA/Q格式的瑞士军刀,支持统计、过滤、转换、拆分
- Biopython:Python的生物学数据处理库,可以读写GenBank、FASTA、PubMed等格式
- samtools:处理SAM/BAM格式的比对文件
- bedtools:处理BED格式的基因组区间文件
比如用seqkit统计一个FASTA文件的基本信息:
seqkit stats sequences.fasta输出会显示序列条数、总长度、平均长度、GC含量等信息,快速了解数据概况。
实操心得:从NCBI下载的GenBank格式文件,用Biopython读取后可以方便地提取CDS、翻译成蛋白质、计算密码子偏好性。我经常用这个流程做基因注释的批量处理。
7. 数据库设计思路的借鉴
虽然大部分人用NCBI只是查数据,但如果你做数据库开发,NCBI的设计思路很值得借鉴。
第一是分层设计。原始数据(GenBank)、参考数据(RefSeq)、衍生数据(dbSNP、GEO)分开存储,各司其职。这样既保证了原始数据的完整性,又提供了高质量的参考数据。
第二是统一标识符体系。每个实体都有唯一的登录号,不同数据库之间通过登录号关联。比如一个基因有Gene ID,它的mRNA有NM_号,蛋白质有NP_号,变异位点有rs号,这些号之间可以互相跳转。
第三是版本控制。NCBI的每条记录都有版本号,数据更新时版本号递增,旧版本保留可查。这对于科研的可重复性很重要。
第四是API优先。NCBI的所有功能都有对应的API接口,网页界面只是API的一个前端。这种设计让自动化处理成为可能。
如果你在设计自己的数据库,可以参考这几点:给每个实体分配唯一ID、建立实体之间的关联关系、保留版本历史、提供API接口。这些原则不管用什么数据库软件都适用。
8. 我个人的使用体会
用了这么多年NCBI,最大的感受是:它的功能远比大多数人想象的要多。很多人只用了它10%的功能,就以为已经掌握了。实际上,光是E-utilities这一套API,就够写好几篇教程。
另一个感受是,NCBI的文档其实很全,但藏得比较深。每个工具页面底部都有Help链接,点进去有详细的使用说明和参数解释。遇到问题先看官方文档,比在网上搜答案靠谱得多。
最后说一个省时间的技巧:把常用的搜索和下载操作写成脚本,存成别名或者函数。比如我在.bashrc里定义了一个函数,输入基因名和物种名就能自动下载对应的RefSeq序列。这种小工具积累多了,效率提升非常明显。
提示:NCBI的数据是公共资源,使用时要注意引用规范。发表文章时,如果用了NCBI的数据或工具,要在方法部分注明数据库名称、登录号和访问日期。这是基本的学术规范,也是对数据贡献者的尊重。