Upload
tutorialsruby
View
503
Download
0
Tags:
Embed Size (px)
Citation preview
g.
pr
od
uc
ti
on
0Institute for Advanced Biosciences, Keio UniversityGraduate School of Media and GovernanceExpertise: Bioinformatics, Systems Biology
Kazuharu Arakawa
G-language GAE v.2に向けてオープンバイオ9 / SIG-BMK 2008.03.07 荒川和晴
バイオインフォマティクスと生物学
生物生物データ
仮説
データ解析
データ処理
実験
必要なデータの示唆
データマイニング
シミュレーション
解釈
思考
観察・解釈
実験による検証
遺伝的改変・合成
研究の流れ(実際の手順)
問題発見
プログラミング・プロトコル/ワークフロー設定
プログラムの実行・実験
結果の解釈
研究の流れ(バイオインフォマティクス)
問題発見
プログラミング・プロトコル/ワークフロー設定
プログラムの実行・実験
結果の解釈
研究の流れ(バイオインフォマティクス)
問題発見
プログラミング・プロトコル/ワークフロー設定
プログラムの実行・実験
結果の解釈
研究の流れ(バイオインフォマティクス)
問題発見
プログラミング・プロトコル/ワークフロー設定
プログラムの実行・実験
結果の解釈
“君たち,いくら大問題を瞬時に計算できたところで,プログラムの設定に何日もかかっていては意味がない” von Neumann
Bio*
研究の流れ(バイオインフォマティクス)
問題発見
プログラミング・ワークフロー設定
プログラムの実行
結果の解釈
Bio*
研究の流れ(バイオインフォマティクス)
問題発見
プログラミング・ワークフロー設定
プログラムの実行
結果の解釈
G-language GAE v.1
• 非常に簡単に使えるライブラリ
• 100以上の解析アプリケーション(多くがグラフィカルな出力を持つ)
• GUIによるワークフロー作成
• BioPerlの3倍程度高速
• BioPerlと高い親和性
2002.6月リリース
http://www.g-language.org/wiki/publications
G-language GAE v.1
• 非常に簡単に使えるライブラリ
• 100以上の解析アプリケーション(多くがグラフィカルな出力を持つ)
• GUIによるワークフロー作成
• BioPerlの3倍程度高速
• BioPerlと高い親和性
2002.6月リリース
プログラミング
プログラミング ワークフロー設定 結果の解釈
プログラムの実行 ワークフロー設定
プログラムの実行
プログラミング
http://www.g-language.org/wiki/publications
バージョン1はβ版。バージョン2から正式版。
• 100個も関数があってもドキュメントがない。
• インストールが死ぬほど大変。(RedHatの特定バージョン, Windows以外)
• Windowsをサポート。(開発コストが数倍)
• use Gだけですむけれど、全部読むから重い。
• 拡張性が低い(クラス設計が未熟)
• (BioPerlよりはマシとはいえ)まだまだ気が利いてない。
Bio*
研究の流れ(バイオインフォマティクス)
問題発見
プログラミング・ワークフロー設定
プログラムの実行
結果の解釈
Bio*
研究の流れ(バイオインフォマティクス)
問題発見
プログラミング・ワークフロー設定
プログラムの実行
結果の解釈
試行錯誤のプロセスが一番時間がかかる
G-language GAE v.2
• G::IO• 気の利いたコア• 圧倒的な高速化• 仮想メモリ• Plugin機能
• Shell
• G::DB::BDB
• G::Infinity
• G::Inspire
2008年リリース予定(現在1.8.2)
• 全体• 200以上のアプリ• コード最適化• CPAN型インストーラ• ドキュメント整備• 新ウェブサイト• GUI/Shell/Perlのシームレスな連携
• プラットフォーム• Windowsサポート終了• MacOS Xがメイン• KNOB
G::IO (コアクラス - codename Skyline)• モジュールロードの遅延処理により、起動が10倍以上高速化(ほぼ起動時のオーバーヘッドはなしに)
• 効率的なデータキャッシュにより、ゲノムファイルのロードを5~10倍高速化
• 大量のアクセッサー追加、データ構造アクセスの最適化
• 対応ファイル形式の大幅増(GenBank, EMBL, Fasta, swiss, SCF, PIR, GCG, raw, ace)、ネットワークファイルをUniform Sequence Accessで取得可(embl, genbank, genpept, swiss, refseq)。
• ~/Plug-in(あるいは$ENV{GLANG_PLUGIN})以下におかれた全.pmファイルの@EXPORTを自動的にロード。Gと同名のモジュールがあればオーバーライド。
• メンテナンスしやすいクラス構造
スピード大腸菌ゲノム(4.6Mbp)のGenBankファイルを読み込むと・・・
秒
秒
スピード
0 2.5 5.0 7.5 10.0
Bioperl
G
大腸菌ゲノム(4.6Mbp)のGenBankファイルを読み込むと・・・
秒
秒
スピード
0 2.5 5.0 7.5 10.0
Bioperl
G 0.200
7.100
大腸菌ゲノム(4.6Mbp)のGenBankファイルを読み込むと・・・
秒
秒
スピード
0 2.5 5.0 7.5 10.0
Bioperl
G 0.200
7.100
大腸菌ゲノム(4.6Mbp)のGenBankファイルを読み込むと・・・
バクテリア661種(1130 GenBankファイル)を対象:Intel Core 2 Duo Extreme 3 GHz Dual / 8GB RAM
全データをパース:86秒生物種毎にtRNA遺伝子のアノテーションを出力:130秒
BioPerlなら数時間かかる
秒
秒
コード比較:BioPerl vs Guse Bio::SeqIO;
$in = Bio::SeqIO->new(-file=>"ecoli.gbk", '-format'=>'GenBank');$seq = $in->next_seq();
foreach $feat ($seq->all_SeqFeatures()){next unless($feat->primary_tag eq ‘CDS’);print $feat->each_tag_value(“note”), “¥n”;
}
use G;
$gb = load ecoli;
foreach $cds ($gb->cds()){ say $gb->{$cds}->{note};}
コード比較:BioPerl vs Guse Bio::SeqIO;
$in = Bio::SeqIO->new(-file=>"ecoli.gbk", '-format'=>'GenBank');$seq = $in->next_seq();
foreach $feat ($seq->all_SeqFeatures()){next unless($feat->primary_tag eq ‘CDS’);print $feat->each_tag_value(“note”), “¥n”;
}
use G;
$gb = load ecoli;
foreach $cds ($gb->cds()){ say $gb->{$cds}->{note};}
use Bio::DB::GenBank;use Bio::Seq;
$gb = new Bio::DB::GenBank;$seq = $gb->get_Seq_by_acc(“NC_000913”);
# $gb = load(“genbank:NC_000913”);
Shell• UNIXコマンド、Perlが一行単位で扱えるシェル
• タブ補完(ファイル名・関数名)、Emacsキーバインド、ヒストリー
• 作業ログ(そのままPerlスクリプトとして実行可能)
• 永続ワークスペース
• ヘルプ機能(G, BioPerlのドキュメント)
• Pubmed, Entrez検索
• $gb->find() • 試行錯誤を行う上で最高のツール
BDB: Bluebird/Orochi (ActiveRecord/OR mapper)
• ActiveRecordソフトウェアデザインパターン(Martin Fowler, 2002)
• データベースの1つのビュー(テーブル)が1つのクラスにORマッピングされ、ドメインロジックが自動生成されるパターン。
• BDBではこれをPerlData(多次元ハッシュ構造体)に対応させるので厳密にはActiveRecordではない。ただし、G::IO(Skyline)型構造体は例外的にG::IOクラスにマッピングされる。
• 無限次元ハッシュ構造体に対応。
• SQLiteをバックエンドに使用。が、ありとあらゆるDBで利用可能。(DBI)
• SQLiteはGと一緒に勝手にインストールされ、一緒にセットアップされる。設定などは一切不要。
• 効率的なデータキャッシュにより、DBへのアクセスは最小になっている
Virtual Memory
G-language GAE v.1
Pre
lud
e
Od
ysse
y
Perl Interpreter
Flatfile Database
GenBank EMBL SWISS
Syste
ms
file
stdin
RAM
outfile
Virtual Memory
G-language GAE v.2
Skylin
e
Od
ysse
y
Perl Interpreter
Flatfile Database
GenBank EMBL SWISS
Syste
ms
file
stdin
RAM
outfile
DB
D
DB
I
RDBMS
PostgreSQL
mySQL
Oracle
Sybase
Informix
Before Bluebird…
With Bluebird…
Bluebird
DBMS
Bluebird DBMS
BDB: Bluebird• APIはSDBと類似。
• データはViewでもOK。(事前にSQLにてcreate viewは当然必要)
• データは当然リモートでもOK。
$gb = load("ecoli");db_save($gb, "ecoli"); #データベース作成
$gb = db_load("ecoli"); #ActiveRecord生成say $gb->cds(); #データベースから取得say $gb->{thrA}->{translation}; #データベースから取得$gb->{recA}->{note} .= “ appending comment to DB”; #データベースに代入
$gb = db_load("ecoli", "clone"); #メモリに再取り込み
$db = db_load("gene", -driver=>"mysql", -database=>"mus_musculus_core_46_36g", -host=>"ensembldb.ensembl.org", -port=>3306, -primarykey=>"gene_id" );say $db->{239967}->{status};
BDB: Bluebird ユーズケース• 一部分しか利用しない大規模データを扱う
• UniProt KB (Swiss-Prot + TrEMBL)を全部メモリに入れるのは現実的ではないが、BDBなら必要なエントリを必要なときにだけ、メモリで扱うのと同じ使い勝手でとってこれる。
• データベースクエリの利点を使う
• create viewにより目的に応じてデータベース結合をしたり、 $bdb->search()によりSQL文で検索ができる。
• 複数のプログラムから同じ構造体をリアルタイムに編集しながら扱う
• Infinityとの連携(後述)
• データベースを扱いたいような場合に簡単にPerlDataとして扱える
• ウェブとの連携、EnsEMBLのような外部DBの利用
Infinity: (疑似共有メモリ分散コンピューティング)
• PCクラスタ環境は通常Beowulf構成(共有ハードドライブ、非共有メモリ)
• スーパーコンピュータのように共有メモリではない
• 共有メモリ環境(スーパーコンピュータ)上でプログラムを共有するにはCORBA通信やスレッディングを考慮する必要がある
• グリッドコンピューティングの効率的な付加分散などの手軽さがない
• InfinityはPerlにおけるイテレータクロージャ単位の分散がコード中で可能
• 分散方法はグリッドコンピューティング
• メモリの共有は定数はSDB、変数はBDBで実現
Flatfile DatabaseGenBank EMBL SWISS
G-language GAE v.2 core
Skyli
ne
Ody
ssey
Perl Interpreter
Syst
emsfile
stdin
Virtual Memory
RAM
outfile
DBD
DBI
RDBMSPostgreSQL mySQLOracle SybaseInformix
Bluebird DBMS
user
G s
erve
rap
ache
G client
browser
HTML
dynamic TCP/IP
static CGI
Internet
DBD
DBI
RDBMSPostgreSQL DB2mySQL informixOracle sybase
Bluebird DBMS TCP/IP
Infinity
Infinity: コード例sdb_save($gb, “gb”);
my $init_sub = '$gb = sdb_load($gb);';
my $loop_sub = ‘ my $seq = translate( $gb->get_geneseq( $_ ) ); next if ( length $seq < 300 ); to_fasta($seq, -name=>”$gb->{$_}->{gene}|$gb->{$_}->{product}”, -output=>”f”, -filename=>”/tmp/$_.fst); system( "blastall -p blastp". " -d /db/sp_blast/sp". " -i /tmp/$_.fst". " -o /home/gaou/tmp/$_.rst" ); ‘;
my $end_sub = 'system( "rm -r /tmp/*.fst" );';
$gb = load “ecoli”;my @cds = $gb->cds();
distribute( $init_sub, $loop_sub, $end_sub, ¥@cds );
2Genome Analysis EnvironmentSimulation Environment
e
benchmark kevin & samaguchi
Server & CPU Speed
kevin 1cpu 1.00
kevin 2cpu 1.63
kevin 1cpu + samaguchi 1 cpu 1.97
kevin 4cpu 2.30
kevin 2cpu + samaguchi 2cpu 3.22
kevin 4cpu + samaguchi 4cpu 4.61
CPU: Pentium 4 Xeon Dual 2.8GHz + Hyper Threading Technology
Memory: 4GB
computational time (s)
Inspire: WebベースGUIフレームワーク• GUIの開発は非常にコストがかかり、専門知識がないと難しい
• HTMLベースであれば、容易にマルチメディアを駆使したものが誰でも簡単に作れる
• AJAXの浸透により、ウェブアプリケーションはデスクトップアプリケーションと比較して遜色なくなってきている。
• Google Docs、iPhone/iPod Touchアプリケーション
• Windowsは、Internet ExplorerをOSの基盤に融合したために、インタフェース上の限界がウェブと同等になってしまった。結果的に、少しでも 洒落たウェブのインタフェースはWindowsのアプリケーションに勝る。
• ウェブ上の無限のリソースと連携可能
ajax - asynchronous javascript and xml
javascript + xmlHttpRequest
ブロードバンド
高速CPU
XML
Adobe AIR
Flash/Flex, HTML/AJAXベースのウェブアプリを
簡単にデスクトップアプリに
Apple DashboardWindows GadgetSlingshot (Rails)
etc...
Inspire: WebベースGUIフレームワーク• GUIの開発は非常にコストがかかり、専門知識がないと難しい
• HTMLベースであれば、容易にマルチメディアを駆使したものが誰でも簡単に作れる
• AJAXの浸透により、ウェブアプリケーションはデスクトップアプリケーションと比較して遜色なくなってきている。
• Google Docs、iPhone/iPod Touchアプリケーション
• Windowsは、Internet ExplorerをOSの基盤に融合したために、インタフェース上の限界がウェブと同等になってしまった。結果的に、少しでも 洒落たウェブのインタフェースはWindowsのアプリケーションに勝る。
• 一方で、ウェブアプリケーションはローカルファイルにアクセスできない
• ウェブサーバを含めてしまえばいい!
• ウェブ上の無限のリソースと連携可能
Inspire: WebベースGUIフレームワーク
HTML
JavaScript
FLASH QuickTime
Plug-in CSS
HTTP Server
CGI
G-language
Client
Local File
Ext-JS/YUIBDB
RDB
Perl
Remote File
Adobe AIRブラウザ、Flex/FlashJavaScript/Ext-JS:YUI
+ ApacheCGI/Perl - G-language
Inspire例• Genome Projector
• 次に河野君から発表
• Document Center
• G自体のGUIも作りたい。
http://www.g-language.org/gdoc/
ウェブサービスとの連携• BioHackathon 2008
• BioMOBYのウェブサービスを検索可能に
• help -w
• ws()でサービスを実行可能
ウェブサービスとの連携• BioHackathon 2008
• BioMOBYのウェブサービスを検索可能に
• help -w
• ws()でサービスを実行可能
今後の課題(1)アプリケーション• KNOBはやはり使いやすい。アプリケーションインストールの手間は無視できない
• G-language Mac版は既にEMBOSSやRを同梱
• これを押し進めて、ワンパッケージでなんでも動く環境を。次期リリースでは早速EMBOSSをより使いやすく設定し、BLASTなどを含める予定。
• ウェブサービスとの連携
• help -w にMOBY以外のウェブサービスも追加
• 類似サービスでの分散
• ローカルにインストールされている場合はローカルアプリを、ない場合はウェブサービスを使うような、気の利いた自動判別を行えるインタフェースを。
今後の課題(2)新しいGUI• まずインストールで問題の多いGDやChart::Graph::GnuplotをInspireに移行
• その場でコマンドを打ちながら、リアルタイムに結果が変わり、同じ事をGUIでも操作できる新GUIを開発する
• イメージ的にはApple Motion。タイムラインにオブジェクトが存在し、「ビヘイビア」に相当する解析をかぶせていくことで解析を実現
• リアルタイムにtoggle可能なパラメータ、「ゆらぎ」をもたせた結果オブジェクトなどもできれば実現したい。(勝手に近傍のパラメータでバックグラウンドでデータを出し、結果がたまにこれらのパラメータで「ゆらいで」見える)
• LayerKit(CoreAnimation)?
今後の課題(3)ドキュメンテーション
• 新ウェブサイト
• 英語・日本語のチュートリアルやマニュアル
• AJAX Document Center
• 解析に重点を置いたレビュー投稿中
• オープンバイオ本!
• 徹底的なドキュメント作成
• 目的別の用例集
• チュートリアル
• tutorial / exampleコマンド?
今後の課題(4)ファジーな解析機能
• ファジーな解析機能
• たとえば、localAlignment()という関数が、速度重視の時はBLATで、細かくみたいときはssearchで(当然Infinity使って)、通常はBLATで初期フィルタ、次にBLAST、その次にssearchなど、勝手に使い分けてくれると非常に嬉しい。
• multipleAlignment()でMAFFT, ClustalW、T-COFFEE、MUSCLEなども同様。
今後の課題(5)データキャッシュ• データキャッシュ
• ほとんどの解析は、世界中のバイオインフォマティシャン総体でみたときに、重複が多いはず。例えばヒトゲノムをUniProtにあてるなど。こういう結果をキャッシュを使ってすぐに返せるようにしたい。
• ウェブサービスの新しい形態?
• あらかじめデータをキャッシュしておけば、類似する結果とかをだしてあげることができるので、「ゆらぎ」のあるGUIと連携できるんじゃないか。
ロードマップ
• ~1.8.10• 新インストーラ• G::Seq::, G::Tools::, G::SystemsBiology::クラス群リファクタリング、ドキュメント整備
• ~1.8.20• G::IO::, G::DB::クラス群リファクタリング
• ~1.9.x• 新GUI
• なるべく年内に2.0を目指す
鶴岡市Tsuruoka City
山形県
Thank you.