t_kahi’s blog

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

【KNIME】複数のデータからそれぞれ最小・最大値を含む行を除くKNIME Workflow

こんばんは,@PKです.

同僚から相談があり,複数のデータからそれぞれ最小・最大値を含む行を除きたい,と相談があって調べていました.

イメージとしては以下の通りで,それぞれの条件のデータから"Cell Count"が最小値・最大値のデータを除いて出力する,というものです.
f:id:t_kahi:20190701210544p:plain

このWorkflowは,例えばデータ数が多すぎるときにある程度まとまった部分だけを抽出することでデータ量を削減する時などに使用できそうです.
HCAのデータは特にデータ量が膨大になるので,少しでもデータの削減したい,というニーズはあるかと思います.

最後に今回説明したKNIME Workflow全体の動画をお示しします.

KNIME Workflowの概要

今回紹介するWorkflowは以下の通りです. f:id:t_kahi:20190701213930p:plain

ポイントとしては,

  1. 「Group Loop Start」で複数の列をまとめてループする
  2. 各グループごとに統計値を出力し,Min/Maxを抽出してそれをReferenceにデータから除く

という流れで進めていきました.

最小値・最大値を除く方法はほかにもいくつかありますが, この質問の回答ででてきた答えが圧倒的に早いと思ったので参考にしました.
Delete Min/Max Value in a row/column - KNIME Analytics Platform - KNIME Community Forum

まず「Group Loop Start」でループさせる列を選択します.今回は"Well","timepoint"を選択すると以下のように出力されます.
f:id:t_kahi:20190701215433p:plain

「Group Loop Start」ノードは地味に便利ノードで最近よく使います.
nodepit.com

続いて,「Statistics」で数値データの統計量を取得します.
「Statistics」は数値データが含まれているカラムの統計量(Min, Max, Mean, SD...)をまとめて取得してくれるノードです. nodepit.com

ノードを繋げてそのまま実行するだけで,以下のように統計量を取得できます.
f:id:t_kahi:20190701220121p:plain

得られた結果から「Column Filter」でMin/Maxの列だけを除き,そのあと「Transpose」で行と列を入れ替えればOKです.
f:id:t_kahi:20190701220609p:plain

最後に「Reference Row Filter」で"Cell Count(Min/Max)"をリファレンスとしてフィルターをかけると,以下のように最小値・最大値を除いた結果を得ることができます.
f:id:t_kahi:20190701220936p:plain

あとはループを回すと,まとまった結果を得ることができました.
f:id:t_kahi:20190701221414p:plain

まとめ

ちょっとしたデータ加工の話でしたが,細かいTipsとして知っておくと便利かもと思います.

最後に今回の一連の流れをまとめた動画を作成してみました.
youtu.be

今後もこのようなWorkflowのTipsも紹介したいと思います.