在上周的文章KEGG数据库不会下载?了解下API!里,我介绍了基于KEGG API来获得所有基因的id,并通过wget遍历所有id来get基因的序列。对计算机比较了解或已经尝试过的朋友可能会意识到,虽然KEGG数据库整体并不是很大(原核生物大概5G),但是反复访问API地址耗时甚长!基于国内高校网速现状,全部下载可能需要长达数月甚至一年的时间!需要注意这里的耗时主要来源于反复访问KEGG API地址而不是下载数据本身,假如可以减少访问次数,那么就能大大缩短KEGG数据库下载时间。比较幸运的是,API指令中允许多个基因并行检索,如下所示:
$http://rest.kegg.jp/get/aac:Aaci_0001+aac:Aaci_0002/aaseq
不同的基因ID之间以加号“+”分割,具体检索结果如下所示:
如果我们可以将所有基因并联检索,是不是就可以批量下载KEGG蛋白序列了?现实是残酷的,KEGG API只允许不超过9个基因的并联检索,不过只要我们将所有的基因都改成九连组,仍可以大大缩减下载时间,下面我使用一个shell脚本来完成:
$sh split_kegg_genes.sh all_genes.list all_genes_split.list
结果如下所示:
接下来同样使用一个shell脚本进行序列下载:
$sh kegg_genes_wget.sh all_genes_split.list
下载结果为一系列fasta文件,如下所示:
可以合并到一起成为最终的序列文件:
$cat kegg_genes*.fasta > all_genes.fasta
下面汇总一下总的下载流程:
$mkdir -p kegg_download/kegg_genome
$cd kegg_download
$wget -c http://rest.kegg.jp/list/genome
(注意,这里可以根据genome文件中的taxid筛选需要下载的物种列表,例如只下载原核生物,需要借助NCBI Taxonomy中的fullnamelineage.dmp文件)
$cd kegg_genome
$cut -f 2 ../genome | cut -f 1 -d "," | while read id; do wget -c http://rest.kegg.jp/list/$id; done
$cat * | cut -f 1 > ../all_genes.list
$cd ..
$sh split_kegg_genes.sh all_genes.list all_genes_split.list
$sh kegg_genes_wget.sh all_genes_split.list
$cat kegg_genes*.fasta > all_genes.fasta
好了,这样的话乐观估计只需要一两个月就可以下载完。但是如果还是觉得太慢,想急用的话怎么办?这时候可能需要借助开源的第三方数据库。可喜的是,KOBAS(http://kobas.cbi.pku.edu.cn/)为北大维护的一个基于KEGG的基因功能注释数据库,且其数据会随着的KEGG升级而进行更新(虽然更新比较慢,目前最新数据2017年),而且该数据库支持批量数据下载,其数据库的基因组物种名以及gene id与KEGG是一致的,其FTP地址为ftp://ftp.cbi.pku.edu.cn/pub/KOBAS_3.0_DOWNLOAD/,可以在该FTP批量下载蛋白序列:
$wget -c ftp://ftp.cbi.pku.edu.cn/pub/KOBAS_3.0_DOWNLOAD/seq_pep/*
这种方法的缺点是下载的序列只有gene id而并没有基因注释信息,如果只想注释KO的话可以根据该序列比对,然后基于文章KEGG数据库不会下载?了解下API!里获得的KO与gene对照表获得KO号。