KNIMEとか倉庫

KNIMEやEXCELなどの備忘録です。

【KNIME】フォルダ中の複数のファイルを統合したい

・化合物を評価していると、諸般の事情で同じ化合物を異なるアッセイ系で評価することがあるし、担当部署やプロジェクトによって評価結果のファイルが個別に構築されることがある。化合物IDは同じだが、保存されているファイルごとに、評価項目がバラバラになっている。

・このような場合に、化合物のIDをキーにして複数のファイルを統合したくなることがある。

・フォルダ中のファイル(すべてcsvを想定)を読み込み、一つにまとめるワークフローを作成してみた(下図)。

・以下、概要。

①データファイルが保存されているフォルダの場所は、今回のワークフロー(test)と同じ階層を指定した(下図)。Dataがフォルダで、その中にsample1.csv, sample2.csv, sample3.csvという3つのファイルが収まっている。ファイルは相対パスから参照する。

②空の表をTable Createrで作成し、Recursive Loopに渡して、Concatenateでくっつけていく感じにした。同じ処理が繰り返されるのではなく、処理後のファイルをstartに渡して処理を積み重ねることができるRecursive Loopを利用した。

③ファイルを読み込むメタノードの中身は、以下の通り。

・上のString Manipulation(Variable)は、Iterationを使ってRowIDを作成し、各Iterationで読み込むファイルを選抜するのに使っている。

・List Files/Foldersでフォルダ(今回はData)中からファイル情報を収集し、Row Filterのために絞り込むRowIDを取り込んでおく。Row Filterで読み込むファイルの行を絞り込み、変数化したのち、CSV Readerに渡すことで各Iterationごとに異なるファイルを読み込ませる。

・ついでに、List File/Foldersノードの表情報を参考に、Loopの回数を設定し、変数として出力した。出力した変数は、Recursive Loop Endに渡し、Max Iterationに設定した。

④Recursive Loop Endの出力は以下の通り。IDに重複が見られ、複数のファイルをくっつけた感が凄い。複数のファイルで同じ項目を評価している場合、「どちらのデータを残すか問題」が生じるが、今回はファイルごとに評価項目が被っていないので、気にせずGroupByで統合する。

⑤GroupByの設定は以下の通り。GroupsにはIDを指定し、Pattern Based Aggregationですべての項目を対象に、AggregationはFirstで問題ない(最大一つしか値が入っていない)。Missingのチェックはデフォルトで入っているが、このチェックを外す必要がある(そうしないと、Missingで上書きされる懸念がある)。

・最終的な出力は以下の通り。

・3つのファイルのデータを1つの表にまとめることができた。

CSV Reader関連で警告がたくさん出るが、一応目的の処理は実行できている。警告を減らしたければ、コンポーネント化するなどの工夫をすれば良いかもしれない。

・ワークフローは以下。

drive.google.com

・動作不良、その他不利益に関して、当方は一切補償しない。

 

おわり。