fantom_zona’s diary

Impact the world!!!

bioanalyzerのファイルパーサーを作った話

これはkyoto.bioinfoアドベントカレンダーの記事です.
adventar.org

TL;DR

bioanalyzerの結果を可視化するためのpythonスクリプト(PyBioAnalyzer)を書いた.
github.com

追記・編集履歴

pipで使えるようにしてみました.初めてsetup.py書きました.*1
それに伴って,一部編集しました.

目的・動機

用意した核酸が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社とのいかなる利益関係もありません.

*1:たのしい.

*2:tapestationというのも研究所にあるようです

*3:でも面倒だったのであまり困ってないので少し手直ししたくらいにとどまった

*4:自分へ.これは研究ではないので研究で満足しましょう.(つらい)

*5:それはそうと,Qseq100はbioanalyzerに対して短いDNAの波形が細かく見れてすごい

*6:今更ですが,これバイオインフォ?と不安になってきました.未定義語に漬け込んで好き放題言うマン