GO是一个同源蛋白的数据库,按照三大类别BP(生物学过程), MF(分子功能), CC(细胞组分) 对基因的产物-蛋白质进行了分类;

在GO数据库中,本质上是一个有向无环图的数据结构,在三大类别之下,又有小的分类层级,一层一层的分类下去;

对于某个具体的GO号来说,代表了一组同源蛋白,拥有相似的结构和功能,在数据库中,有上层分类的GO,也可能在这个GO下面,还有其他的GO

为了直观的展示某个GO号的分类,利用数据库提供的go-basic.obo 文件得到不同GO之间的层级关系,然后用Graphviz 进行可视化

首先下载go-basic.obo 文件, 到GO官网 http://geneontology.org/page/download-ontology

选择下载go-basic.obo 文件

wget http://purl.obolibrary.org/obo/go/go-basic.obo

观察obo 文件

[Term]
id: GO:0000001
name: mitochondrion inheritance
namespace: biological_process
def: "The distribution of mitochondria, including the mitochondrial genome, into daughter cells after mitosis or meiosis, mediated by interaction
synonym: "mitochondrial inheritance" EXACT []
is_a: GO:0048308 ! organelle inheritance
is_a: GO:0048311 ! mitochondrion distribution

其核心是Term , 每个Term 下记录了一个具体的GO, name 是对该GO的简单描述,namespace 是值该GO 属于三大类别中的哪一个,def 是详细的描述信息, is_a 记录了该GO 对应的上层分类的GO

根据每个GO的is_a的信息,就可以得到所有GO之间的相互关系,利用程序处理,对于某个具体的GO,就可以得到其对应的所有上层分类,然后整理成Graphviz 识别的dot 文件,进行可视化

具体的代码如下:

#!/usr/bin/env perl

my ($obo, $go) = @ARGV;

my %nodes = ();
my %edges = ();
local $/ = "[Term]";
open OBO, $obo or die "Can't open $obo!\n";
while (<OBO>) {
chomp;
my ($node) = $_ =~ /id:\s+(\S+)/;
next if not defined $node;
my ($name) = $_ =~ /name:\s+(.+?)\n/;
my $label = qq{"$node\\n$name"};
$node =~ s/://;
$nodes{$node} = $label;
my @edge = $_ =~ /is_a:\s+(GO:\d+)/;
foreach my $x (@edge) {
$x =~ s/://;
push @{$edges{$node}}, $x;
}
}
close OBO; my @val = @{$edges{$go}};
my @node = ();
my @edge = (); push @node, $go;
my $start = $go;
while (@val) {
my $id = shift @val;
push @node, $id;
push @edge, qq{$id -> $start;}; foreach my $x (@{$edges{$id}}) {
push @val, $x;
}
$start = $id;
} print qq{digraph go\{\n}; foreach my $x (@node) {
print qq{$x\[label = $nodes{$x}\];\n};
} foreach my $x (@edge) {
print qq{$x\n};
}
print qq{\}};

运行的命令如下:

perl  parse_go.pl go-basic.obo GO0002485 > GO0002485.dot

如果使用GO:0002485 这种作为结点的名字,Graphviz 不能够正确识别,所以我把冒号统一替换掉了,生成的GO0002485的内容如下:

digraph go{
GO0002485[label = "GO:0002485\nantigen processing and presentation of endogenous peptide antigen via MHC class I via ER pathway, TAP-dependent"];
GO0002484[label = "GO:0002484\nantigen processing and presentation of endogenous peptide antigen via MHC class I via ER pathway"];
GO0019885[label = "GO:0019885\nantigen processing and presentation of endogenous peptide antigen via MHC class I"];
GO0002474[label = "GO:0002474\nantigen processing and presentation of peptide antigen via MHC class I"];
GO0048002[label = "GO:0048002\nantigen processing and presentation of peptide antigen"];
GO0019882[label = "GO:0019882\nantigen processing and presentation"];
GO0002376[label = "GO:0002376\nimmune system process"];
GO0008150[label = "GO:0008150\nbiological_process"];
GO0002484 -> GO0002485;
GO0019885 -> GO0002484;
GO0002474 -> GO0019885;
GO0048002 -> GO0002474;
GO0019882 -> GO0048002;
GO0002376 -> GO0019882;
GO0008150 -> GO0002376;
}

最后用Graphviz 进行可视化

dot -T pdf GO0002485.dot -o GO0002485.pdf

效果图如下:

这里全部采用了默认的格式,其实还可以在这个基础上再修改样式,使图片更加的美观;

