根据相似性原理,序列相似,功能相似,所有功能注释无非是用比对工具将输入序列比对到数据库序列,再将输入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. vue3.x全局插件和组件

    做vue项目的时候,总有一些小组件或者工具类,我们需要频繁的使用,每个使用的地方再去引用相对比较麻烦,当然也有一些好处,尤其是配合组件异步加载的时候,能最更好的减少项目首次加载的体积,从而优化一些体验 ...

  2. ScatterLayout:分散布局在py中的引用

    """ ScatterLayout:分散布局 """ from kivy.app import App from kivy.uix.scat ...

  3. [no code][scrum meeting] Beta 4

    例会时间:5月16日11:30,主持者:伦泽标 下次例会时间:5月18日11:30,主持者:叶开辉 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 完成整体框架设计与登录逻辑 与后端对接 ...

  4. Vue接收后端传过来excel表格的文件流并下载

    题外话:当接收文件流时要确定文件流的类型,但也有例外就是application/octet-stream类型,主要是只用来下载的类型,这个类型简单理解意思就是通用类型类似 var .object.ar ...

  5. C/C++中浮点数输出精度的问题

    本文使用C++语言书写,对于C的小伙伴们,如果编译不通过的话--就说明C里面没有这个内容,可以跳过 通常来说,我们书写程序主要只用整形变量 (signed/unsigned) (long/long l ...

  6. .NET 生态系统的蜕变之 .NET 6

    .NET 6 是自.NET 4 框架以来生态系统看到的最大版本更新,虽然.NET Core 是2014年开始非常大的一项重大战略举措,但是.NET 6是真正的具有强大动力的非常重要的版本. 2021年 ...

  7. git commit--fatal: unable to auto-detect email address

    git commit的时候报错 *** Please tell me who you are. Run git config --global user.email "you@example ...

  8. linux 内核源代码情景分析——i386 的页式内存管理机制

    可以看出,在页面目录中共有210 = 1024个目录项,每个目录项指向一个页面表,而在每个页面表中又共有1024个页面描述项. 由图看出来,从线性地址到物理地址的映射过程为: 1)从CR3取得页面目录 ...

  9. 『学了就忘』Linux基础命令 — 19、目录操作的相关命令

    目录 1.ls命令 2.cd命令 (1)绝对路径和相对路径 (2)cd命令的简化用法 3.pwd命令 4.mkdir命令 5.rmdir命令 常用目录操作的相关命令: ls命令 cd命令 pwd命令 ...

  10. Java 在PPT中创建散点图

    本文将以Java代码示例展示如何在PPT幻灯片中创建散点图表. 创建图表前 需要在Java程序中导入用于操作PPT的jar包 Free Spire.Presentation for Java.可参考如 ...