デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - 特定のデータを抜き出す1 ~Row Filter / Splitter~

f:id:makkynm:20201219193711p:plain

 

 

はじめに

今日は超頻出Nodeを解説します。このNode、Excel Readerの次に説明すべきものなのですが、JoinerやGroupByを早めに説明すればKNIMEの使える場面を想像してもらえるかなと思い、後回しにしました。

正規表現(regular expression)や、ワイルドカード(wildcard)を使えるようになるとよりパワフルになりますが、その詳細はここでは触れないことにします。

 

今回のテーマ ~Row Filter / Splitter~

FilterとSplitterには、いくつもの種類があります。今回は、その中の一番ベーシックなものであるRow Filter/Row Splitter について解説します。

f:id:makkynm:20200428082500p:plain

特定のデータを抜き出す ~Filter / Splitter~

 

覚えてほしいこと

データを捨てたいときは"Filter"

残したいときは"Splitter" 

 

やりたいこと

やりたいこと1

社員表で、部署が「営業」の人を抜き出す

f:id:makkynm:20200429093205p:plain

やりたいこと1

  

やりたいこと2 

勤怠表で、残業時間の合計が10[h]以上の人を抜き出す

(前回のGroupByの結果を使います)

f:id:makkynm:20200429093641p:plain

やりたいこと2
やりたいこと3

欠損値(エクセルでいう空白セル、KNIMEでいう"missing value / ?")になっている行を抜き出す。社員表で、生年月日の値が一部なかった(欠損値)とします。

f:id:makkynm:20200429105748p:plain

やりたいこと3
やりたいこと4

社員表で、部署が「営業」の人とそれ以外で分ける

 

f:id:makkynm:20200429000622p:plain

やりたいこと

 

Row Filterの使い方(やりたいこと1~3)

Workflow - やりたいこと1

社員表のデータを使って、営業の人だけを抜き出していきましょう。 

f:id:makkynm:20200429110313p:plain

Workflow - やりたいこと1

Workflowはこちらからダウンロードできます。

hub.knime.com

 

Confirm - Before After - やりたいこと1

Confirmの結果を先に見ていきます。

f:id:makkynm:20200429111914p:plain

Row Fliter

Configure - やりたいこと1

今回は3Stepです。

f:id:makkynm:20200429112322p:plain

Row Filter Configure
Step1 - Filter Criteria

まず、Filterの基準を設定します。Includeは「含む」、Excludeは「除く」ですので、「By attribute value」「by number」「row ID」の3つから選択します。今回は「Include rows by attribute value」を選択します。

その他のFilter Criteria についてはちょっと一言コーナーで解説します。

Step2 - Column value to test

次に対象のコラム名を選択します。今回は「部署」に対してフィルタを適用したいので、「部署」を選択しました。Excelでいう、プルダウンメニューを押す作業ですね。

f:id:makkynm:20200429113033p:plain

Column value to test

 

Step3 - Matching criteria 

 最後にフィルタの基準を選択します。大きく分けて3種類あります。

1.「use pattern matching(文字のパターンでフィルタ)」

2.「use range checking(数値の範囲でフィルタ)」

3.「only missing values match(欠損値でフィルタ)」

 

 やりたいこと1では、営業を選択したいので「use pattern matching(文字のパターンでフィルタ)」を使います。「営業」と入力してもいいですし、プルダウンから営業を選択してもいいです。以上でフィルタは完了です!

Excelでいうと、下記のようにチェックマークを入れる感覚ですね。

 

f:id:makkynm:20200429113158p:plain

Matching criteria - use pattern matching

 

また、下に3つのチェックボックスがあると思います。今回の場合、case sensitive matchはあってもなくてもいいです。これらの意味は、ちょっと一言で解説しますが、これらのオプションを使うとExcelのテキストフィルタのようなことが可能になります。

 

Workflow - やりたいこと2

GroupByの結果を使って、残業時間の合計が10時間以上の人を抜き出していきましょう。 

f:id:makkynm:20200429120743p:plain

Workflow - やりたいこと2

Workflowはこちらからダウンロードできます。

hub.knime.com

 

Confirm - Before After - やりたいこと2

Confirmの結果を先に見ていきます。

f:id:makkynm:20200429121141p:plain

Row Filter

Configure - やりたいこと2

お気づきかと思いますが、やりたいこと1とほぼ変わりません。

Matching criteria には、2.「use range checking(数値の範囲でフィルタ)」を選択します。

Lower boundに下限値

Upper boundに上限値

を入れて終了です。

f:id:makkynm:20200429121510p:plain

Row Filter Configure - やりたいこと2

 

Workflow - やりたいこと3

社員表で、生年月日の値が一部なかった(欠損値;エクセルでいう空白セル、KNIMEでいう"missing value / ?"))として、欠損値になっている行を抜き出すことをやってみます。

f:id:makkynm:20200429122246p:plain

Workflow - やりたいこと3

 

hub.knime.com

Confirm - Before After - やりたいこと3

Confirmの結果を先に見ていきます。

f:id:makkynm:20200429122607p:plain

Confirm - Before After - やりたいこと3

Configure - やりたいこと3

この設定、もっと簡単です。

Matching criteria に、3.「only missing values match(欠損値でフィルタ)」を選択して終了です。

f:id:makkynm:20200429122822p:plain

Configure - やりたいこと3

Row Spliterの使い方(やりたいこと4)

Workflow - やりたいこと4

