bioanalyzerのファイルパーサーを作った話
これはkyoto.bioinfoアドベントカレンダーの記事です.
adventar.org
TL;DR
bioanalyzerの結果を可視化するためのpythonスクリプト(PyBioAnalyzer)を書いた.
github.com
目的・動機
用意した核酸がNGS等あとの実験に大きく影響を及ぼす場合,電気泳動装置を使ってサンプルがキチンとできているのかを確認することが多いです.電気泳動装置の中でそこそこ有名なものとしてagilent社のbioanalyzerというのがあり私はよく使っています*2.マイクロチップ型電気泳動というものらしいです.bioanalyzerの詳しい説明はなんとagilentの人が日本語の解説記事を過去に書いていたのを発見したので,そちらを参照ください.
www.jstage.jst.go.jp
さて,単一バンドの場合ならbioanalyzerで善悪がすぐにわかるのですが,長さの分布が複雑なライブラリの場合目視で確認するのは結構しんどいです.bioanalyzer付属のソフトウェアで可視化して検討することも可能ですが,付属のPCでしか扱えないし,なんだか使いづらくて何ができるのかよくわからないです.
ということで,pythonで好きにカスタムする方が良いかなと思い,PyBioAnalyzerというのを作ってみることにしました.
インストール
pip install pybioanalyzer
で入ります.やったね!
PyBioAnalyzerができること
pybioanalyzer --folder_name example/ --assay_type HS_DNA --min_lim 30 --max_lim 500 --disable_ladder
とすると,以下のようなplotが出てきます.
自分で色々カスタムしたい場合には,以下のような形で動かしてください.
また,一応ladderがまともに流れているかどうかを確認することもできます.
import matplotlib.pyplot as plt from pybioanalyzer import PyBioAnalyzer pba = PyBioAnalyzer(folder_name, assay_type) # 時間と長さの関係を確認 pba.linearity_check() plt.show() #結果のtable表示 pba.summary # plot pba.plot_samples(pba.BAfiles, [args.min_lim, args.max_lim], ladder = args.disable_ladder) # 自分で追加 plt.~~~~
bioanalyzerの出力ファイルに関して
実のところ,ここまでで話は終わってしまっているのですが,流石にもうちょっと何か書こうと思い,bioanalyzerの出力形式でも書いてみることにします.
キャピラリー電気泳動なので,測定されているのは「どの時間に,どのくらいのシグナルが得られたか」という情報です.
時間を核酸の長さに変換するために,ラダーの情報が用いられます.
ラダーはbioanalyzerに付属のもので,ソフトウェア内部でラダーのピークの検出とピークと対応するべき長さのアノテーションが自動的に付けられるのだと思われます.
付属ソフトウェアから出力されるフォルダの構成は以下の通り.
. ├── 2100\ expert_High\ Sensitivity\ DNA\ Assay_DE13804795_2019-10-10_19-27-39_Ladder.csv ├── 2100\ expert_High\ Sensitivity\ DNA\ Assay_DE13804795_2019-10-10_19-27-39_Results.csv ├── 2100\ expert_High\ Sensitivity\ DNA\ Assay_DE13804795_2019-10-10_19-27-39_Sample1.csv └── 2100\ expert_High\ Sensitivity\ DNA\ Assay_DE13804795_2019-10-10_19-27-39_Sample2.csv
Ladder, Sampleはサンプルごとのシグナル情報を含んでおり,Resultsには各サンプルのまとめが記載されています.内部ではこれらを読み込んでそれぞれ必要な情報を頑張って抜き出しています.
Resultsには,濃度などの情報が細かく記載されているのですが,今回はladderのSize-Timeの情報しか用いていません.
濃度情報を拾ってplotに反映させることも一瞬頭をよぎったのですが,実用的にはintensityの情報だけで十分なのでひとまずおいておきました.
ポエムなど
このスクリプト自体は以前書いたもので,今回の記事を書くにあたって見直したところ,今見ると色々と気になるところが出てきてすごく書き直したくなってしまいました*3.
まあこのツールはちょっとしたものなんですが,予想外に満足感が結構得られてしまって,こういう身の回りのちょいツールを作るのって時間対心理効果のコスパが良いなと思いました*4. これで気分が良くなって,ラボにQseq100というbioanalyzerに似た別のキャピラリー電気泳動が導入されたこともあり,こちらのファイルのパーサーも一応作成してみたりしましたが,色々なランモードが設定できるのとファイルの形式がややこしくて対応するのが大変で中途半端になっています*5. ファイル形式が扱いやすいと助かりますね.
もし使ってくれたら嬉しいです.また,今回できていない機能や改善点・問題点などあったらプルリクなりissuesに投稿するなりして頂けたら幸いです.*6
COI開示
agilent社, BiOptic社とのいかなる利益関係もありません.