利用Graphviz 可视化GO 数据库的更多相关文章

  1. Navicat可视化MySQL数据库

    Navicat可视化MySQL数据库 Navicat内部封装了所有的操作数据库的命令,用户只需要点击操作即可,无需书写sql语句. navicat能够充当多个数据库的客户端. 具体操作参考百度. py ...

  2. 利用oneproxy部署mysql数据库的读写分离

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ...

  3. 利用xtrabackup备份mysql数据库

    利用xtrabackup备份mysql数据库 一.安装1.直接下载二进制文件wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2. ...

  4. SQLServer2005利用维护计划自动备份数据库

    经常性忘了给数据库备份,结果当数据库发生问题的时候,才发现备份是1个月以前的,那个后悔与懊恼还加惭愧啊,别提有对难受了.要认为的记住去备份比较难,每天事情又那么多,所以有了这个自动备份就不用愁了.先拷 ...

  5. (转载)在Delphi中利用MSDASC来配置数据库链接

    在Delphi中利用MSDASC来配置数据库链接 在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好.那天无意中发 ...

  6. Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...

  7. 利用Graphviz 画结构图[转]

    转自:http://www.cnblogs.com/sld666666/archive/2010/06/25/1765510.html 利用Graphviz 画结构图   1. Graphviz介绍 ...

  8. spring+mybatis利用interceptor(plugin)兑现数据库读写分离

    使用spring的动态路由实现数据库负载均衡 系统中存在的多台服务器是"地位相当"的,不过,同一时间他们都处于活动(Active)状态,处于负载均衡等因素考虑,数据访问请求需要在这 ...

  9. 利用EntityFramework获得双色球数据库

    原文 利用EntityFramework获得双色球数据库 双色球想必大家都很熟悉了,尽管屡买屡不中,但还是会买.以前就想过利用双色球的走势图得到双色球的数据库,至于得到数据库干什么倒没想过,不过对以往 ...

随机推荐

  1. php excel类 phpExcel使用方法介绍

    phpExcel操作excel可以方便的加入图片,支持jpg gif png格式. 下载地址:http://www.codeplex.com/PHPExcel 下面是总结的几个使用方法 include ...

  2. 强者联盟——Python语言结合Spark框架

    引言:Spark由AMPLab实验室开发,其本质是基于内存的高速迭代框架,"迭代"是机器学习最大的特点,因此很适合做机器学习. 得益于在数据科学中强大的表现,Python语言的粉丝 ...

  3. Centos7安装TensorFlow

    TensorFlow也火了一段时间,想想既然要研究NLP.为什么不好好应用一下Google开源的Deep Learning平台呢,一切还是先从搭建好开发环境開始. 非常多大神们也做了这方面的工作.汲取 ...

  4. lua内存管理

    本文内容基于版本:Lua 5.3.0 Lua内存管理器规则 Lua允许用户自定义内存管理器,并在创建Lua虚拟机(lua_State实例)时传入.当然自定义内存管理器必须遵循Lua已定义的一些行为规则 ...

  5. cocos2d-x分别在Visual Studio和eclipse中设置启用Box2D

    cocos2d-x内嵌有chipmunk和Box2D两个物理库,默认启用的是chipmunk.如果想使用Box2D,可做如下设置.PS:本人所用的版本是cocos2d-x-2.2.5. 一.在Visu ...

  6. 纯css3实现的创意图片放大镜

    今天要给大家分享的的一款用纯css3实现的图片放大镜特效.页面打开五个小图显示于页面.当鼠标经过图片时,当前图片以灰色背景图的形式展示.效果非常不错. 在线预览   源码下载 实现的代码: html代 ...

  7. 一款纯html5实现的人跑步动画

    今天给大家分享一款纯html5实现的人跑步动画.这款动画中实现了人跑步的动画,且上面有三个按钮,分别是选择让这个跑步的拿什么武器,第一个是拿了一把剑,第二个是拿了一把斧头,第三个是不拿任保东西.效果图 ...

  8. 纯css3实现的3D按钮

    前面已经为大家介绍了好多纯css3实现的按钮.今天要再给大家带来一款纯css3实现的3D按钮.在实例中给出了五种颜色的3D按钮.效果图如下: 在线预览   源码下载 实现的代码. html代码: &l ...

  9. 未能加载文件或程序集Office,Version=11.0.0.0

    关于"未能加载文件或程序集“Office, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个 ...

  10. 如何打一手好Log

    如果项目上过线的话,那你一定知道Log是多么重要. 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出 ...