Ensembl API を極める!

 

MAIN MENU

APPLICATIONS

MODULES

OTHER CONTENTS
 


 
Ensembl API

はじめに
脊椎動物ゲノムデータベースEnsemblには、ヒトを含む30を超える脊椎動物のゲノムデータが、様々な情報が付加された形で格納されています。Ensemblのデータは年を追うごとに充実してきており、脊椎動物を扱う研究のためのスタンダードデータベースになっていくことは間違いありません。これらのデータを自在に扱うことができれば、研究を進める上で大きなメリットとなりますし、逆に十分に使いこなせなければ、海外の競合研究チームに大きく遅れをとることになりかねません。Ensemblのデータ取得方法には、FTPサイトBioMart、MySQLへ一括ダウンロード、Ensembl APIの4つありますが、最も有効であるEnsembl APIについて詳細に説明していきます。その前に、まずは4つのデータ取得方法を以下に示しますので比較してみましょう。

FTPサイトからダウンロードは他の一般的なデータベースと同様で、特別使い勝手がいいということはありません。

BioMartを用いれば、条件を指定したデータ(例えば象ゲノム一番染色体中の2000bpから10000bpに存在する遺伝子など)を取得することが可能です。UNIXやPerlの知識がなくとも使用できるWebベースというメリットはありますが、BioMartのみで膨大なデータを自在に扱うとこは困難です。

Ensemblはデータベース管理システムMySQLで構築されていますので、MySQLの各種コマンドを用いてデータの取得が可能です。また、研究室のサーバーなどにMySQLをインストールすれば、Ensemblのデータ全てを取得するとこもできます。MySQLの知識があればここからデーダマイニングするとこも可能ですが、複雑な条件でデータを取得するためには、多くのプログラムを自作する必要があるでしょう。この問題を解決するのが、次に紹介するEnsembl APIです。

Ensembl APIは、Ensemblのデータ取得をスムーズにするperlのモジュール群です。非常に多くのモジュールが存在し、自分でプログラムを書かなくともEnsembl APIをPerlスクリプトに組み込むことでEnsembl中のあらゆるデータを様々な形で取得できます。例えば、ヒトゲノム中に存在する偽遺伝子のみ取得したり、全遺伝子の第一エキソンを取得するとか、ヒトゲノム中に多数存在しているレトロトランスポゾンAluをゲノムの位置情報とともに全て取得することもできます。この他にもmiRNA周辺に存在している遺伝子の抽出であるとか、InterProなどに登録されたタンパク質のドメイン情報も網羅的に取得できたりと、例を挙げればきりがありません。Ensembl APIが自在に扱えるようなればデータ解析の効率は格段に上昇すると断言できます。情報系研究者だけでなく、実験系研究者でも、脊椎動物を扱う全ての研究者がEnsembl APIを使えるようになって頂きたい。

Ensembl APIは、Core、Compara、Variationの3つで構成されています。Coreは文字通りデータベースの核となるデータへのアクセスするものです(DNA配列など)。Comparaは種間比較により生成されたデータ(ortholog、paralog、syntenyなど)の取得に利用します。Ensembl VariationはSNPなどの多型データ取得のためのAPIです。Compara、Variationは自分の研究で必要であれば勉強すればよいと思いますが、Coreを知らなければCompara、Variationを扱うとこは困難なので、まずはCoreから学習していきましょう。
※以下、コマンドラインでの入力行を緑色で示します。
※以下、スクリプト内のソースを茶色で示します。
1. Ensembl Core
1-1. Ensembl Core API のインストール
Ensembl APIを使用するには、Ensembl API本体と、bioperlがインストールされている必要があります。インストール方法について順を追って説明していきます。  
 
ホームディレクトリにsrcディレクトリを作成し、srcへ移動。
cd
mkdir src
cd src


bioperl CVSサーバーにログインします。パスワードはcvsです。
cvs -d :pserver:cvs@code.open-bio.org:/home/repository/bioperl login

bioperlをインストールします。
cvs -d :pserver:cvs@code.open-bio.org:/home/repository/bioperl checkout -r bioperl-release-1-2-3 bioperl-live

APIを取得するため、Sanger centerのCVSサーバーにログインします。パスワードはCVSUSERです。
cvs -d :pserver:cvsuser@cvs.sanger.ac.uk:/cvsroot/ensembl login

Ensembl APIをインストールします(2008/02/24時点のバージョンは48です)。
cvs -d :pserver:cvsuser@cvs.sanger.ac.uk:/cvsroot/ensembl checkout -r branch-ensembl-48 ensembl-api

