宏基因组之物种注释(基于nr库)

昨天下午捣鼓了一下宏基因组物种注释过程(基于nr库),现在将整个流程记录一下。
软件需求:blast,diamond,taxonkit(安装自行百度)

构建细菌子库

blast方法可能会准确点,但是它的速度简直让我怀疑人生,俩种软件的方法我都说下吧,因为我比对的主要是细菌,我首先想到是干脆按照网上的方法构建一个细菌的子库可能速度会更快点~
说干就干

参考连接:https://www.bioinfo-scrounger.com/archives/207/;
https://bioinf.shenwei.me/taxonkit/tutorial/

我最初想法是构建一张表,第一列是taxid,后面7列跟着门纲目科属种的名称,这样的话我们根据比对结果中的taxid,就直接可以得到物种各层级的信息,相信这也是大多数人的想法,就像下图这样:


图片.png

这里我们就可以使用taxonkit这个好轮子去方便的达成这一目的,代码如下:

1.#输出细菌的taxid
 taxonkit list --ids 2 --indent "" > bacteria.taxid.txt 
#33090为植物 2为细菌 2157为Archaea;10239 为Viruses;Eukaryota为2759;Fungi 4751
#有时间的话可以将这几大类的id全都整合在一起,形成一张表
2.less bacteria.taxid.txt|taxonkit lineage |taxonkit reformat -f "{k}\t{p}\t{c}\t{o}\t{f}\t{g}\t{s}" -F |cut -f 1,3- | sed '1i\Taxid\tKingdom\tPhylum\tClass\tOrder\tFamily\tGenu\tSpecies' > Bacteria_taxid_Ano.txt

OK,现在已经得到了这张表,接下来我们就要去比对,得到每个基因的taxid

先来构建细菌子库吧

需要文件:
ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/accession2taxid/prot.accession2taxid.gz 蛋白acc号和taxid对应文件
方法参考自爪哥文档:https://bioinf.shenwei.me/taxonkit/tutorial/

#还是像上面那样先得到细菌的taxid
taxonkit list --ids 2 --indent "" > bac.taxid.txt
#得到bac.taxid.acc.txt文件  
zcat prot.accession2taxid.gz |csvtk -t grep -f taxid -P bac.taxid.txt |csvtk -t cut -f accession.version >bac.taxid.acc.txt 

Option 1 :
#直接构建(速度慢)
blastdbcmd -db /home/software/nr-2019-12-18/nr -entry_batch bac.taxid.acc.txt -out - | pigz -c > nr.$id.fa.gz

Option 2: 
#用blast配套工具(这里要注意blastdb_aliastool版本 低版本没有seqidlist) 这步结果就只有一个pal文件
blastdb_aliastool -seqidlist bacteria.taxid.acc.txt -db /home/software/nr-2019-12-18/nr -out nr_bac -title nr_bac  

Option 3:
#采用了分割并行的策略加上爪哥自己写的脚本,速度更加快,建议大家去看爪哥的源文档,这里不再赘述.

序列比对

blastp

我们拿上面Option2得到的文件去进行比对,命令行如下:

blastp -query NR100pro.fasta -db /home/pub_guest/db/nr/nr_bac -out D1_nr.out -outfmt "6 qseqid qgi qacc qaccver qlen sseqid qseq sseq evalue  score length pident  staxids sscinames salltitles " -num_threads 16 -evalue 1e-5 -num_alignments 5
 #记得结果加上 staxid 得到物种taxid信息

diamond

由于索引库不兼容,我们将blastcmd抽提出来的nr库,用diamond先构建索引库
要想得到taxid和种名信息,需要构建的时候额外增加俩个参数--taxonmap和--taxonnodes
1是我们上述说的 蛋白acc号和taxid的对应文件prot.accession2taxid.gz
2是存储有taxonomy数据库的层级文件taxdmp.zip
注意wget的时候会出现连接超时情况,多等几次即可.

diamond makedb --in nr.fa -d Dimond_nr --taxonmap prot.accession2taxid.gz --taxonnodes nodes.dmp  
(#nodes.dmp文件是taxdmp.zip压缩包内的文件,这个地方直接跟这个文件即可,否则建库不完整)
#比对
diamond blastp -p 8 --db Dimond_nr  -q NR100pro.fasta --outfmt 6 qseqid sseqid pident length qlen mismatch gapopen qstart qend evalue bitscore staxids stitle salltitles --max-target-seqs 5 -e 1e-5 -o NR.out

补充一点
我们可以先将有taixd也有种名信息的提取出来,过滤掉没有taxid和种名信息的基因,因为文件结果中可能会出现一种情况是该基因比对结果没有taxid,但是后面匹配到了种名信息,这时候我们再来用taxonkit这个软件根据种名去得到这些物种的taixid,这样我们的结果里会多一点,这时候还没有匹配到taxid的再将其过滤掉。
这里我将脚本贴出来

#!usr/bin env python
import re
import sys
#根据nr结果1,12,13列信息提取taxid,种名
input_file = sys.argv[1]
fr = open(input_file,'r')

pattern = "\[[^\]]+"
regexp = re.compile(pattern)

for line in fr:
        line = line.strip()
        gene = line.split('\t')[0]
        taxid = line.split('\t')[1]
        if '[' not in line.split('\t')[2]:
                sth = ''
        else:
                sth = regexp.findall(line.split('\t')[2])[0]
        print(f"{gene}\t{taxid}\t{sth}")
fr.close()

好了,上面两种软件得到结果都会有taxid信息和种名了,由于是比对的子库文件,速度也会有所提升,我们可以拿着taxid去匹配最后那张表的信息就能匹配种水平上面几个层级的taxonomy的信息,或者好好利用taxonkit这个好轮子也是可以得到的~~~

下面是刚创建个人公众号,会定时更新R、linux、python,组学方面的学习内容,请多多支持呦~~


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

推荐阅读更多精彩内容