生信常用数据库(四):NR数据库分类搭建
前言
因为完整的NR数据库下载下来后数据量非常庞大,在我们做序列比对的时候,尤其是很多很大的序列比对的时候,特别消耗计算资源和内存,最重要的是很耽误分析的周期,因此将NR数据库拆开搭建是必要的,小编这里拆为动物(animal)、植物(plant)、微生物(micro)
下载
分类搭建需要下载两部分,一部分为NR数据库,另一部分为Taxonomy数据库下载,Taxonomy有两个文件prot.accession2taxid和taxdump
(一)NR数据库下载:Index of /blast/db/FASTA #ascp使用见NCBI数据下载工具:aspera的安装与使用 - 简书
ascp -i ~/asperaweb_id_dsa.openssh -QTr -l500m anonftp@ftp.ncbi.nlm.nih.gov:/blast/db/FASTA/nr.gz ./ #下载
ascp -i ~/asperaweb_id_dsa.openssh -QTr -l500m anonftp@ftp.ncbi.nlm.nih.gov:/blast/db/FASTA/nr.gz.md5 ./ #下载
md5sum -cnr.gz.md5 #验证MD5值
gunzip -c nr.gz >nr.fa #解压
(二)prot.accession2taxid下载地址 ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/accession2taxid/prot.accession2taxid.gz
ascp -i ~/asperaweb_id_dsa.openssh -QTr -l500m anonftp@ftp.ncbi.nlm.nih.gov:/pub/taxonomy/accession2taxid/prot.accession2taxid.gz ./ #下载
ascp -i ~/asperaweb_id_dsa.openssh -QTr -l500m anonftp@ftp.ncbi.nlm.nih.gov:/pub/taxonomy/accession2taxid/prot.accession2taxid.gz.md5 ./ #下载
md5sum -c prot.accession2taxid.gz.md5 #验证MD5值
gunzipprot.accession2taxid.gz #解压
该文件格式如下,accession.version对应nr.fa中的序列ID,taxid对应axdump中nodes.dmp文件第一列的ID,之后会用到
(三)axdump下载地址:
ascp -i ~/asperaweb_id_dsa.openssh -QTr -l500m anonftp@ftp.ncbi.nlm.nih.gov:/pub/taxonomy/taxdump.tar.gz ./ #下载
ascp -i ~/asperaweb_id_dsa.openssh -QTr -l500m anonftp@ftp.ncbi.nlm.nih.gov:/pub/taxonomy/taxdump.tar.gz.md5 ./ #下载
md5sum -c taxdump.tar.gz.md5 #验证MD5值
tar -pzxvf taxdump.tar.gz #解压
该文件关注division.dmp和nodes.dmp,division.dmp内容如下,以“|”分割,分为四列,将数据库分成了12类,第一列为分类号,详细说明见readme.txt文件,小编的分类搭建基于此分类
nodes.dmp文件格式如下,第一列对应prot.accession2taxid文件中的taxid,第五列对应division.dmp文件中的第一列分类号,详细见readme.txt文件
分类数据库搭建
(1)根据prot.accession2taxid、division.dmp、nodes.dmp三个文件的对应关系,提取得到下边一样的对应文件(如accession2taxid.txt),以Plants and Fungi为例:
awk -F"\|" '{print$1"\t"$5}' nodes.dmp|awk '{if($2=="4")print$1}' >PLN.taxid
Python get.py PLN.taxid prot.accession2taxid PLN.ID
get.py 脚本如下
上述PLN.ID为所有Plants and Fungi的ID,最终得到结果如下,已将prot.accession2taxid中所有的accession.version ID分类(有一部分不存在),相当于将NR数据库的序列进行了分类
(2)序列提取步骤:
extract_seq.pl脚本代码如下:
die "perl $0 <id> <fa> <OUT>" unless(@ARGV==3);
use Bio::SeqIO;
use Bio::Seq;
$in = Bio::SeqIO->new(-file => "$ARGV[1]" , -format => 'Fasta');
$out = Bio::SeqIO->new(-file => ">$ARGV[2]" , -format => 'Fasta');
my%keep=();
open IN ,"$ARGV[0]" or die "$!";
while(<IN>){
chomp;
next if /^#/;
$keep{$_}=1;
}
close(IN);
while ( my $seq = $in->next_seq() ) {
my($id,$sequence,$desc,$len)=($seq->id,$seq->seq,$seq->desc,$seq->length);
if(exists $keep{$id}){
$out->write_seq($seq);
}
}
$in->close();
$out->close();
建库使用
提取完序列后,使用blast建库后就可以就行比对使用
makeblastdb -in Plants.Fungi.nr.fa -dbtype prot
makeblastdb -in animals.nr.fa -dbtype prot
makeblastdb -in micro.nr.fa -dbtype prot
其他用途说明
Taxonomy数据库数据库还可以进行其他多样化的分类,有兴趣可以去官网研究,小编能力有限,不再述说