環境設定(シェルがbashの時)
PERL5LIB=${PERL5LIB}:${HOME}/src/bioperl-live
PERL5LIB=${PERL5LIB}:${HOME}/src/ensembl/modules
PERL5LIB=${PERL5LIB}:${HOME}/src/ensembl-compara/modules
export PERL5LIB

以上で完了です。インストールされたperl moduleを確認してみましょう。拡張子.pmのファイルを確認できるはずです。
cd ~/src/ensembl/modules/Bio/EnsEMBL
ls


なお、EnsemblデータベースのバージョンとEnsembl APIのバージョンが一致しなければAPIは動作しません。更新された最新データを取得したいときは、Ensembl APIも最新のものに更新する必要があるということを覚えておいて下さい。更新の方法は以下の通りです。
cd src
cd ensembl
cvs -q update -d -P -r branch-ensembl-48

※ファイヤーウォール、プロキシ設定の問題でCVSサーバーに接続できない方は、ネットワーク管理者に相談して下さい。
 
1-2. データベースに接続する
Ensembl APIがうまくインストールされているか調べるには、実際に動かしてみるのが一番です。Ensemblに接続するためのルールを覚えていきましょう。Ensemblへの接続にはRegistry.pmを使用します。perlスクリプトに以下を書いて下さい。
use Bio::EnsEMBL::Registry;   #Registry.pmの使用を宣言
my $registry = 'Bio::EnsEMBL::Registry';   #$registryはEnsembl接続のためのオブジェクト
$registry->load_registry_from_db(   #load_registry_from_dbはEnsembl接続のためのメソッド

    -host => 'ensembldb.ensembl.org',
    -user => 'anonymous'
);


Ensembl APIを使用するときは必ず上記が必要です。接続できるか確認するために以下を追加してperlスクリプトを実行してみて下さい(core1_db_status.pl)。
my @db_adaptors = @{ $registry->get_all_DBAdaptors() };   #データベースアダプターの取得
foreach my $db_adaptor (@db_adaptors) {
    my $db_connection = $db_adaptor->dbc();   #それぞれのアダプターでデータベースに接続
    printf(
        "species/group\t%s/%s\ndatabase\t%s\nhost:port\t%s:%s\n\n",
        $db_adaptor->species(),   $db_adaptor->group(),
        $db_connection->dbname(), $db_connection->host(),
        $db_connection->port()
    );
}

perl core1_db_status.pl

全てのデータはアダプターによって取得されます。アダプターには複数あって、目的に応じて使い分けます。後述するスライスオブジェクトがほしければスライスアダプターを用いますし、フィーチャオブジェクトがほしければフィーチャアダプターを使用するといった具合です。ここではget_all_DBAdaptorsというメトッドを使って、全てのアダプターを一度に取得しています。取得したデータベースアダプターからは用途に応じたメソッドを使って様々なデータを抽出できます。ここでは種名、APIの種類、データベース名、ホスト名、ポート名を取得してプリントアウトします。core1_db_status.outのような結果になれはOKです。


1-2. スライス(Slice)を知る
スライスオブジェクトは、ゲノム上の領域を指します。例えばヒトゲノムの12番染色体の1000000bpから1000050bpまでの領域は、スライスです。実際に、スライスであるヒトゲノム上の領域をEnsemblから取得してみましょう(core2_slice.pl)。
my $slice_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Slice' );   #スライスアダプター取得
my $slice = $slice_adaptor->fetch_by_region( 'chromosome', '12','1000000','1000050' );   #領域指定
my $coord_sys  = $slice->coord_system()->name();   #coordinate system名取得
my $seq_region = $slice->seq_region_name();
my $start      = $slice->start();
my $end        = $slice->end();
my $strand     = $slice->strand();
my $seq     = $slice->seq();
print "Slice: $coord_sys $seq_region $start-$end ($strand)\n$seq\n";


領域にはchrmosomeの他にsupercontig、clone、contigがあり、これらをcoordinate systemと呼びます。sliceで領域を指定する際には、どの領域を見るのか指定する必要があります。

perl core2_slice.pl
Slice: chromosome 12 1000000-1000050 (1)
CACTCATTTCAATTCTTGACTGGGATTGGAGGATCTTTGAAGCTATCTCAC


1-3. フィーチャ(Feature)を知る
フィーチャオブジェクトは、始まりと終わりが決められている領域です。例えば、遺伝子、転写産物、エキソンは始まりと終わりが決まっているのでフィーチャです。スライスはこちらで領域を指定するオブジェクトで、フィーチャはすでに指定された領域だということをよく覚えておいて下さい。20番染色体の100000から1100000bpのスライスを取得し、そのスライスからメソッドfetch_all_by_Slice()を用いて、この領域中に含まれるフィーチャを抽出してみましょう(core3_feature.pl)。
my $slice_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Slice' );
my $tr_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Transcript' );
my $slice = $slice_adaptor->fetch_by_region( 'chromosome', '20', 10e5, 11e5 );
my @transcripts = @{ $tr_adaptor->fetch_all_by_Slice($slice) };
while ( my $tr = shift @transcripts ) {
   my $dbID      = $tr->dbID();
   my $start     = $tr->start();
   my $end       = $tr->end();
   my $strand    = $tr->strand();
   my $stable_id = $tr->stable_id();
   print "Transcript $stable_id [$dbID] $start-$end ($strand)\n";
}

