まえがき
こんにちは。日々高額な怪しい白い粉を作っている、とある研究者(ケミスト)です。
そんなケミストがプログラミングを学んでこんなことをやってみたという一例を紹介します。
AI使ってすごいことをやる!!というのを期待した方には申し訳ありませんが、普段の業務の面倒毎を自動化して楽をするという類の話になりますので、どうぞご容赦ください。
本記事では主に機能の紹介をしますので、作り方やコードが気になる方は私がいつか書くかもしれない記事を読むか、Githubのリポジトリを見ていただければと思います。
今回ターゲットにしたのはHPLC(高速液体クロマトグラフィー)のデータ整理です。HPLCがよくわからないという方はこちらを参考にされると良いと思います。
見るのが面倒という方は、混合物のなかに何がどのくらい入っているかを分析するすごい装置だと思っていただければ結構です。
たとえばAとBを混ぜてCを作る実験をする際に、AとBが時間とともに減少してCが増えていくのを確認するために使ったりします。
私は研究職の中でも、特にHPLCをよく使う部署にいるので実験しているときはほぼ毎日使用します。これまで分析した数も5桁は超えていることでしょう。
分析してデータを見てそれで終わりの場合は特に手間はないんですが、複数の分析データから不純物の推移を確認したり、それを報告書用に整理したりといった業務が入ってくると結構手間がかかります。
分析データをエクセルに貼り付けて、いろいろ整形してこんな表を作ることも多いのではないでしょうか?(例:反応時間毎に出発物質が減って、生成物が増えていくのを表にする)
RRT | 反応1時間 | 反応2時間 | 反応3時間 |
---|---|---|---|
0.5 (出発物質) | 95.50% | 85.40% | 65.30% |
1.0 (生成物) | 3.50% | 13.50% | 33.50% |
1.5 (不純物) | 1.00% | 1.10% | 1.20% |
実験の中でいくつも分析を行い、それぞれの分析データから各ピークの推移を確認して、重要な知見を見出す・蓄えていくというのが日々の流れになるのですが、データ整理の方に労力を取られると、本来一番大切な「データのなかから重要な知見を見出す」という作業にかける時間や元気がなくなるというのが問題になります。
HPLCのシステムの方で整理できてしまえばいいんですが、マニュアルを読み込んで確認した限り、多分今のところできないと思われます。というか出来るなら今回作ったアプリはただのゴミと化しますorz(もしやり方知っている方は教えてください!)
前置きが長くなりましたが、以下作成したアプリの紹介をしていきます。
概要(できること)
- HPLCのデータをまとめて編集(RRTの計算、blankや溶媒ピーク等を面比計算から除外)
- 複数のHPLCデータをまとめて、各ピークの推移を表にする
- 編集したデータや表をエクセルファイルとして出力する
使い方
Githubからクローンまたはzipをダウンロードして、main.pyを実行していただくことで使用できます。
必要な環境は以下の通りです。
- Python 3.7
- openpyxl 3.0.3
- PySimpleGUI 4.16.0
は?PythonなんかPCに入ってるわけないだろ?というほとんどの化学研究者のために、なんとかexeファイル等、難しい環境構築をせずにダウンロード&クリック一発で使えるようにできないか検討中です。
今の所はこの辺を頑張った上で使っていただくしかない状況なので、使いたいけどよくわからないという方がもしいたらご相談ください。
前準備
自動化といっておきながら申し訳ないんですが、データを入力するためにHPLCデータを所定のフォーマットでテキストファイルにする必要があります。(手動で・・・・・)
2020.03.20追記 データの前準備が不要になりました!!!
HPLCのデータを一つずつエクセルにコピペする代わりに、このテキストファイルを作ってもらえれば、その後の作業は楽できますよという立ち位置です。
一応HPLCのシステムからコピペで簡単にできますのでご勘弁を。どうにかここを簡単に出来る方法がないか模索しているところです。(HPLCのデータファイルの中身を知る方法がわからなくて悩んでいます・・・)
テキストファイルのフォーマットは以下のようになります。サンプルファイルがGithubにあるので見てもらうのが一番早いと思います。
#sample_1
1.222 10000 10.0
2.222 10000 10.0
9.123 80000 80.0
#sample_2
1.222 10000 10.0
2.222 10000 10.0
9.123 40000 40.0
10.221 40000 40.0
「#分析サンプル名」のあとに(頭の#(半角)は必須です)、「RT・Area・Area%」をタブ区切りで1行ずつ入れた形になります。これを編集したいデータ分繰り返します。(サンプル名以外はHPLCのシステムからコピペでいけるはずです。)
データ入力
ようやく本題です。
アプリを起動すると以下の画面になります。
Inputの枠の中の、【Select File】を押すとファイルダイアログが開くので、前準備したテキストファイルを選んでください。その後、【Input Data】を押します。
すると、以下のような画面になるかと思います。
データ編集
RRTの計算
複数の分析データを並べて評価する際に、RT(保持時間)をそのまま使うとRTが変動した場合に同一ピークかどうか分かりにくくなるので、なにかしら基準となるピークのRTを基にRRT(相対保持時間)を計算することがあるかと思います。
RRTの計算を行う場合はEditの中の【Calc RRT】を押します。
ボタンを押すとポップアップが表示されるので、基準としたいピークのおおよそのRT(以下Base RT)を入力します。
入力したBase RT±0.2の間のピークをサンプル内から探索し、該当ピークのRTを基にサンプル内の各ピークのRRTを計算します。また、範囲内のピークが存在しなかった場合は入力したBase RTを使ってRRTを計算します。
下図の場合Base RTに9.1を入力していて、サンプルの中にRT 9.123のピークがあるので、RT 9.123を基準として各ピークのRRTを計算します。
ピークに名前をつける
RRTを計算した後は、分かりやすくするために特定のピークに名前をつけることもありますよね(Blank, 溶媒ピーク、生成物、不純物Aなどなど)。また、その後特定のピークだけ面積比の計算から除外することもあると思います。この処理をエクセルでひとつひとつやろうとすると割と面倒です。
まずは名前付けのところを紹介します。【Set Peak Name】を押すとポップアップが表示されます。
入力されたデータ内のすべてのRRTが表示されるので、名前をつけたいRRTの横の枠に名前を入力します。全てのピークに名前をつける必要はなく、名前がない場合は空白でも大丈夫です。
OKを押すと全てのサンプルで下図のように名前が設定されます。
ピークの除外
続いて面積比計算からの特定ピークの除外機能です。
分析の目的にもよりますが、定量値よりもサンプル内の各ピークの割合に注目したいことはままあります。その際面積比を見ますが、ブランクピークや溶媒ピークがAreaとして大きく出ていると色々と不都合が生じます。
そんな時は、面積比の計算からどうでもいいピークを除外してしまって、見通しをよくするとスッキリします。
上述したピークの名前付けを行なったあと、【Set Exclude】を押すと下図のようにポップアップが表示されます。
面積比計算から除外したいピーク名にチェックをいれてOKを押すと、下図のようにex-Area%のところに補正した後のArea%が表示されます。
出力
最後に出力です。Outputの【Export Excel File】を押すとファイル保存用のダイアログが表示されるので、保存場所とファイル名を指定して保存を行なってください。
今の所は暫定として以下のような様式で出力を行うようにしてあります。
下図のようにサンプル毎に概要を横に並べたシートが1枚
また、下図のように各ピークのサンプル間の推移を表にしたシートが1枚
以上2つのシートで構成されるワークブックが出力されます。出力の様式は人それぞれ求めてるものが違うと思うので、もっとこういう様式で出力してくれたらいいのにという要望がある方は是非コメントください。
実際使ってるの??使えるの??
私の所属している会社ではPCでPythonが使用できず、またexeファイルとしての使用も許可がおりませんでした。よってこのアプリケーションそのままでは使用していません。(台無し)
ただし、似たような機能をエクセルVBAで実装し(ほとんど業務時間外に、そしてボーナス等は当然でません)、今はそちらを使っています。じゃあVBAよこせよ??え??
どれくらい速くなるのかというのは実験で分析したサンプル数や、サンプル毎のピーク数にもよりますが、ピークもサンプルも多くて以前なら30分以上はかかっていた実験のデータ整理が、2, 3分で終わるようになりました。
同僚にも配布して非常に好評ですので、興味がある方は是非使ってみてください。
コメント