使用ensembl的API下载数据

Ensembl 是一项生物信息学研究计划,旨在开发一种能够对真核生物基因组进行自动诠释(automatic annotation)并加以维护的软件。该计划由英国Sanger研究所Wellcome基金会及欧洲分子生物学实验室所属分部欧洲生物信息学研究所共同协作运营(http://zh.wikipedia.org/wiki/Ensembl)。

Ensembl数据库本身提供了非常人性话的操作界面,可以很容易的通过Ensemble筛选到目标数据。但是当数据量比较大时,直接通过网页手动筛选变得不显示。为此Ensembl也提供了强大的perl API接口。通过API接口可以实现对数据的大批量处理。

----------------------------------------------

1)Perl API的安装 (http://asia.ensembl.org/info/docs/api/api_installation.html)
     window下安装比较方便,直接下载4个需要的模块      解压到本地目录,如:C:/src/
2)安装DBD::MySQL 包
     通过PPM搜索DBD-MySQL,安装
3)API模块的使用
     因为下载的ensembl包不在perl的标准库中,所以在使用这4个模块时需要特别声明:
     第一种方法就是在程序中加入 use lib "模块路径";第二种方法是在CMD中输入
     set PERL5LIB=C:srcbioperl-live;C:srcensemblmodules;C:srcensembl-comparamodules;C:srcensembl-variationmodules;C:srcensembl-functgenomicsmodules
然后执行perl程序

4)连接ensembl库(http://asia.ensembl.org/info/docs/api/core/core_tutorial.html)
    use Bio::EnsEMBL::Registry;
    print "link to DB...n";
    Bio::EnsEMBL::Registry->load_registry_from_db(
    -host => 'ensembldb.ensembl.org',
    -user => 'anonymous',
    -port => 5306);
---------------------------------------------------
5)从ensembl上获得ensembl ID
     在ensembl上进行的许多搜索都需要ensembl ID,这个ID是ensembl给每个基因(序列)提供的类似access number之类的号。而一般情况下我们手里有的只是一个基因的名称,如COG6,那么怎么通过COG6基因名称获得ensembl ID。

    use Bio::EnsEMBL::Registry;
    print "link to DB...n";
    Bio::EnsEMBL::Registry->load_registry_from_db(
    -host => 'ensembldb.ensembl.org',
    -user => 'anonymous',
    -port => 5306); 
    my $gene_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Gene' );
   print “get data...n”;
   my $gene = $gene_adaptor->fetch_by_display_label('COG6');
   print $gene->stable_id(),"n";
  
6)搜索同源序列
    ensembl提供了一整套判断直系和并系同源序列的方法,这里我们并不关心这种算法。我们关心的是提交一个序列后,怎么得到它的直系和并系同源序列。
ensembl提供的模块是:Bio::EnsEMBL::Compara::DBSQL::DBAdaptor(http://asia.ensembl.org/info/docs/api/compara/compara_tutorial.html)
代码如下:
use Bio::EnsEMBL::Registry;
use strict;use warnings;
use ForkManager;                 #多进程下载
my $pm = new Parallel::ForkManager(30);  #最大进程数30,极耗系统资源。CPU:50%,RAM:800M;

print "Link to DB, Waiting...n";
Bio::EnsEMBL::Registry->load_registry_from_db(
    -host => 'ensembldb.ensembl.org',
    -user => 'anonymous',
    -port => 5306);
    
my $member_adaptor = Bio::EnsEMBL::Registry->get_adaptor('Multi', 'compara', 'Member');
my $homology_adaptor = Bio::EnsEMBL::Registry->get_adaptor('Multi', 'compara', 'Homology');

print "Download data from DB...n";

open(F,"ens.txt");
while(my $ID=<F>)
{    chomp $ID;
    my($ID1,$ID2)=split(/t/,$ID);
    $pm->start and next;                         #创建进程;
    &GETSEQ($ID2);
    $pm->finish;
}
$pm->wait_all_children;
close(F);

sub GETSEQ{
    my($ID2)=@_;
    my $fh;
    my $member = $member_adaptor->fetch_by_source_stable_id('ENSEMBLGENE',$ID2);
    my $homologies = $homology_adaptor->fetch_all_by_Member($member);
    if(defined($homologies))
    {    open($fh,">>$ID2.txt");
        foreach my $homology(@{$homologies})
        {    if($homology->description=~/one2one/)
            {    my $member_attribute=$homology->get_all_Member_Attribute->[1];
                my ($member, $attribute) = @{$member_attribute};
                my $taxon=$member->taxon;
                my $species= $taxon->binomial;$species=~s/ /_/;
                my $slice_adaptor = Bio::EnsEMBL::Registry->get_adaptor($species, 'Core', 'Slice' );    #连接序列库;
                my $slice = $slice_adaptor->fetch_by_gene_stable_id($member->stable_id);    #获得同源序列;
                print $fh $member->stable_id,"t",$slice->seq(),"n";
            }
        }
    }    
    my $slice_adaptor = Bio::EnsEMBL::Registry->get_adaptor('Human', 'Core', 'Slice' );
    my $slice = $slice_adaptor->fetch_by_gene_stable_id($ID2);
    print $fh $ID2,"t",$slice->seq(),"n";                
    close($fh);
    print $ID2,"n";
}
7)抛砖引玉,其他模块的方法就不演示了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值