ここではtranscriptアダプターを使用しているので、このスライス中のtranscriptフィーチャが取得されることになります。もしgeneアダプターを用いれば、遺伝子が取得できます。

perl core3_feature.pl
Transcript ENST00000333082 [286495] 41940-95972 (1)
Transcript ENST00000335877 [286496] 41940-95972 (1)
Transcript ENST00000246015 [286497] 47242-97023 (1)
Transcript ENST00000381899 [286498] 47271-97023 (1)
Transcript ENST00000381898 [286499] 63484-97023 (1)
転写産物ID、データベースID、スタート、エンド、ストランド(1ならプラス鎖、-1ならマイナス鎖)が出力されます。

1-4. フィーチャ(Feature)をもっと知る
フィーチャオブジェクトを扱う他の例も取り上げてみましょう。
my $slice_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Slice' );
my $slice = $slice_adaptor->fetch_by_region( 'chromosome', 'X', 4e5, 10e5 );
my @genes = @{ $slice->get_all_Genes() };
while ( my $gene = shift @genes ) {
my $stable_id  = $gene->stable_id();
my $seq_region = $gene->slice->seq_region_name();
my $start      = $gene->start();
my $end        = $gene->end();
my $strand     = $gene->strand();
print "$stable_id\t$seq_region\t$start\t$end\t$strand\n";
}


get_all_Genes()というメソッドを用いて指定したスライス領域中の全ての遺伝子を取得し(取得された遺伝子はフィーチャオブジェクト)、フィーチャオブジェクトに対するメソッドで、idやスタート、エンドを取得しています。新しいアダプターやメソッドを使っていますが、Ensembl APIによるデータ取得の方法はこれまで述べてきたものと同じですね。さらにここから$gene->get_all_Transcripts()とすれば、遺伝子上にコードされている全ての転写産物(全てのalternative splicing forms)も取得できます。スライスによる領域指定ではなく、今回のケースはフィーチャ中に含まれる別のフィーチャを取得している例です。
my @transcripts = @{ $gene->get_all_Transcripts() };
while ( my $transcript = shift @transcripts ) {
 
while ( my $transcript  = shift @genes ) {
my $stable_id  = $transcript ->stable_id();
my $seq_region = $transcript ->slice->seq_region_name();
my $start      = $transcript ->start();
my $end        = $transcript ->end();
my $strand     = $transcript ->strand();
print "$stable_id\t$seq_region\t$start\t$end\t$strand\n";
}


さらにここから$transcript->get_all_Exons()とすれば、転写産物中の各エキソンを取得できます。第1エキソンまたは最後のエキソンであれば5'UTR、3'UTRの情報も取得できます。core4_gene_tr_exon.plにここまで述べてきたものが記述されていますので内容をよく確認しプログラムを実行して下さい。
perl core4_gene_tr_exon.pl


1-5. 配列の取得
DNA配列の取得はcore2_slice.plで行いました。今回はさらに発展させ、イントロンを除いたcDNA配列、翻訳後のアミノ酸配列、5'UTR配列、3'UTR配列の取得を行います。
core5_get_seq.pl

ヒトの全遺伝子配列の取得

ヒトの全タンパク質配列の取得


1-6. アライメントフィーチャ
core6_align_features.pl


1-7. リピート配列

core7_get_repeats.pl


1-8. externalデータベース
core8_get_external_ref.pl



2. Ensembl Compara


3. Ensembl Variation




INFOMATION

・脊椎動物ゲノムデータベースEnsemblからのデータ取得をサポートするEnsembl APIの使い方をメインに紹介するページです。その他にプログラミング言語Perl、データベース管理システムMySQL、統計解析ソフトRなどを中心に、コンピュータを使って解析を進める上で有用なアプリケーションも取り上げていきます。
・Ensembl APIを学ぶためにはPerlUNIXの知識が必要です。プログラミング初心者の方は本サイトのPerlUNIXページを参考にしてください。
・本サイトはリンクフリーです。
・ご意見・ご感想はこちらまで。

             


開設 2008/02/20 

 

Copyright © Your site. All Rights Reserved. テンプレート by ネットマニア
inserted by FC2 system