BioRubyにおける高速なBLAST結果処理機能の実装

Slides:



Advertisements
Similar presentations
だい六か – クリスマスとお正月 ぶんぽう. て form review ► Group 1 Verbs ► Have two or more ひらがな in the verb stem AND ► The final sound of the verb stem is from the い row.
Advertisements

Windows Azure ハンズオン トレーニング Windows Azure Web サイト入門.
KNOB CD-bootable Linux で開くバイオインフォマティクスの世界
なぜ今Pythonか? Pythonをお薦めする18の理由
初めてサテライトラボを利用する学生は1-4のステップが必要です。
植物系統分類学・第13回 分子系統学の基礎と実践
奈良先端大・情報・蛋白質機能予測学講座 川端 猛
英語勉強会.
第1回レポートの課題 6月15日出題 今回の課題は1問のみ 第2回レポートと併せて本科目の単位を認定 第2回は7月に出題予定
BioRuby プロジェクト In-house R&D 環境のためのオープンソースプラットフォーム
Ruby Extended Library Howto
2009年 3月 17日 法政大学 常盤祐司、児玉靖司、八名和夫、Ivan Ho、Billy Pham
Ruby Extended Library Howto
What did you do, mate? Plain-Past
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
日本人の英語文章の中で「ENJOY」はどういうふうに使われているのか
東京工科大学 コンピュータサイエンス学部 亀田弘之
Delphi Day ~Delphi 概要、および新バージョンのご紹介~
Silverlight とは.
Let’s discuss in English! What are your opinions? Let’s discuss it!
SP0 check.
BioRuby プロジェクト In-house R&D 環境のためのオープンソースプラットフォーム
Windows Summit /8/2017 © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
第20章 Flyweight ~同じものを共有して無駄をなくす~
Reasonので + Consequence clause
Chapter 4 Quiz #2 Verbs Particles を、に、で
The Sacred Deer of 奈良(なら)
CRLA Project Assisting the Project of
table 'results' SELECT name, teacher FROM results;
第1回オープンバイオ研究会 w/ SIG-BMK.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
BioRubyの開発と 遺伝子情報解析への応用 大阪大学遺伝情報実験センター ゲノム情報解析分野 後藤 直久 2005年1月21日.
Deep Learningを用いたタンパク質のコンタクト残基予測
ソフトウェアデザイン工学 EPMの適用結果報告
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
実行時情報に基づく OSカーネルのコンフィグ最小化
2017年度 植物バイオサイエンス情報処理演習 第5回 公共データバンクの遺伝子情報
2018年度 植物バイオサイエンス情報処理演習 第5回 公共データバンクの遺伝子情報
産学連携BICSシンポジウム シリーズ3回 (日本化学会春期年会 平成18年3月28日)
豊田正史(Masashi Toyoda) 福地健太郎(Kentarou Fukuchi)
2016年度 植物バイオサイエンス情報処理演習 第6回 情報処理(4) データを加工する・2
Satoru Ishikawa Satoru Satake Denis Vazhenin
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
レビューとは (プロジェクト管理の観点から)
バイトコードを単位とするJavaスライスシステムの試作
データ圧縮技術による文字列照合処理の高速化に関する研究
22 物理パラメータに陽に依存する補償器を用いた低剛性二慣性系の速度制御実験 高山誠 指導教員 小林泰秀
2018年度 植物バイオサイエンス情報処理演習 第12回 情報解析(2) 配列相同性解析・DNA
2019/4/22 Warm-up ※Warm-up 1~3には、小学校外国語活動「アルファベットを探そう」(H26年度、神埼小学校におけるSTの授業実践)で、5年生が撮影した写真を使用しています(授業者より使用許諾済)。
統計ソフトウエアRの基礎.
北大MMCセミナー 第62回 附属社会創造数学センター主催 Date: 2016年11月4日(金) 16:30~18:00
ー生命倫理の授業を通して生徒の意識に何が生じたかー
東北大 情報科学 田中和之,吉池紀子 山口大 工 庄野逸 理化学研究所 岡田真人
2018年度 植物バイオサイエンス情報処理演習 第13回 メタゲノミクス
Db2 Warehouse on Cloud Db2 on Cloud フルマネージドサービス提案時の注意点
Grammar Point 2: Describing the locations of objects
プログラム分散化のための アスペクト指向言語
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
コンパイラ 2012年10月11日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム理解のための 付加注釈 DocumentTag の提案
アノテーションガイドラインの管理を行う アノテーションシステムの提案
Improving Strategic Play in Shogi by Using Move Sequence Trees
集中講義(東京大学)「化学システム工学特論第3」 バイオインフォマティクス的手法による化合物の性質予測(1) バイオインフォマティクス概観
分子生物情報学(0) バイオインフォマティクス
Presentation transcript:

BioRubyにおける高速なBLAST結果処理機能の実装 Implementation of Fast BLAST output parser in BioRuby 大阪大学 遺伝情報実験センター ゲノム情報解析分野 後藤 直久 安永 照雄 Naohisa Goto Teruo Yasunaga Genome Information Research Center, Osaka Univ. Abstract BioRuby BLAST結果出力の構造 高速化の工夫 BioRuby is an open-source project which aims to provide a reusable library for biological tasks for the Ruby language. Ruby is an interpreted object-oriented scripting language with a simple and powerful syntax and native object-oriented programming support. BioRuby provides many of typical bioinformatics tasks such as manipulating DNA and protein sequences, retrieval from databases, parsing results of analysis software, and so on. By using BioRuby, we can easily and quickly write programs of bioinformatics analysis. BioRuby is a available as free software and can be downloaded at http://bioruby.org/. In this poster, we are reporting about implementation of fast BLAST result parser in BioRuby. When analyzing BLAST results, we often write small scripts in Perl, Ruby, Python, Java, and so on. The size of BLAST result output tends to become too large because of the increasing sequence database size in recent year. So, speeding up of BLAST result parsing is very important. However, there have been few programs or libraries which can be easily used under Ruby scripts. Therefore, we implemented fast BLAST result parser for BioRuby. For fast parsing, we took ‘lazy evaluation’ technique. We also used strscan, a fast string scanner library for Ruby. As the result, the running spped of it was 5-20 fold faster than BioPerl’s parser. The parser can parse default (-m 0 option) output of NCBI BLAST, including PSI/PHI-BLAST. It only requires Ruby (1,8.0 or later) and does not require any special extensions. It is available with the BioRuby distribution. 遅延評価 (lazy evaluation): 必要になったときに初めて処理を行う <NCBI BLASTのデフォルト出力 (オプション無し、または -m 0 オプション) の例> BLASTN 2.2.6 [Apr-09-2003] Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), "Gapped BLAST and PSI-BLAST: a new generation of protein database search programs", Nucleic Acids Res. 25:3389-3402. Query= ri|0610005A07|R000001A15|1277 contigs=2 ver=1 seqid=2 (1277 letters) Database: fantom2.00.seq 60,770 sequences; 119,956,725 total letters Searching..................................................done Score E Sequences producing significant alignments: (bits) Value ri|0610005A07|R000001A15|1277 contigs=2 ver=1 seqid=2 2531 0.0 ri|0610039M06|R000004L05|1061 contigs=2 ver=1 seqid=423 527 e-148 ri|4930431E11|PX00030N13|1181 contigs=2 ver=1 seqid=14024 333 6e-90 ri|1110004G14|R000015H01|1462 contigs=2 ver=1 seqid=1271 297 3e-79 ri|1700124M20|ZX00096C11|926 contigs=66 ver=1 seqid=52116 80 1e-13 ri|2900019E12|ZX00083B15|841 contigs=2 ver=1 seqid=21970 80 1e-13 ri|0610033N11|R000004G20|840 contigs=2 ver=1 seqid=368 80 1e-13 ri|9430011C20|PX00107J21|1874 contigs=4 ver=1 seqid=29908 62 3e-08 ri|B830049N13|PX00073P19|1106 contigs=2 ver=1 seqid=24417 62 3e-08 >ri|0610005A07|R000001A15|1277 contigs=2 ver=1 seqid=2 Length = 1277 Score = 2531 bits (1277), Expect = 0.0 Identities = 1277/1277 (100%) Strand = Plus / Plus Query: 1 gggcagctctctgaacagccaaggctagattgacactgagcctgtccgttcagacctcgg 60 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| Sbjct: 1 gggcagctctctgaacagccaaggctagattgacactgagcctgtccgttcagacctcgg 60 ~~~~~~~~~~~~~~~~~~~~~(中略)~~~~~~~~~~~~~~~~~~~~~~ >ri|1110004G14|R000015H01|1462 contigs=2 ver=1 seqid=1271 Length = 1462 Score = 297 bits (150), Expect = 3e-79 Identities = 207/226 (91%) Query: 113 attcgcctgttcctggaatacacagactcaagctatgaggagaagagatacaccatgggt 172 ||||| ||| |||| |||||||||| |||||||||||| |||||||||||||||||||| Sbjct: 29 attcggctgctcctagaatacacaggctcaagctatgaagagaagagatacaccatggga 88 Query: 173 gatgctcctgactatgaccaaagccagtggctgaatgagaaattcaagctgggcctggac 232 || |||||||||||||||| |||||||||||||| |||||| ||||| ||||||||||| Sbjct: 89 gacgctcctgactatgaccgaagccagtggctgagtgagaagttcaaattgggcctggac 148 Query: 233 tttcctaacctgccctacttgatcgatgggtcacacaagatcacgcagagcaatgccatc 292 ||||| || |||| |||||||| |||||||||||||||||||||||||||||||||||| Sbjct: 149 tttcccaatttgccttacttgattgatgggtcacacaagatcacgcagagcaatgccatc 208 Query: 293 ctgcgctaccttggccgcaagcacaacctgtgtggggagacagagg 338 ||||||||| ||| |||||||||||||||||||||||||||||||| Sbjct: 209 ctgcgctacattgcccgcaagcacaacctgtgtggggagacagagg 254 Score = 93.7 bits (47), Expect = 1e-17 Identities = 110/131 (83%) Query: 583 gtgcctggatgcgttcccaaacctgaaggacttcatagcgcgctttgagggcctgaagaa 642 ||||||||| || |||||||||||||||||||| | || |||||||||| ||||||| Sbjct: 499 gtgcctggacgccttcccaaacctgaaggactttgtggcccgctttgaggtactgaagag 558 Query: 643 gatctccgactacatgaagaccagtcgcttcctcccaagacccatgttcacaaagatggc 702 |||||| | |||||||||||||| |||||||||| || |||| | | |||||| |||| Sbjct: 559 gatctctgcttacatgaagaccagccgcttcctccgaacacccctatatacaaaggtggc 618 Query: 703 aacttggggca 713 |||||||||| Sbjct: 619 cacttggggca 629 Score = 56.0 bits (28), Expect = 2e-06 Identities = 106/132 (80%) Query: 419 gactttgagaagctgaagccagggtacctggagcaactccctggaatgatgaggctttac 478 ||||||||||| |||||| | ||| ||||||| |||||||||||| ||| ||| | | Sbjct: 335 gactttgagaaactgaaggtggaatacttggagcagctccctggaatggtgaagctcttc 394 Query: 479 tctgagttcctgggcaagcggccatggttcgcaggggacaagatcacctttgtggatttc 538 || ||||||||||| ||||| ||||||| | || || ||||| || ||||| |||||| Sbjct: 395 tcacagttcctgggccagcggacatggtttgttggtgaaaagattacttttgtagatttc 454 Query: 539 attgcttacgat 550 | ||||||||| Sbjct: 455 ctggcttacgat 466 >ri|1700124M20|ZX00096C11|926 contigs=66 ver=1 seqid=52116 Length = 926 Posted date: Dec 7, 2003 4:50 PM Number of letters in database: 119,956,725 Number of sequences in database: 60,770 Lambda K H 1.37 0.711 1.31 Gapped Matrix: blastn matrix:1 -3 Gap Penalties: Existence: 5, Extension: 2 Number of Hits to DB: 107,501 Number of Sequences: 60770 Number of extensions: 107501 Number of successful extensions: 2506 Number of sequences better than 1.0e-01: 9 Number of HSP's better than 0.1 without gapping: 9 Number of HSP's successfully gapped in prelim test: 0 Number of HSP's that attempted gapping in prelim test: 2471 Number of HSP's gapped (non-prelim): 31 length of query: 1277 length of database: 119,956,725 effective HSP length: 19 effective length of query: 1258 effective length of database: 118,802,095 effective search space: 149453035510 effective search space used: 149453035510 T: 0 A: 0 X1: 6 (11.9 bits) X2: 15 (29.7 bits) S1: 12 (24.3 bits) S2: 21 (42.1 bits) バージョンReference BLAST結果をHSPなどの単位で大雑把に分割する。 その後、手を加えずそのまま保持する。 初期化時 BioRubyのクラス Queryの情報 必要な部分について演算(パース処理)を行う。 一度演算した値は記憶し、二度目以降はその値を返す。 データベースの情報 メソッド呼出時 Bio::Blast::Default::Report クラス Iteration BLASTのバージョンや詳細な統計情報は必要としない場合も多い。また、スコアやe-valueが高いヒットについてのみ処理を行うなど、一部のHitやHSPのみを使用し、残りのデータは使用しない場合も多い。このような場合は遅延評価が特に有効である。 Hitの一覧 BLAST結果全体。Iterationクラスのインスタンスを内部に保持。 高速な文字列スキャナライブラリ strscan の使用 Hit HSP Bio::Blast::Default:: Report::Iteration クラス strscan (青木峰郎氏作, Ruby 1.8.0以降に標準添付) BioRubyプロジェクトは、バイオインフォマティクスに必要な機能や環境を、国産のオブジェクト指向スクリプト言語 Rubyを用いて統合的に実装することを目標にしたオープンソースプロジェクトです。 Rubyによるバイオインフォマティクス・生命情報解析用のクラスライブラリとこれを利用したツール類を開発・提供しています。 PSI-BLASTの繰り返し検索1回分の結果を格納するクラスだが、ノーマルのBLASTでも検索結果の格納に使用。Hitクラスのインスタンスを内部に保持。 機能比較 BioRuby (0.5.3) BioPerl (1.2.1) Zerg (1.0.3) * HSP 使用言語 Ruby Perl C (Perlの拡張ライブラリが存在) Bio::Blast::Default::Report::Hit クラス BioRubyの主な機能 NCBI BLAST(BLASTN/BLASTP/ BLASTX/TBLASTN/TBLASTX)対応 ○ ○ ○ (一部の統計情報に未対応) Hit 検索にヒットした配列に関する情報。HSPクラスのインスタンスを内部に保持。 塩基配列・アミノ酸配列の操作 HSPのアライメント取得 ○ ○ × HSP 翻訳, スプライシング, 検索, … PSI-BLAST対応 ○ ○ × 解析ソフトウェアによる解析の支援 WU-BLAST対応 ○ (一部の統計情報に未対応) ○ × Bio::Blast::Default::Report::HSP クラス BLAST, FASTA, HMMER, CLUSTAL W, PSORT, … HSP (High-scoring Segment Pair) に関する情報を格納。BLASTによるホモロジー検索結果の最小単位。 * Paquola, A.C.M, et al. (2003), Zerg: a very fast BLAST parser library, Bioinformatics, 19,1035-1036. HSP スクリプト内部からの呼び出し 結果の処理・解析 要旨 速度比較 データベースのデータ読み込み Hit  BioRubyはバイオインフォマティクスに必要な機能や環境をオブジェクト指向スクリプト言語Rubyを用いて統合的に実装したライブラリである。塩基・アミノ酸配列の処理や解析、公共データベースのデータ処理、各種解析ソフトウェアの結果処理等に必要な機能を備えており、生物学的解析を行うスクリプトを短時間で容易に書くことができる。BioRubyはフリーソフトウェアであり、http://bioruby.org からダウンロードできる。  今回は新たに実装した高速なBLASTパーサ(BLAST出力を読み込み解釈する機能)について報告する。PerlやRubyなどのスクリプト言語を用いてホモロジー検索ソフトウェアBLASTの実行結果を読み込み、結果の整理や解析などの後処理を加えることは広く行われている。近年のデータベース容量の増加に伴い、BLAST実行結果の出力サイズは大きくなることが多い。必然的に後処理にも長時間を要することが多くなり、高速化の重要性が高まってきている。しかし、BLAST自体は並列化などにより年々高速化されているが、実行結果の後処理に関しては高速化の検討がまだ十分になされていないことが多い。  そこで今回、高速性を重視したBLASTパーサをBioRubyに実装した。高速化のため、BLAST結果出力を大雑把に分解した後で要求された部分だけを詳細に解釈する遅延評価を導入した。他にも、Ruby標準の高速文字列スキャナを使用するなど様々な高速化の工夫を行った。その結果、広く使われているBioPerlのBLASTパーサと比較すると、12分53秒かかった処理が33秒で完了したなど、処理の内容により異なるが、5倍から20倍以上の処理速度を示した。  このパーサはNCBI BLASTのデフォルト出力(-m 0 オプション)を対象とし、通常のBLASTだけでなくPSI/PHI-BLASTにも対応している。外部拡張モジュールを使用せずRuby(1.8.0以降)標準の機能だけを使用しているため、BioRubyをインストールするだけで利用可能である。 GenBank, DDBJ, EMBL, SwissProt, KEGG, Prosite, TRANSFAC, AAindex, PDB, PIR, FANTOM, GO, … ※ HSP High-scoring Segment Pair の略。閾値を超える類似性が検出された部分配列のペア。 PentiumIII 1.0GHz, メモリ1GB, HDD 27GB, 100Mbps Ethernet, Linux 2.4.18 というスペックのマシン上でベンチマークプログラム* を10回動かしたときの平均所要時間と処理速度およびBioPerlを基準とした速度の比率を示した。 * http://bioinfo.iq.usp.br/zerg/zerg_benchmarks_1.0.tar.gz ただしBioRubyに関しては同等機能のプログラムを独自に作成した。 ベンチマークに使用したデータは以下のとおりである。 BLASTN: 104,921,408バイト, 8014エントリ BLASTX: 104,858,552バイト, 16013エントリ データ形式の自動認識も可能 ファイルやインターネットからのデータ取得 統計情報など BioFetch, BioSQL, Flatfile Indexing, DAS, KEGG::API, … BLASTN BLASTX 所要時間(s) S.D. 速度(MB/s) 速度比 所要時間(s) S.D. 速度(MB/s) 速度比 グラフ, 2項関係, 文献データなど Bio::Pathway, Relation, Reference, MEDLINE BioRuby (Ruby1.8.0) 35.325 0.032 2.83 21.3 44.821 0.084 2.23 23.9 サンプルプログラム BioRuby ( Ruby1.6.7) 49.724 0.048 2.01 15.1 79.857 0.083 1.25 13.4 各HSPについて、クエリー, ヒットした配列の名前, アライメント長, e-value, ビットスコアをタブ区切りで表示するサンプルプログラム。 BioPerl (Perl5.6.1) 751.067 2.915 0.133 1.0 1070.301 5.098 0.0934 1.0 BioRuby Project #!/usr/bin/env ruby require 'bio' ff = Bio::FlatFile.auto(ARGF) print [ 'Query', 'Subject', 'AlignLen', 'eValue', 'BitScore' ].join("\t"), "\n" ff.each do |r| qdef = r.query_def.split[0] r.each_hit do |hit| hdef = hit.definition.split[0] hit.each do |hsp| alen = hsp.align_len evalue = hsp.evalue bscore = hsp.bit_score print [ qdef, hdef, alen, evalue, bscore ].join("\t"), "\n" end ff.close Zerg-C 2.437 0.002 41.1 308 2.685 0.001 37.2 399 http://bioruby.org/ Zerg-Perl 2.605 0.002 38.4 288 2.977 0.002 33.6 360 問い合わせ先: staff@bioruby.org Zerg-Perl2 (Perlオブジェクトを作成) STAFF 36.687 0.051 2.73 20.5 57.675 0.222 1.73 18.6 片山俊明 – k@bioruby.org (プロジェクトリーダー) 中尾光輝 – n@bioruby.org 川島秀一 – s@bioruby.org 後藤直久 – ng@bioruby.org まとめ BioRubyのBLASTデフォルト出力パーサは、最速ではないものの、スクリプト言語標準搭載の機能だけを使用して書かれたパーサとしては非常に高速である。BLAST結果処理にBioRubyを使用すると、スクリプト言語の柔軟性と処理の高速性の両方を得ることが可能であり、解析作業の効率を上げることが可能であると期待される。 ※BioRubyはオープンなプロジェクトです。 いつでも誰でも開発に参加できます。 Bio::Blast::Default::Report は Bio::FlatFile によるファイル形式の自動判別に対応している。このため、上のサンプルプログラムではファイル形式 (データのクラス, 今回はBio::Blast::Default::Report) を指定していない。 (注)英文と和文の要旨は細部の内容が異なります。