如何利用NR库快速进行物种鉴定

作者:charon
审稿:童蒙
编辑:angelica

引言

在做基因或者蛋白质功能注释的时候,NR数据库包含非常重要的信息。但是有没有人跟我一样遇到相同的苦恼,就是在运行的时候特别耗时,经过一番搜索后,发现可以根据实际数据建立自己的NR子库,这样运行效率将大幅提高。那么怎么创建NR子库呢,跟着我一起来做吧。

01 NR 数 据 库 介 绍

目前我们可以从很多数据库中获取蛋白质的序列信息,比如GenPept, Swissprot, PIR, PDF, PDB 和 NCBI RefSeq等。但是在这些数据库之间,蛋白质序列存在冗余性,为了解决这个问题,NCBI构建了一个非冗余的蛋白质序列数据库,即NR(non-redundant proteins)。

我们可以看到最新版的NR库是刚刚更新的,压缩后的文件存储已经达到了73G,这是相当恐怖的。跟着来建立自己的NR子库吧~

02 准 备 工 作

首先我们下载NR数据库及需要用到的软件。

2.1 下载NR数据库

https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/nr.gz
下载后需要解压,fasta格式文件,存放路径 mypath/nr 。
既然是非冗余数据库,那么NR数据库中序列合并必须同时满足以下两个原则:

  • 两条序列有相同的长度;
  • 两条序列上的每个残基都是相同的。

2.2 下载分类数据库

1 mkdir  mypath/taxdump
2 tar  -zxvf  mypath/taxdump.tar.gz   -C mypath/taxdump
  • taxdump 目录中有两个重要文件:
    names.dmp:记录物种名及其分类编号
    nodes.dmp:记录分类编号的分类节点信息

2.3 下载accession与taxid的对应关系

下载链接为:
https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/accession2taxid/prot.accession2taxid.gz
1gzip -dc prot.accession2taxid.gz >prot.accession2taxid

2.4 其他工具

03 构 建 命 令

我们以构建病毒子库为例,首先要知道病毒的tax id为10239,这个需要要先验知识,或者在taxdump/names.dmp文件中查找。

1.提取病毒包含的所有物种编号

1 mypath/taxonkit/taxonkit list -j 2 --ids 10239 --indent "" --data-dir mypath/taxdump/ >mypath/virus.list
这行命令运行很快,大概十秒钟,看下结果,总共提取出来205975个taxid。

-j ,线程,给2足以;
--ids,需要提取的分类的taxid;
--data-dir,该目录下必须包含文件names.dmp和nodes.dmp;
--indent,提取的物种编号缩进位置,这个参数很重要,记得一定要设置为空 ""

2.根据taxid获取对应accession.version

1 zcat mypath/prot.accession2taxid.gz | mypath/csvtk/csvtk -t grep -f taxid -P mypath/virus.list | mypath/csvtk/csvtk -t cut -f accession.version > mypath/virus.taxid.acc.txt
这一步运行也比较快,我这不到10分钟就运行结束了,这一步提取出来的accession就能对应到NR数据库中的标识符,总共提取出来了6065494行数据。

很显然这个数目比上一步taxid的数目多了很多,这是因为一个accession可能会对应多个taxid,这个我们在mypath/prot.accession2taxid.gz 中就可以看到。

3.NR数据库建索引

1 mypath/ncbi-blast/bin/makeblastdb -in nr -dbtype prot -parse_seqids
建索引的步骤非常耗时,可能会花费好几个小时,需要耐心等待。

4.提取NR子库

1 mypath/ncbi-blast/bin/blastdb_aliastool -seqidlist mypath/virus.taxid.acc.txt -db nr -out nr_virus -title nr_virus
最后这一步也会比较耗时,大概运行了2个多小时。运行结束后只生成了文件 mypath/nr_virus.pal,不要怀疑自己,确实只生成一个文件。

04 功 能 注 释

对于NR数据库,一般都是blast直接比对,获取基因或者蛋白质的功能注释信息,更近一步,如果有Taxonomy 数据库的数据,我们还可以做物种注释。

