资讯详情

资讯详情

NCBI数据库使用全攻略:从序列检索到批量下载与格式转换

1. NCBI数据库到底能帮你解决什么问题刚进实验室那会儿导师扔给我一个任务把某个基因在所有物种里的同源序列找出来做进化树。我当时的第一反应是打开搜索引擎结果翻了十几页也没找到能直接下载的序列文件。后来师兄看不下去了甩给我一个网址说“你去NCBI上搜”。那是我第一次接触这个数据库也是第一次意识到做生物信息这行NCBI就像空气一样平时感觉不到一旦缺了它什么都干不了。NCBI的全称是美国国家生物技术信息中心它维护着全球最大的公共生物序列数据库。你可以把它理解成一个巨型图书馆里面存放着几十年来全球科研人员上传的基因序列、蛋白质结构、文献摘要、物种分类信息等等。对于做分子生物学、基因组学、进化分析的人来说这里就是取数据的第一站。不管你是要下载一条基因序列做引物设计还是要批量获取某个物种的全部蛋白质序列做注释NCBI都能满足你。但问题在于这个“图书馆”太大了入口多、检索逻辑复杂、数据格式五花八门。新手进去很容易迷路搜出来的东西要么不是自己想要的要么下载下来打不开。我见过太多人花了半天时间在NCBI上瞎点最后导出的文件格式不对还得重来。所以这篇内容就是把我这些年用NCBI的经验整理出来从最基础的检索到批量下载再到数据格式转换和常见报错处理一步步说清楚。不管你是刚接触生物信息的学生还是需要经常查序列的实验人员都能直接照着操作。2. 核心数据库模块与检索逻辑拆解2.1 几个必须搞清楚的子库分工NCBI不是一个单一数据库它下面挂着几十个不同的子库每个库的用途和检索方式都不一样。新手最容易犯的错误就是在错误的库里搜东西然后抱怨“怎么搜不到”。我先把最常用的几个库拎出来说清楚。Nucleotide核酸数据库是使用频率最高的一个里面存的是DNA和RNA序列。你如果要做引物设计、序列比对、找某个基因的CDS区都来这里搜。它又细分为GenBank、RefSeq、EST等多个子集。GenBank是原始提交数据什么都有质量参差不齐RefSeq是经过人工审核的参考序列质量高但数量少。我一般优先看RefSeq找不到再退回GenBank。Protein蛋白质数据库存的是氨基酸序列。你做蛋白结构预测、保守域分析、同源比对的时候会用到。和Nucleotide一样它也分GenBank和RefSeq两个主要来源。需要注意的是同一个基因的核酸序列和蛋白序列在NCBI上是分开存储的但通过Gene ID可以关联起来。Gene基因数据库是我个人最推荐新手先用的库。它把同一个基因的核酸序列、蛋白序列、基因组位置、变异信息、相关文献全部整合在一个页面上。你搜一个基因名出来的结果页信息非常全不用在多个库之间来回跳。比如你搜“TP53”Gene库会直接告诉你这个基因在染色体上的位置、有多少个转录本、每个转录本的序列长度、对应的蛋白产物是什么。PubMed文献数据库严格来说不属于序列数据库但它是NCBI生态里不可或缺的一部分。你查一个基因的功能、找实验方法、看别人怎么设计引物都离不开它。PubMed的检索语法和前面几个库不太一样后面我会单独讲。SRASequence Read Archive是存高通量测序原始数据的库。如果你要做转录组分析、重测序分析需要从这里下载fastq文件。SRA的数据量非常大下载方式也和普通序列不同需要用专门的工具。Taxonomy物种分类数据库是查物种分类信息的。你做进化树的时候需要知道物种的拉丁名和分类地位就来这里查。它和前面几个库是联动的你在Nucleotide里搜到一条序列点进去就能看到它对应的物种分类信息。2.2 检索语法别只会输关键词很多人用NCBI就是直接在搜索框里打一个基因名然后回车。这样能搜到东西但效率极低而且结果里混着大量不相关的内容。NCBI支持一套非常强大的检索语法学会之后你的检索效率至少提升三倍。最基本的语法是字段限定。比如你只想搜人类TP53基因的mRNA序列可以这样写TP53[Gene Name] AND human[Organism] AND mRNA[Filter]方括号里的内容就是字段名。常用的字段包括字段标识含义示例[Gene Name]基因名称TP53[Gene Name][Organism]物种名称human[Organism][Title]标题中包含的词cancer[Title][Accession]序列登录号NM_000546[Accession][Molecular Weight]分子量范围50000:100000[Molecular Weight][Sequence Length]序列长度范围1000:5000[Sequence Length]布尔运算符是另一个必须掌握的东西。AND表示同时满足OR表示满足其一NOT表示排除。比如你要搜人类或小鼠的TP53序列TP53[Gene Name] AND (human[Organism] OR mouse[Organism])注意括号的使用它决定了运算优先级。不加括号的话检索逻辑可能会和你预期的不一样。还有一个很实用的技巧是通配符。星号*可以匹配任意字符比如TP5*[Gene Name]会匹配TP53、TP54、TP55等所有以TP5开头的基因名。问号?匹配单个字符。但通配符不要滥用否则会拖慢检索速度而且结果可能过于宽泛。2.3 结果页面的信息解读搜出来结果之后很多人只看标题就决定下不下这样很容易下错。结果列表里其实有很多关键信息我一般会重点看这几列Accession号是序列的唯一标识符相当于身份证号。NM_开头的代表mRNA参考序列NR_开头的代表非编码RNA参考序列NP_开头的代表蛋白参考序列XM_和XP_开头的代表预测序列。记住这些前缀你一眼就能判断这条序列的性质。Length列显示序列长度。如果你要找某个基因的全长CDS结果里只有几百bp的序列大概率是片段不是全长。Organism列显示物种来源。做跨物种分析的时候要特别注意别把不同物种的序列混在一起。Description列是序列的描述信息通常包含基因名、转录本变体编号、是否完整CDS等信息。比如“Homo sapiens tumor protein p53 (TP53), transcript variant 1, mRNA”就说明这是人类TP53基因的转录本变体1的mRNA序列。点进具体条目之后页面顶部会显示序列的详细信息包括提交日期、更新日期、参考文献、注释信息等。我一般会先看CDS区域是否标注完整如果标注了CDS说明这条序列有明确的编码区信息可以直接用来做翻译。如果没标注可能需要自己预测。3. 从检索到下载的完整实操流程3.1 单条序列的下载与格式选择找到目标序列之后下载操作本身很简单点页面右上角的“Send to”按钮就行。但格式选择有讲究选错了后面还得转换。最常用的三种格式是FASTA、GenBank和GFF3。FASTA格式最简单只有序列本身和一行描述信息适合直接拿去做比对或引物设计。GenBank格式包含完整的注释信息包括CDS位置、外显子边界、翻译产物等适合需要保留注释信息的场景。GFF3格式是专门用来描述基因组注释的做基因组分析时用得多。我个人的习惯是如果只是要序列本身下FASTA如果需要知道CDS的起止位置下GenBank如果是做基因组层面的分析下GFF3。下载的时候注意选择“Show CDS”或“Show transcript”选项这决定了序列是包含内含子还是只有外显子。注意下载FASTA格式时默认的序列行宽是70个字符。如果你用的分析软件对行宽有要求可以在下载选项里调整。有些老旧的软件对行宽很敏感行宽不对会直接报错。3.2 批量下载多条序列的两种方案单条下载谁都会但如果你需要下载几百条序列一条条点就太蠢了。NCBI提供了两种批量下载的方案我分别说一下适用场景。方案一使用“Send to”的批量功能。在搜索结果页面勾选多条序列然后点“Send to”选择“File”再选择格式。这种方式适合下载几十条以内的序列操作直观不需要额外工具。但缺点是如果结果超过几百条网页会卡而且勾选操作本身也很繁琐。方案二使用NCBI的E-utilities接口。这是我最推荐的方式适合批量下载几百到几万条序列。E-utilities是NCBI提供的一套API通过URL请求就能获取数据。基本用法是这样的# 搜索并获取符合条件的序列ID列表 esearch -db nucleotide -query TP53[Gene Name] AND human[Organism] | \ # 获取这些序列的FASTA格式 efetch -format fasta tp53_sequences.fasta这两行命令需要安装NCBI的Entrez Direct工具包。安装方法很简单Linux下直接下载解压就行# 下载Entrez Direct curl -O https://ftp.ncbi.nlm.nih.gov/entrez/entrezdirect/edirect.tar.gz # 解压 tar -xzf edirect.tar.gz # 添加到环境变量 export PATH$PATH:$PWD/edirect安装好之后你就可以用esearch、efetch、elink等命令组合出非常灵活的检索和下载流程。比如你要下载某个物种所有线粒体基因的序列esearch -db nucleotide -query mitochondrion[Filter] AND human[Organism] | \ efetch -format fasta human_mito.fasta这种方式的好处是可以写进脚本里自动化处理。我经常用它来批量下载不同物种的同一基因序列然后直接喂给比对软件。实操心得使用E-utilities的时候一定要注意请求频率。NCBI对API调用有频率限制每秒不要超过3次请求。如果你要下载大量数据建议在请求之间加sleep比如sleep 0.5。否则你的IP可能会被临时限制那就得不偿失了。3.3 SRA原始数据下载的注意事项SRA数据的下载和普通序列完全不同。普通序列是文本文件SRA数据是二进制格式需要用专门的工具转换。最常用的工具是SRA Toolkit里面包含prefetch和fastq-dump两个核心命令。下载流程分两步先用prefetch把SRA文件下载到本地再用fastq-dump把SRA格式转换成fastq格式。# 下载SRA数据 prefetch SRR1234567 # 转换为fastq格式 fastq-dump --split-files SRR1234567.sra--split-files参数用于双端测序数据会把read1和read2分开输出。如果是单端数据不加这个参数就行。SRA数据文件通常很大一个转录组样本的SRA文件可能有几个GB。下载之前一定要确认磁盘空间够用。另外fastq-dump转换过程也比较耗时建议在服务器上跑不要在自己的笔记本上折腾。常见坑fastq-dump默认会把所有read都输出到一个文件里如果你做的是双端测序一定要加--split-files否则后续比对软件会报错。另外有些SRA数据是经过压缩的fastq-dump可以直接处理不需要额外解压。4. 数据格式转换与常见报错处理4.1 GenBank转FASTA不只是去掉注释GenBank格式和FASTA格式之间的转换看起来简单但实际操作中有几个细节容易出错。最直接的方法是使用seqkit或biopython这样的工具。用seqkit转换seqkit seq -w 0 input.gb -o output.fasta-w 0参数表示不限制行宽所有序列输出为一行。如果你需要指定行宽比如60个字符就改成-w 60。用biopython转换from Bio import SeqIO with open(input.gb, r) as handle: records SeqIO.parse(handle, genbank) with open(output.fasta, w) as out: SeqIO.write(records, out, fasta)这两种方法都能用但有一个关键区别seqkit转换出来的FASTA只保留序列本身不保留注释信息biopython转换出来的FASTA会保留描述行但注释信息比如CDS位置也会丢失。如果你需要保留CDS信息就不能转成FASTA得用GenBank格式或者提取CDS区域单独输出。提取CDS区域的biopython代码from Bio import SeqIO with open(input.gb, r) as handle: for record in SeqIO.parse(handle, genbank): for feature in record.features: if feature.type CDS: cds_seq feature.extract(record.seq) print(f{record.id}_CDS) print(cds_seq)这段代码会把GenBank文件中所有标注为CDS的区域提取出来单独输出为FASTA格式。做进化分析的时候经常需要这样处理。4.2 常见报错与排查速查表用NCBI数据的过程中报错是家常便饭。我整理了一份常见问题速查表遇到问题可以先对照排查。报错信息可能原因解决方法“No items found”检索词太严格或字段限定错误放宽检索条件去掉部分字段限定下载的FASTA序列为空序列被撤回或权限受限检查Accession号是否有效尝试其他版本fastq-dump报“file not found”SRA文件未下载完整重新用prefetch下载检查磁盘空间序列比对时报“duplicate seq names”下载的序列描述行重复用seqkit rename重命名序列GenBank文件解析报错文件格式不标准或版本不兼容用biopython的SeqIO.parse重新解析E-utilities返回“429 Too Many Requests”请求频率过高增加sleep间隔降低请求频率序列长度和预期不符下载的是片段而非全长检查结果页面的Length列选择全长序列翻译后出现终止密码子序列阅读框不对或包含内含子确认下载的是CDS序列而非基因组序列4.3 序列去重与重命名批量下载的序列经常出现重复或命名混乱的问题。比如你下载了同一个基因在不同物种中的序列描述行可能都是“TP53 mRNA sequence”没有物种信息后续分析根本分不清哪条是哪条。用seqkit可以快速解决这个问题# 去重 seqkit rmdup -s input.fasta -o dedup.fasta # 重命名用Accession号作为序列名 seqkit replace -p .* -r {kv} input.fasta -o renamed.fasta更灵活的方式是用seqkit的fx2tab功能先把序列信息导出成表格处理之后再导回去# 导出为表格 seqkit fx2tab input.fasta seq_info.tsv # 用awk处理表格提取Accession号和物种名 awk -F\t {split($1,a, ); print a[1]\t$0} seq_info.tsv processed.tsv # 导回FASTA seqkit tab2fx processed.tsv final.fasta这套流程我用了很多年处理几千条序列也就几秒钟的事。关键是要理解seqkit的fx2tab和tab2fx这对命令它们相当于在FASTA和表格之间架了一座桥让你可以用awk、sed这些文本处理工具来操作序列信息。实操心得重命名序列的时候建议保留Accession号作为序列名的一部分。Accession号是唯一的不会重复而且以后需要查原始信息的时候可以直接用Accession号去NCBI搜。我一般会把序列名格式化成“Accession_Species_GeneName”这样的形式既唯一又信息完整。5. 高频使用场景与效率提升技巧5.1 引物设计前的序列获取与验证做实验的人最常问的一个问题就是“我要设计引物序列从哪来”答案是从NCBI的Nucleotide库或者Gene库获取。但获取之后不能直接用必须先验证。验证的第一步是确认序列的方向。NCBI上的序列默认是5‘到3’方向但有些基因在基因组上的位置是反义的下载下来的序列可能是反向互补的。你可以用seqkit的seq命令查看序列或者用revcomp命令做反向互补# 反向互补 seqkit seq -r -p input.fasta revcomp.fasta验证的第二步是确认CDS的完整性。如果序列的CDS区域不完整设计出来的引物可能扩增不出目的条带。在GenBank格式的文件里CDS区域会标注为CDS你可以检查它的起始位置是否包含起始密码子ATG终止位置是否包含终止密码子。验证的第三步是跨外显子设计。如果你要做RT-PCR引物最好跨两个外显子这样可以从mRNA中扩增出目的条带而基因组DNA中因为含有内含子扩增产物会更大或者扩增不出来从而区分基因组污染。NCBI的Gene库会显示基因的外显子结构你可以根据外显子边界来设计引物。5.2 同源序列批量获取与进化分析准备做进化分析的时候你需要获取同一个基因在多个物种中的同源序列。手动一个个搜效率太低我一般用E-utilities配合脚本批量处理。基本思路是先确定要分析的物种列表然后对每个物种分别检索目标基因最后把所有序列合并到一个FASTA文件里。#!/bin/bash # 物种列表 species(human mouse rat zebrafish drosophila) # 目标基因 geneTP53 for sp in ${species[]}; do esearch -db nucleotide -query ${gene}[Gene Name] AND ${sp}[Organism] AND RefSeq[Filter] | \ efetch -format fasta ${gene}_all_species.fasta sleep 1 done这个脚本会依次检索每个物种的TP53 RefSeq序列追加到同一个FASTA文件里。RefSeq[Filter]确保只获取参考序列质量更有保障。sleep 1是为了控制请求频率避免被限制。获取完序列之后下一步是做多序列比对。常用的工具是Clustal Omega或MAFFT。NCBI自己也提供在线比对工具但序列多了之后在线工具会很慢建议用命令行版本。# 用MAFFT做多序列比对 mafft --auto ${gene}_all_species.fasta ${gene}_aligned.fasta比对完成之后就可以用MEGA或IQ-TREE构建进化树了。整个过程从序列获取到比对完成熟练的话十分钟就能搞定。5.3 用Gene库快速获取基因全景信息如果你刚接触一个基因想快速了解它的基本信息我强烈建议从Gene库入手。Gene库的页面整合了基因的基因组位置、转录本、蛋白产物、变异信息、相关疾病、参考文献等所有信息相当于一个基因的“主页”。在Gene库搜到目标基因后页面左侧有一个“Contents”导航栏可以快速跳转到不同板块。我一般会重点看这几个部分Genomic context显示基因在染色体上的位置和邻近基因。做拷贝数变异分析或者研究基因簇的时候很有用。**mRNA and Protein(s)**列出该基因的所有转录本和对应的蛋白产物。你可以看到每个转录本的序列长度、外显子数量、蛋白长度。做引物设计的时候要选择表达量最高的转录本作为参考。Expression显示基因在不同组织中的表达情况。虽然数据来源有限但可以作为参考。Pathways显示基因参与的代谢通路和信号通路。做功能分析的时候很有帮助。Orthologs显示该基因在其他物种中的同源基因。做跨物种分析的时候可以直接从这里跳转。Gene库最大的价值在于它把分散在各个子库中的信息整合到了一起你不需要在Nucleotide、Protein、Taxonomy之间来回跳转。对于新手来说这是了解一个基因最快的方式。5.4 检索效率提升的五个实用技巧用了这么多年NCBI我总结了几个能显著提升效率的技巧都是踩过坑之后摸索出来的。技巧一用Accession号直接定位。如果你已经知道序列的Accession号直接在搜索框输入Accession号回车就能跳到对应页面比搜基因名快得多。Accession号可以从文献、数据库注释文件、或者之前的分析结果里获取。技巧二善用“History”功能。NCBI会记录你的检索历史在搜索结果页面点“History”可以看到之前的所有检索记录。你可以用#1、#2这样的编号来引用之前的检索结果组合出更复杂的检索式。比如#1 AND #2就是把第一次和第二次的检索结果取交集。技巧三用“Limits”面板快速筛选。搜索结果页面左侧有“Limits”面板可以按物种、序列类型、分子量范围等条件快速筛选。比手动改检索式方便得多适合不熟悉检索语法的新手。技巧四收藏常用检索式。如果你经常需要检索同一类序列可以把检索式保存下来。NCBI支持把检索式保存到My NCBI账户里下次直接调用就行。技巧五用“Related information”跳转。在序列详情页面右侧有“Related information”栏可以跳转到该序列对应的Gene页面、Protein页面、PubMed文献等。做交叉检索的时候非常方便。常见坑很多人不知道NCBI的搜索结果默认是按相关性排序的但有时候按日期排序或者按长度排序更符合需求。在结果页面右上角可以切换排序方式。我找最新提交的序列时一般会按日期降序排列找全长序列时会按长度降序排列。6. 数据管理与后续分析衔接6.1 本地序列数据库的建立与维护如果你经常需要检索同一批序列每次都去NCBI搜效率太低。更好的做法是把常用序列下载到本地建立一个本地序列数据库。最简单的方式是用seqkit或blast自带的makeblastdb命令建立BLAST数据库# 建立BLAST核酸数据库 makeblastdb -in local_sequences.fasta -dbtype nucl -out local_db # 用本地数据库做BLAST blastn -query query.fasta -db local_db -out results.txt建立本地数据库的好处是检索速度快不受网络限制而且可以自定义序列集合。比如你可以把某个物种的所有基因序列下载下来建一个本地库以后做任何分析都可以先在这个库里搜。维护本地数据库的关键是版本管理。NCBI的数据是不断更新的你今天下载的序列下个月可能就有更新版本了。我一般会在文件名里加上下载日期比如human_TP53_20250101.fasta这样过一段时间就知道哪些数据需要更新了。6.2 从NCBI到下游分析工具的衔接NCBI下载的数据最终要喂给下游分析工具不同工具对输入格式的要求不一样。我整理了一个常用工具对输入格式的要求对照表分析工具推荐输入格式注意事项BLASTFASTA序列名不要有特殊字符MAFFTFASTA支持多序列序列名需唯一IQ-TREEFASTA/PHYLIPPHYLIP格式对序列名长度有限制Bowtie2FASTA参考序列需要建立索引HISAT2FASTA需要先做基因组索引StringTieGTF/GFF需要注释文件DESeq2计数矩阵需要先做比对和定量从NCBI下载的数据最常见的问题是序列名不规范。FASTA格式的描述行里可能包含空格、括号、逗号等特殊字符有些工具解析不了。我一般会用seqkit replace把序列名统一成“Accession号”的形式去掉所有特殊字符。# 把序列名替换为Accession号 seqkit replace -p ^(\S).* -r \$1 input.fasta -o clean.fasta这条命令会把描述行里第一个空格之前的内容作为序列名后面的全部去掉。这样处理之后序列名就干净了所有工具都能正常解析。6.3 数据备份与版本追踪最后说一个容易被忽视但很重要的问题数据备份。NCBI的数据虽然公开但偶尔也会有序列被撤回或更新。如果你做分析的时候用的是旧版本序列后来序列更新了你的分析结果可能就无法复现。我的做法是每次从NCBI下载数据之后把原始文件、下载日期、检索式记录在一个文本文件里和序列文件放在同一个目录下。这样过几个月回头看还能知道当时用的是什么数据、怎么检索的。# download_log.txt Date: 2025-01-15 Database: NCBI Nucleotide Query: TP53[Gene Name] AND human[Organism] AND RefSeq[Filter] Format: FASTA Number of sequences: 15 File: human_TP53_20250115.fasta这个习惯看起来不起眼但在写论文的方法部分或者回复审稿人问题的时候能帮你快速找到数据来源。我吃过亏有一次审稿人问某个序列的具体版本我翻了半天才找到后来就养成了记录的习惯。另外对于特别重要的分析项目建议把原始数据备份到两个不同的地方。NCBI的数据虽然不会消失但下载链接可能会变Accession号可能会更新。本地备份一份心里踏实。6.4 关于NCBI使用的一些个人体会写了这么多最后分享几点个人体会。NCBI的功能远比我这里介绍的要多比如还有BLAST在线比对、Primer-BLAST引物设计、Genome Workbench桌面工具等等。但核心的使用逻辑是一样的搞清楚你要找什么选对数据库用对检索语法注意数据格式做好记录和备份。我见过很多新手在NCBI上花了很多时间却效率很低根本原因不是工具不好用而是没有建立起一套系统的工作流程。每次都是临时搜、临时下、临时处理没有积累。我的建议是花点时间把你常用的检索式和下载流程整理成脚本以后每次用的时候改几个参数就行。前期投入半小时后期能省几十个小时。还有一个建议是不要只依赖NCBI。虽然它是最大的公共数据库但有些特定领域的数据可能在其他数据库里更全。比如做植物基因组分析Ensembl Plants可能更方便做微生物分析IMG/M可能更专业。NCBI是起点但不是终点。根据你的具体需求灵活选择最合适的数据库才是高效工作的关键。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →