t_kahi’s blog

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

【KNIME】複数のExcelファイルをループを使って読み込み⇒加工⇒出力を行う

KNIMEを使っていて,苦手と感じてどうしてもうまく使うことができなかったLoopとVariableをようやく使うようになったので(今更ですね…),メモもかねて,自分がよく使う処理をまとめておきます.

t-kahi.hatenablog.com

上記リンクのような実験を複数行う場合,いちいち「Load Layout」と「Excel Reader」でファイルを読み込むのはめんどくさいので,ループ処理を行います.

以下に今回お話しするKNIMEフローをお示ししています.
今回はプレートレイアウトが記載されているExcelファイルを複数取得し(赤点線),プレートレイアウト形式をテーブル形式に変換します(Load Layout).その後,元のExcelの名前を参考にして新しいExcel ファイルを作成する(青点線)という操作を行いました.

f:id:t_kahi:20180930223400p:plain

ループ処理に関しては「す」さんのブログで丁寧にまとめてあります(私も勉強させていただきました).

sumtat.hatenablog.com

それでは簡単にフローの流れを示していきます.

まず,「Load Files」でディレクトリを指定すると,入っているファイルのLocationとURLを得ることができます.

f:id:t_kahi:20181001200143p:plain

次に,ループを始める「Table Row to Variable Loop Start」というノードを用います.
このノードはテーブルの各行の内容を変数として受け渡す+行ごとにループ処理することができるノードです.
このノードを通すと,以下のような変数を作ることができます.
変数は黒い線ではなく,赤い線と赤丸で結ぶのが約束です.

f:id:t_kahi:20180930230849p:plain

続いて,「Load Layout」へつなげる操作です.
「す」さんのブログにも書いてあったよう,この辺の操作がやややり辛いです.
もともと変数を使わないノードは,変数をつなぐ赤丸が隠れていますので, 右クリック⇒Show Flow Variable Portsで以下の赤丸を出すことができます.

f:id:t_kahi:20180930225906p:plain

「Table Row to Variable Loop Start」と「Load Layout」をつないだら,OptionでLoad Layoutが読むことのできるファイルを適当に選択します.
この操作を行わないと,処理を行うことができません.

その後,Flow Variablesでlayout fileを選択できるタブがあるので,先ほど作った変数URLを選択します.
この操作を行うと,layout fileのパラメーターは変数で処理されますという警告が画面にでます.
この状態でようやく複数のプレートを読み込む準備ができました.

f:id:t_kahi:20180930231050p:plain

このまま「Excel Writer」で出力をするとファイル名を一つしか記入することができないので,出力するファイル名をもとのファイル名と関連した名前する準備を青点線部分のフローで行います.

以下のように「string manipulation」で,変数URLの部分を使って,そこから元のファイルの名前を新しいカラムに追加しておきます. f:id:t_kahi:20180930231739p:plain

続いて「Table Row to Variavle」でテーブルの行を変数にします(最初の一行だけ変換されます).
その後,「Create File Name」というファイルの名前を作る便利ノードを使って,ファイル名を作成します.
出力するディレクトリの場所を記入したあとに,File Nameを記入する欄の右側にある【V】をクリックすると,どの変数を使うか指定できるのでここで指定をしておきます.
これによって,「filePath」という変数が新たに作られました.

f:id:t_kahi:20180930232221p:plain

ファイルと出力ファイルの名前の準備ができたので,「Excel Writer」で書き出していきます. ファイル名を記載する部分には,「filePath」変数を指定しておきます.

そして,最後にループはここまでという「Variable Loop End」というノードを追加しておきます.

あとはKNIMEの処理を流すだけで,アウトプット先のディレクトリに加工されたファイルが出力されます…!ありがたい…!

本当に今更ですが,ループと変数処理が使えるようになるのは本当に便利と感じました.

「Create File Name」はExcelの出力どうしよう…と思って探したら見つけたノードでした.今後も使っていこうと思います.