接下来我们试试用提取的病毒子库做功能注释吧,测试数据我选取了100条蛋白质序列,命名为test.fa。

运行命令:
1 mypath/ncbi-blast/bin/blastp -query mypath/test.fa -db mypath/nr_virus -evalue 1e-5 -num_alignments 5 -outfmt 6 -out mypath/test.blastp.out

运行结果是m8格式的文件如下图:

该文件包含12列,每列信息简单介绍如下:

  1. qseqid:查询序列ID标识
  2. sseqid:比对上的目标序列ID标识
  3. pident:序列比对的一致性百分比
  4. length:符合比对的比对区域的长度
  5. mismatch:比对区域的错配数
  6. gapopen:比对区域的gap数目
  7. qstart:比对区域在查询序列(qseqid)上的起始位点
  8. qend:比对区域在查询序列(qseqid)上的终止位点
  9. sstart:比对区域在目标序列(sseqid)上的起始位点
    10.send:比对区域在目标序列(sseqid)上的终止位点
    11.evalue:比对结果的期望值,evalue越小,越有可能是真实的相似序列
    12.bitscore:比对结果的bit score值

注 意 ! ! !

  • 因为我们用的ncbi-blast+中的blastp,-outfmt 要设置为6,如果你用的是blast中的blastp工具,要设置 -m 8;
  • 一般我们比较关注第3、11、12列信息;
  • 一条序列比对可能有多条结果,我们可以按照bitscore筛选得分最高的一条即可。

子库运行时间不到50分钟,而选择整个NR数据库比对时,将近4个小时才结束,很显然,选择子库比对大大提升了比对效率。因此,如果我们对研究的物种比较确定,提取子库再进行比对,将会提升运行效率降低集群压力。

05 物 种 注 释

5.1 合并物种分类文件

names.dmp,nodes.dmp 这两个文件的内容我们上文已经介绍过,现在我们先来处理一下。将这两个文件的信息整合在一起,便于后续应用。

这里介绍网上一个脚本,首先运行
1 git clone https://gitee.com/wangshun1121/TaxonomyPickUp.git
命令后会在当前路径下生成目录mypath/TaxonomyPickUp/,然后将names.dmp,nodes.dmp 两个文件拷贝到目录mypath/TaxonomyPickUp/。
最后运行
1 perl NodeExtract.pl >TaxInfo.txt
大概一两分钟就得到结果,它存储了NCBI的Taxonomy物种分类的详细层级信息,格式如下:

  • 第一列为TaxID,
  • 第二列为该TaxID的拉丁学名。
  • 第三列表示该TaxID所处的层级:即经过追溯多少次Parents到达分类级别的最高层级。
  • 第四列则是TaxID向上追溯的详细信息。不同分类层级之间以“-”间隔,最左边为该TaxID代表的层级,例如7 “Azorhizobium caulinodans”表示species,其上一级的TaxID为6,层级为genus,再向上为335928的family,依次类推。

5.2 进行物种注释

比对之后我们可以继续做物种分类注释,需要用到上一步blastp的结果,prot.accession2taxid.gz,names.dmp,nodes.dmp 这几个文件了。接下来,我们只需要写个简单的脚本,就能从blastp比对结果mypath/test.blastp.out获取每条reads对应的物种分类信息了。这里简单说下逻辑:

    1. 从mypath/test.blastp.out文件前两列获取reads id 和accession对应关系;
    1. prot.accession2taxid.gz文件包含accession和taxid的对应关系,结合1可以得到每条reads id和taxid的对应关系;
    1. 上述TaxInfo.txt包含了taxid和物种的对应关系,结合2就能获取reads id和物种的关系了,还可以方便筛选所有层级的分类单位。

通过这个详细的描述,相信大家都已经掌握了整个过程,快动手试试吧。

参 考 资 料
https://gitee.com/wangshun1121/TaxonomyPickUp/tree/master
https://ftp.ncbi.nlm.nih.gov

该文来源于“生信阿拉丁”,关注公众号,第一时间查收“新款”生信学习干货。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335