根据相似性原理,序列相似,功能相似,所有功能注释无非是用比对工具将输入序列比对到数据库序列,再将输入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. Noip模拟75 2021.10.12

    T1 如何优雅的送分 他说是送分题,我就刚,没刚出来,想到莫比乌斯容斥后就都没推出来 好吧还是不能被恶心的题目,挑衅的语言打乱做题节奏 于是这一场也就没了.... $F(i)$表示$i$的不同质因子集 ...

  2. vim 删除 替换

    1,删除包含pattern的某一行 :g/pattern/d 或 :%g/pattern/d 2,删除不包含pattern的某一行 :v/pattern/d 或 :g!/pattern/d 3,替换 ...

  3. Kubernetes Deployment 源码分析(一)

    概述Deployment 基础创建 DeploymentReplicaSet滚动更新失败回滚历史版本回滚其他特性小结 概述 Deployment 是最常用的 Kubernetes 原生 Workloa ...

  4. pycharm的基本使用 、 Python的注释语法,变量,常量,垃圾回收机制,数据类型

    1.文件路径要注意 我把文件放在了D盘,如下图:你们可以根据自身情况设置 2.python环境要选择本地下载好的 如下图: 点击本机存在的环境,如果提示NO interpr,就点击第二步 如果还是没有 ...

  5. Tenable Nessus 10.0.0 (Unix, Linux) -- #1 漏洞评估解决方案

    请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin.org 了解 ...

  6. mongoDB 的一般使用

    理解 mongodb 也是nosql 的一种.他的数据存储类型是一种和json格式比较像的数据类型,可以看作就是json. mongodb 里的数据库都是一个单独的库.一般需要用的库都会设置自己的us ...

  7. K8s 离线集群部署(二进制包无dashboard)

    https://www.cnblogs.com/cocowool/p/install_k8s_offline.html https://www.jianshu.com/p/073577bdec98 h ...

  8. 使用gitlab runner 进行CI(四):使用Gitlab Page托管项目文档

    目录 1.什么是Gitlab Pages 2.开启Gitlab Pages 3.基本过程 4.托管markdown文档 4.1 安装sphinx等依赖 4.2 配置项目的sphinx配置 4.3 编写 ...

  9. k8s中部署springcloud

    安装和配置数据存储仓库MySQL 1.MySQL简介 2.MySQL特点 3.安装和配置MySQL 4.在MySQL数据库导入数据 5.对MySQL数据库进行授权 1.MySQL简介 MySQL 是一 ...

  10. 攻防世界 Misc 新手练习区 坚持60s Writeup

    攻防世界 Misc 新手练习区 坚持60s Writeup 题目介绍 题目考点 java反编译 jd-gui 的使用 Writeup 下载附件并打开 kali执行命令 java -jar 9dc125 ...