根据相似性原理,序列相似,功能相似,所有功能注释无非是用比对工具将输入序列比对到数据库序列,再将输入ID对应数据库ID,进一步对应到功能条目的关系。

数据库要么建到本地,要么联网调用API,一般的软件或包做注释都是通过联网来获得,或者调用依赖的一些专门注释的包(文件较大)。工业生产中,一般需要构建本地数据库。

如果不对原始数据库按物种或其他分类来进行拆分的话,整个数据库会很大,比对和注释消耗的时间和资源都会很大,显然不经济,而且也会有一些假阳性的结果。比如将人特有的功能比对到了小鼠上,客户无法结果。所以分库是很有必要的,只是怎么分以及分多大的问题。

KEGG本地库文件

  • 序列数据库文件

    如kegg_all_clean.fa

  • ko系列文件(ko与其他ID的对应关系),ko与不同类型数据库

    我们这里要用到的是ko和geneID的对应关系,其他数据库类似

  • 物种文件

    misc下的taxonomy文件,按物种分库的依据。

  • map目录,通路图。

    每条通路有三个文件:png是通路图,html是网页通路,conf是通路的配置



    conf文件内容

  • map_title.tab文件,是通路的三个层级

  • ko_map.tab文件,是K与通路的全部物种对应文件

    是联系注释结果之间对应关系的必需文件。

  • komap目录下,是各个物种(三个字母缩写)的通路图(png)及其配置(conf),以及该物种对应的通路。

    如人的komap/hsa目录:



    当然也可以不细分到单物种,可以划分物种大类,如动物、植物等,相对应地文件animal_ko_map.tab、plant_ko_map.tab

利用上面的这些文件,其实我们就可以进行KEGG Pathway功能注释了,即存在这样的关系:蛋白——序列ID(基因)——K号——ko(pathway)——Level1-3——通路图。这样得到的通路图,都是map开头,即reference pathway;如果是物种特异通路,即ko开头,则用komap目录结果。KEGG的5种通路类型等基础知识这里不讲,不懂可去查。

如果要按物种进行拆库,则需要将上面的文件都按物种进行分类,使用是一样的。

KEGG数据库非常庞大,除了Pathway,genes等数据库外,还有很多其他的文件,比如:

  • links目录,pathway与其他ID的对应关系



    如pathway_ko.list

  • ligand目录,即配体数据库,不做介绍。

按物种拆分KEGG数据库

1.获得物种分类信息

按物种拆分可大可小:最大就是原始库,最小就是单一物种,中间可以按不同分类来拆。关键取决于你的输入序列是什么成分,当然不大不小恰好能全部包含是最理想的分库结果。比如taxonomy文件(misc目录下)格式是:



我们可以按Eukaryotes、Animals、Vertebrates、Mammals中的任一个层级来分。也可以自定义分类,将不同物种添加到一起进行归类。

这里写一个简单脚本来用上面文件中的第二层级物种来进行数据库分库:

#!urs/bin/perl
open F , $ARGV[0];
while (<F>){
chomp;
if (/^## (.+)/){
$spec=$1;
open OUT, ">>$spec.specie.xls";
}
elsif (!/^#/){
@aa=split/\t/,$_;
print OUT "$spec\t$aa[1]\t$aa[3]\n";
}
}

拆分后得到Animals.specie.xls、 Archaea.specie.xls、 Bacteria.specie.xls、 Fungi.specie.xls、 Plants.specie.xls、 Protists.specie.xls等系列分类文件。如Animals.specie.xls文件如下:

2.获得物种分类的序列信息并建库

从全部物种的原始序列数据库中拆分出以上分类物种的序列,编写如下get_fasta.pl脚本:

#!/usr/bin/perl
use strict;
use warnings;
use diagnostics; unless(@ARGV>=2){
print "perl $0 list.txt db.fa specie.fa\n";
exit(1);
}
my %hash;
open L,"$ARGV[0]" or die "$!\n";
my %list;
while(<L>){
chomp;
my @aa=split/\t/,$_;
$list{$aa[1]}='';
}
close L; my $num_need = scalar keys %list;
print("begin fetch $num_need sequence...\n");
open F,"$ARGV[1]" or die "$!\n";
my %seq;
while(<F>){
LINE: #if(m/^>([^\|]+)/){
if(/^>([^:]+):([^\s]+)/){
chomp;
my $acc = $1;
my $line=$_;
my $idd=$1.':'.$2;
$hash{$idd}=$line;
next unless exists $list{$acc};
while(<F>){
goto LINE if /^>/;
s/[^a-z]//gsi;
$seq{$idd} .= $_;
}
last;
}
elsif (/^>(12122[^\s]+)(.*)/){
chomp;
my $acc = $1;
$hash{$1}=$_;
next unless exists $list{$acc};
while(<F>){
goto LINE if /^>/;
s/[^a-z]//gsi;
$seq{$acc} .= $_;
}
last;
}
}
close F;
open O,">$ARGV[2]" or die "$!\n";
foreach my $acc (keys %seq){
print O "$hash{$acc}\n$seq{$acc}\n";
}
my $yesn = scalar keys %seq;
my $non = $num_need - $yesn;
if($non>=1){
print "have $non sequence not found!\n";
}else{
print "you have successfully got $yesn sequence!\n";
}
close O;

获得分类后的序列:

perl get_fasta.pl Animals.specie.xls kegg_all_clean.fa animals.fa

获得分类后的数据库后,可用blast/diamond等软件进行建库,以便进行输入序列的比对。

3.获得物种分类的K-ko对应文件

从全部物种的ko_map.tab文件(K与通路的对应关系文件)中获取物种分类后的子文件。编写脚本get_species_komap.pl

