t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】実験デザインに応じてKNIME Workflowのループ処理を使い分ける

こんにちは,@PKです.

今回は,実験デザインに応じてKNIMEのループ処理を使い分けることについて紹介したいと思います.

以前,KNIMEで実験データの解析をすることについて紹介をしました.
www.t-kahi.com ここでは,データ読み込み時の注意点や,数値データの取り扱いについて説明をしました.データ読み込みの注意点はKNIME以外のツールでも共通していると思います.

実験データの解析をKNIME上でできるのは楽ですが,いちいち実験ごとにデータを「Excel Reader」で読み込んで「Excel Writer」や「TIBCO Spotfire file Writer」で出力先フォルダを選ぶのはちょっとめんどくさいです
そこでループ処理が活躍します.

私自身は,実験目的に応じて2種類のループ処理を使い分けています.
それぞれのループ処理と実験目的について,紹介していきます.

非ルーチン試験とKNIMEのループ処理

1つ目は,同じ実験装置を使って,様々な試験デザインで行う実験(非ルーチン試験と呼びます)です.

f:id:t_kahi:20190616130741p:plain

その場合は,上の図のように実験ごとにループを回し,それぞれの結果をファイルとして出力します.
得られたファイルごとにデータを可視化したり解析結果を確認し,実験結果の解釈をします.
下図はこの非ルーチン試験結果に関するKNIME Workflow例を示しています.
f:id:t_kahi:20190616135735p:plain

このWorkflowのノードの詳細については,下記記事で紹介しているのでご興味ある方は参考にしてください.
www.t-kahi.com

このWorkflowを実行すると,「raw_data」フォルダ内にあるファイルが読み込まれ,各ノードで処理された後に「results」フォルダーにそれぞれの解析結果が出力されます.
f:id:t_kahi:20190616140405p:plain
ポイントはループ内に「Excel Writer」を組み込んで,ループごとにデータの出力を行うことです.

後は出力されたファイル毎に結果の可視化・解釈をしていきます.
私は実験機器ごとにこのようなWorkflowを作って,実験データを出力し,日々の解析をしています.

ルーチン試験とKNIMEのループ処理

2つめは,同じ試験デザインの実験をルーチンで行う場合です.
スクリーニングのように多くの化合物を毎週評価するような試験では,コントロールのウェル配置や化合の場所を毎回大きく変えたりはしません.
f:id:t_kahi:20190616134512p:plain f:id:t_kahi:20190616140632p:plain その場合は,上の図のようにループ処理で全実験データを読み込んで解析した後,1つのファイルにまとめて出力します.

出力されたExcel ファイルを常に更新して読み込むようにSpotfireのファイルを設定すれば,いちいち可視化する必要もありません.

以下の3つデータ(Raw_data1~3)をサンプルデータとして用います.
f:id:t_kahi:20190616141816p:plain データには化合物名,濃度,評価結果などが同じ形式で記載されています.

ループ処理のWorkflowの概要を以下に示しています.
f:id:t_kahi:20190616142354p:plain
まず,「List Files」でフォルダを指定し,ファイルパスを取得します.
続いて,「Table row to variable loop start」でループを開始し,「Excel Reader」のファイル名をVariableポートから取得します.
「Math Formula」でデータを加工した後に,「Loop End」ノードでループを終了します.
このノードは上図のように,ループしたデータを結合した表を出力するので,この表を「Excel Writer」で出力したら終了です.

ポイントは「Excel Writer」がループの外に出すことでループ処理の結果全部を出力することです.

まとめ

KNIMEのループ処理の使い方ということで,実験デザインに応じたWorkflowの紹介をしました.
ルーチン試験と非ルーチン試験でそれぞれループ処理のやり方を変えると,データ解析の際により見やすくなります.
ルーチン試験の場合はExcel出力後にSpotfireで可視化するのが一番わかりやすいと思いますが,KNIME上でグラフや解析のノードを作りこんでも良いと思います.