はじめに
特定のデータを抜き出す第5弾、自由にフィルタを行えるRule-based Row Filter/Splitterを扱います。
今回のテーマ ~Rule-based Row Filter/Splitter~
自由度が高いので、これを多用すると他の人が読みづらいWorkflowになってしまいます。
なので、複数条件を組み合わせたフィルタを行いたい場合など、他のNodeでは表現できないなと思うときによく使用しています。
Workflowは下記からダウンロードできます。
覚えてほしいこと
条件の記述方法は「条件 => TRUE 」
やりたいこと
複数の条件でフィルタをかけてみましょう。
出身が"~県"でなく、かつ入社日が20140401の行を抜き出してみます。
Rule-based Row Filterの使い方
自由度の高いルール記述式フィルタです。条件が複数あるときによく使用します。
Workflow
Confirm - Before After
このように、複雑な複数条件でもきれいに抜き出せるのがこのNodeのいいところです。出身が"~県"でなく、かつ入社日が20140401の行を抜き出しています。
Configure
Configure の設定画面を見ていきます。この画面構成は、String Manipulationと同じですね!
Step1 - Expression 条件を記述
String Manipuratonと同様、ここが最も重要な部分です。判別条件を記載していきましょう。記述方法は、「条件 => TRUE 」というような形です。
デフォルトでは、すべての行の判定がFALSEになっています。なので条件を記載してTRUEの行を指定していきましょう。
まずは条件を記載していきます。String Manipuratonと同様、使用できるコラムや変数一覧、条件式は緑の枠から選べます。数値だけでなく、文字列も条件に記載できます。
今回の条件は、「出身が"~県"でなく、かつ入社日が20140401」です。
なので使用する関数は下記の通りですね。
- NOT? :NOT直後の表現が否定になる。
- LIKE ? :LIKE直後の文字列をワイルドカードが含まれている文字列として検索する
- AND :複数の条件をつなげる。「かつ」という意味
- =:数値や文字列どちらでも使用できる。「等しい」という意味
今回の条件の場合、下記のような形で書けます。1つ1つ分解していくと分かりやすいですかね。()で囲んでいるのは、必ずしも必要ではありませんが、分かりやすいようにこのようにやることをおススメします。
Step2 - Include / Exclude設定
TRUEになった行を抜き出すのか、FALSEになった行を抜き出すかの設定です。基本はTRUEになったものを抜き出すという形でいいのでデフォルト設定のIncludeでいいと思います。
ちょっと一言
Configureの画面にある最初の4行「//」の意味
必ずデフォルトで入っている、1行目から4行目にある緑色の行は、コメントとして認識されていて、書き方の例を示しています。このNodeでは、「//」から始まる行はすべてコメントとして認識されて、利用されません。
どうしても自由度が高いので、メモを残さないとブラックボックスツールになりやすいです。なので、このコメント行を利用して、1行1行の意味を文字で書き起こしていくことをおススメします。
SplitterのConfigure画面
何度も出てきていますが、FilterとSplitterは設定画面が同じです。なので、今回も一応Configureの画面だけ貼っておきます。デフォルトでは、TRUEが上のOutputとして出力されますが、Step2の部分で上下を入れ替えることも可能です。
複数行にすれば、OR条件を表現できる
今回例として1行のみ記載しましたが、複数行を記述してフィルタ条件をいくつも設定することもできます。
例えば、今回の条件に「出身地が兵庫県はTRUE」という条件を追加したとします。するとOutputに1行追加されます。
またこれらはOR条件なので、例えば7行目に「東京都ならFALSE」というような条件を追加しても、無意味です。もし東京都の結果を抜きたいとしたら、5行目のAND条件を追加しましょう。
LIKEとMATCHESの違い
これらは、Row Filterにも出てきた、3つのOptionの違いです。
LIKEオプション:contains wild cards(ワイルドカードを含む)
MATCHESオプション:regular expression(正規表現を含む)
また、Rule-based Row Filter/Splitterでは、case sensitive matchにチェックがついているような扱いになっているようで、常に大文字と小文字は区別されます。
例にある TRUE => TRUE の意味
これを使用すれば、デフォルト設定をTRUEに変更することができます。
何も設定を行わないと、条件に当てはまれなかったものはFALSEとして扱われます。
何も条件を記述しないで実行するとどうなるか、実験してみましょう。
次に、TRUE => TRUEだけを記述してみましょう。すると、デフォルト設定がFALSEからTRUEに変更されます。
おわりに
簡単だったでしょうか?これで大体のデータが自由に抜き出せるようになったと思います!
KNIMEのユーザってどれほど増えているんでしょうか、、インフォコムさんからのセミナーの案内、来てはいますがどれくらいの方が参加しているのかなーと。。気になるところです。
参考リンク
-
KNIME TV Youtube (英語):
- KNIME公式Node Pit(英語):
Rule-based Row Filter — NodePit