#!/usr/bin/perl
=pod
this script is subsplit species komap
perl $0 species.xls ko_genes.list ko_map.tab species_ko_map.tab
=cut
my $spe=shift;
my $ko_gene=shift;
my $ko_map=shift;
my $map=shift; my (%spe,%ko); open F,"<$spe";
while(<F>){
chomp;
my @F=split/\t/,$_;
$spe{$F[1]}=1;
}
close F; open F,"<$ko_gene";
while(<F>){
chomp;
my @F=split/\t/,$_;
my $ko=(split/:/,$F[0])[1];
my $spe=(split/:/,$F[1])[0];
if(exists $spe{$spe}){
$ko{$ko}=1;
}
}
close F;
open F,"<$ko_map";
open O,">$map";
while(<F>){
chomp;
my @F=split/\t/,$_;
if(exists ($ko{$F[0]})){
print O "$_\n";
}
}
close F;
close O;

得到animal_ko_map.tab文件,其他分类物种也是类似。

拆分子库后比对获得该子库中的功能信息,后续注释的数据处理其实和不分库时是一样的,都是一些文本的格式转换以及可视化。

比如我们可将KEGG数据库拆分:动物animal.fa、植物plant.fa、真菌fungi.fa、真核eukaryotes.fa、原核prokaryote.fa、原生生物microorganism.fa,以及包含原核、真菌和原生生物三种组合的微生物库other.fa,除动植物、真菌、原核、原生之外但在KEGG数据库中的其他生物unknow.fa。

后面比对注释时只需设置物种参数即可。

【数据库】本地KEGG数据库如何拆分子库?的更多相关文章

  1. KEGG数据库的使用方法与介绍

    KEGG数据库的使用方法与介绍 KEGG的数据 KEGG中的pathway是根据相关知识手绘的,这里的手绘的意思可能是指人工以特定的语言格式来确定通路各组件的联系:基因组信息主要是从NCBI等数据库中 ...

  2. KEGG数据库

    参考:KEGG数据库中文教程 - 博奥  &[学习笔记]KEGG数据库 - 微信 学习一个技能最主要的事情你必须知道,那就是能通过它来做什么? KEGG数据库里面有什么? 如何查询某一特定的代 ...

  3. WebService访问oracle数据库本地调试

    WebService访问oracle数据库本地调试-一步一个坑 上篇文章提到我们额数据库挂了,重装了数据库,然后呢我需要在本地调试WebService,看看那些数据结构缺失,迁移到新数据库中去.踩坑之 ...

  4. android本地数据库,微信数据库WCDB for Android 使用实例

    android本地数据库,微信数据库WCDB for Android 使用实例 Home · Tencent/wcdb Wikihttps://github.com/Tencent/wcdb/wiki ...

  5. 本地存储数据库indexedDB实现离线预览的功能

    今天在学习<高级JS编程>,看到离线存储,cookie和session都十分的熟悉,但是书中还提到了indexedDB和webSQL(已废弃),indexedDB可以像mysql一样建表, ...

  6. 【数据库】本地NR数据库如何按物种拆分?

    目录 1.准备本地数据库文件 1.1 NR库下载 1.2 Taxonomy数据库下载 2.按物种拆分NR库 2.1 第一步:获得Aceesson和分类物种的对应关系 2.2 第二步:获得分类物种的序列 ...

  7. 如何构建自己的KEGG数据库

    本文转自Y叔公众号 自己KEGG数据库好处: 可重复性好 没网也可以进行分析 步骤 1 在KEGG官网找到自己物种的3字符缩写 2 加载Y叔获取kegg.db 的R包 1 ##安装Y叔的包 2 lib ...

  8. 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

    在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...

  9. Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持

    在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...

随机推荐

  1. Java:关于 CAS 笔记

    Java:关于 CAS 笔记 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. CAS 底层原理 概念 CAS 的全称是 Compare-And-Swap,它 ...

  2. SpringMvc 中 FrameworkServlet 覆盖 service 的有点。

    @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws Se ...

  3. BUAA2020软工作业——提问回顾与个人总结

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...

  4. 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解

    前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...

  5. 从四个方向分析我们可以从linux学到什么

    我们真正关心的是自身可以从这个生态圈中获得些什么?说得更直白一点就是,我们可以从linux系统上面学到点什么,它对我们个人的成长和发展有哪些积极的因素.个人觉得,完全可以通过下面四个维度并结合自己的兴 ...

  6. Linux该如何学习新手入门遇到问题又该如何解决

    本节旨在介绍对于初学者如何学习 Linux 的建议.如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法. 如何去学习 学习大多类似庖丁解牛,对事物的认识一般都是由 ...

  7. Linux文件IO操作

    来源:微信公众号「编程学习基地」 目录 文件操作 Linux文件类型 Linux文件权限 修改文件权限 Linux error 获取系统调用时的错误描述 打印错误信息 系统IO函数 open/clos ...

  8. 第34篇-解析invokeinterface字节码指令

    与invokevirtual指令类似,当没有对目标方法进行解析时,需要调用LinkResolver::resolve_invoke()函数进行解析,这个函数会调用其它一些函数完成方法的解析,如下图所示 ...

  9. Docker配置tomcat端口映射后无法访问(404)

    1.配置tomcat端口映射 2.访问测试 3.修改webapps文件,webapps.dist是所需文件 4.虚拟机中重新访问 5.在主机也能访问成功(注意路径为虚拟机IP,不是localhost)

  10. Jmeter下载安装(一)

    一.JMeter介绍       JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试.性能测试和压力测试的工具.负载测试.性能测试和压力测试概念: 负载测试: 这类测试使系统或者应用程 ...