f:id:makkynm:20200429123137p:plain

Workflow - やりたいこと4

hub.knime.com

Confirm - Before After - やりたいこと4

Row Splitterは、Outputが2つあるのでConfirmのボタンも2つあります。"Filtered"が上のOutput、"Filtered Out"が下のOutputを確認できます。

f:id:makkynm:20200429123543p:plain

Row Splitter Confirm

Confirmの結果を先に見ていきます。

f:id:makkynm:20200429124345p:plain

Configure - やりたいこと4

Configure - やりたいこと4

Row SplitterのConfigureは下図のようになっています。

f:id:makkynm:20200429124532p:plain

Row Splitter Configure

はい、気付きましたか?

そうです、Row Filterと全く同じです。

Row SplitterとRow Filterの違いは、フィルタに引っかからなかったデータを捨てるかどうかです。

データを捨てたいときは"Filter"

残したいときは"Splitter" 

だけ覚えておきましょう。

 

 ちょっと一言 

Use pattern matchingの3つのオプションの使い方 

User pattern matchingには下に3つのチェックボックスがあると思います。これはそれぞれ下記の意味を持ちます。この3つは覚えるとかなりできることが増えるので、ぜひ使ってみてください。

case sensitive match(大文字と小文字を区別)

・contains wild cards(ワイルドカードを含む) 

ワイルドカード文字 意味
* 0文字以上の「任意の文字列」を表す("空文字"を含む。未入力のセルは含まない)
?

「任意の文字列」であり、かつ「文字数が1文字の文字列」を表す

  参考:【Excel】 ワイルドカード文字について詳解 - Qiita

・regular expression(正規表現

  参考:基本的な正規表現一覧 | murashun.jp

 

これらは、Excelのテキストフィルタに感覚が似ています。

f:id:makkynm:20200429115753p:plain

テキストフィルタ

 

 

"Include rows by number"の使い方 

今回は"Include by attribute value" を詳しく解説しましたが、その他のFiltering Criteriaも軽く触れておきたいと思います。

 "Include rows by number"は、行数でFiltering するものです。Defaultでは、下図のようになっていて、これは「1行目から1000行目を取り出す」という設定です。

f:id:makkynm:20200429100130p:plain

"Include rows by number" デフォルト値

"to the end of the table"にチェックを入れると、Last row numberをテーブルの終端に自動的に設定してくれます。

私は「1行目だけいらないんだよなー」というときに よく使います。

"Exclude rows by number"で、First row numberとLast row numberをともに1にすることで、1行目が取り除けます。

 

 "Include rows by row ID" の使い方 

Row IDとは、Confirmの画面で一番左に出てくる、行のヘッダ情報です。

f:id:makkynm:20200429100531p:plain

Row ID


 "Include rows by row ID"は、このRow IDの名前を使用して、Filtering ができるのがこの設定です。例えば、下図のように設定すると、Row1(上の図でいう2行目)を抜き出すことができます。

f:id:makkynm:20200429102736p:plain

"Include rows by row ID" Configure

また、これは正規表現(Regular Expression)を使用可能なので、たとえば任意の1文字を指定できる「.」を使用すると、「"row"+"任意の1文字"であるRow ID」つまり、Row0 ~ Row9までを抜き出すことができます。

f:id:makkynm:20200429104157p:plain

Regular Expression

 

Case sensitive match にチェックを付けると、大文字と小文字を区別するようになります。チェックをしていないと、区別しないので「row1」でもOKということになります。

"Row ID must only start with expression" にチェックを入れると、"Regular expression" に入力した文字から始まるRow IDの行を取り出せます。

 

私はこの設定を使ったことはありません。Row IDが変わるタイミングは、"Joiner" や "Concatenate" を使った後や、"Row ID"というNodeで、Row IDを変更したときかと思います。そのRow IDを基準にして何かしらのフィルタをかけたいことがあれば、使用できます。

使用例としては、Joinerの検証用でしょうか。片方のテーブルのある一行に対して、どうもう一方のテーブルがくっついたかを確認する際に使用できるかと思います。

Row IDを使用するよりも、テーブルのレコードを使用したほうが処理するNodeが多いので、Row IDでのフィルタリングの使用頻度は低いのではないかと思っています。

 

おわりに

 簡単に終わろうと思っていたのですが、ついつい長くなってしまいました。Row Filter系は絶対に出てくる頻出Nodeです。

ブログはスクリーンショットがどうしても多めになってしまうので1記事書くのにかなり時間かかってしまいますね、、

コロナ期間に初級編は少なくとも終わるように記事書いていきたいと思いますー

 

 

 

 

余談

抜き出してる感ある映画でおススメなのが、「女神の見えざる手」です!

政治の意図を叶えるために工作をする大手ロビー会社でバリバリ働いていたエリザベスが、自分の信念と異なる工作をしないといけなくなり小さなロビー会社に移籍して、真っ向から戦う話です。

物語の最初からあるフラグを見事に回収していって最終的にきれいにまとめる構成が、本当にすっきりします!ぜひ最初から最後まで集中してみてほしいです!

 

女神の見えざる手(字幕版)

女神の見えざる手(字幕版)

  • 発売日: 2018/04/03
  • メディア: Prime Video
 
女神の見えざる手(吹替版)

女神の見えざる手(吹替版)

  • 発売日: 2018/03/01
  • メディア: Prime Video
 

 

 

www.youtube.com

 

 

参考リンク