前言
? ? 因為完整的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數據庫數據庫還可以進行其他多樣化的分類,有興趣可以去官網研究,小編能力有限,不再述說