デジタル推進課

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

KNIME – 特定のデータを抜き出す3~Duplicate Row Filter~ 重複削除・重複チェック

f:id:makkynm:20201220092128p:plain

 

 

はじめに

今回も頻出Node、Duplicated Row FIilterを紹介していきます。使える場面多めだと思います。Excelでも重複チェック機能や重複削除機能はありますよね。

 

 今回のテーマ ~Duplicate Row FIilter~

Row Filterの部類としては、Splitterがないので少し異色ですが、特定の行を抜き出すシリーズに入れてます。nominal value Row Splitter等を組み合わせれば、Splitterにすることも可能です。

f:id:makkynm:20200531185456p:plain

Duplicate Row Filter

Workflowは下記からダウンロードできます。

kni.me

 

覚えてほしいこと

重複削除はRemoveモード、重複チェックはKeepモード

数値列を基準に残す行を決定したい場合はDuplicate Row Filter

 

やりたいこと

やりたいこと1- 重複削除

Excelの重複削除機能と同じことを行います。今回は例として、社員表の部署と部署IDをキーにして、重複がないように削除していきます。Excelのデフォルト設定に従って、最初に出てきた組み合わせを残し、あとから出てきたものを削除することにします。

f:id:makkynm:20200601073417p:plain

Excel - 重複削除

f:id:makkynm:20200601073349p:plain

Excel - 重複削除

 

やりたいこと2- 重複チェック

今回は削除するのではなく、重複チェックのみを行い、一回しか出てこなかったもの、重複のあるものを分類します。

 

f:id:makkynm:20200601073606p:plain

Excel - 重複チェック

 

f:id:makkynm:20200601073633p:plain

Excel - 重複チェック

 

Duplicate Row FIilterの使い方1 ~重複削除~

重複を削除するときに使います。Joiner前でよく使いますね。検証作業にもよく使います。社員表の部署と部署IDをキーにして重複を削除していきましょう。

 

Workflow

f:id:makkynm:20200601073713p:plain

Workflow - Duplicate Row Filter 重複削除

Confirm - Before After

Excelの重複削除を再現してみます。

f:id:makkynm:20200601074316p:plain

Confirm - Duplicate Row Filter 重複削除

Configure

Excelと同様の重複削除を行いたい場合はStep2以降はデフォルト設定で問題ありません。詳細を知るとExcelではできないこともできるので、解説します。

f:id:makkynm:20200601074635p:plain

Configure - Duplicate Row Filter Step1

f:id:makkynm:20200601074940p:plain

Configure - Duplicate Row Filter Step2~4
Step1 - Options 重複キーを指定

最初はGroupByでもおなじみ、重複を検索する組み合わせを指定します。エクセルの重複削除と同じ作業ですね。

 

Step2 - Duplicate rows 重複削除 or 重複チェック

重複削除か、重複チェックかを指定します。今回は重複削除なので、

Remove duplicate rows 

を選択しましょう。

 

Step3 - Row selection 残す行のオプション設定

重複が検知された場合、残す行をどれにするかを選択できます。Excelでは"First"「最初に出てきた行を残す」という設定しかできないのではないでしょうか。(できるのであれば勉強不足です、すみません)

このNodeでは残す行の設定をFirst・Last・Minimum of・Maximum of の4種類から選べます。

重複のあった場合、、

First:一番最初に出てきた行を残す

Last:一番最後に出てきた行を残す

Minimum of:指定された列の値で、最小値を持つ行を残す

Maximum of:指定された列の値で、最大値を持つ行を残す

 

f:id:makkynm:20200601075439p:plain

Configure - Duplicate Row Filter Row Selection
Step4 - Additional options 残す行のオプション設定

これはあまり気にする必要のない設定です。

In-memory computation:

RAM(作業用のメインメモリ)を使用して計算スピードを上げます。

Retain row order:

チェックを入れると、Outputで出てくる行の順序はInputテーブルで出てきた順序に沿ってソートされて出てきます。

 

Duplicate Row Filterの使い方2 ~重複チェック~

Duplicated Row Filterの本領発揮はこの機能です。Excelでも重複している行を検出して色付けすることはできますが、どの行と重複しているのかを特定するのは大変なのではないでしょうか。

この重複検知作業を、このNodeはいとも簡単にやってのけます。

Workflow

Workflowは先ほどと同じです。

f:id:makkynm:20200601085024p:plain

Workflow -Duplicate Row Filter 重複チェック

Confirm - Before After

重複チェック機能を使うと、重複チェックを示すduplicate-type-classifierと重複行を示すduplicate-row-identifierの2つのコラムを追加することができます。

f:id:makkynm:20200601194119p:plain

Confirm - Duplicate Row Filter 重複チェック

 

Configure

f:id:makkynm:20200601194322p:plain

Configure - Duplicate Row Filter 重複チェック Step2~Step4
Step1 - Options 重複キーを指定

ここは重複削除と同じです。重複を検索する組み合わせを指定します。

 

Step2 - Duplicate rows 重複削除 or 重複チェック

重複削除か、重複チェックかを指定します。今回は重複チェックなので、

Keep duplicate rows 

を選択しましょう。

オプションが2つあるので見ていきます。

duplicate-type-classifier

チェックを入れると、下記の3種類に各行を分類してくれます。

unique:テーブル内に1つしかない行

chosen:重複削除にすると残る行

duplicate:重複削除で削除される行

 

duplicate-row-identifier

どの行と重複しているかを示してくれます。

の行にのみ値があることが分かります。

重複削除で削除される行(duplicate-type-classifierがduplicate)にのみ値があり、残る予定(duplicate-type-classifierがchosen)の Row IDが記載されることになります。

 

Step3 - Row selection 残す行のオプション設定

重複削除と同じです。Chosenとされる行を選ぶ基準を選択できます。

 

Step4 - Additional options 残す行のオプション設定

これも重複削除と同じです。

 

 ちょっと一言

GroupByでの重複削除

初級編をきちんと理解している方であればお気づきかもしれません。重複削除については、GroupByでも同じことができます。私は重複削除を行う場合はGroupByを使ってしまうことが多いです。重複削除と同時に、使わないコラムを削除することができるからです。

今回の重複削除をGroupByで行うとこんな感じの設定になると思います。

f:id:makkynm:20200601085006p:plain

GroupByでの重複削除

f:id:makkynm:20200601084826p:plain

GroupByでの重複削除

 

f:id:makkynm:20200601084913p:plain

GroupByでの重複削除

GroupByとDuplicate Row Filterの違い

Duplicate Row Filterではごとに扱いますが、GroupByではごとに扱います。Duplicate Row FilterでしかできないのはMinimum ofもしくはMaximum ofの数値列を基準に残す行を決定したい場合です。

他の数値コラムの最小の値を持っている行を抜き出したい!というとき、GroupByでは各コラムごとの相関を持っていないので、そのようなことはSorterを組み合わせないとできません。しかし、Duplicate Row Filterは、行ごとに処理をするので、これが可能です。

 

Row selection "Minimum of"の例 - 重複削除

 

Row Selectionで、Minimum ofなど、数値列を基準に列を残せるといいました。これの例を重複削除モードで見ていきましょう。

Inputで入力されたExcel Readerのテーブルと、「First」で重複削除したOutput、「Minimum of 入社日」で重複削除したOutputを並べてみました。

f:id:makkynm:20200601081626p:plain

Confirm - Duplicate Row Filter 重複削除 Row Selection

部署が営業の行に注目してみてください。

Firstでは、最初に検知された2行目の「社員番号A002」の行が残っていますが、

Minimum of 入社日では、入社日の一番早い、4行目の「社員番号A004」が残っています。

 

 

Additional options - Retain row orderの例

続いて、Retain row orderの例を見ていきましょう。

Row SelectionをMinimum of 入社日の状態にして、Retain row orderのチェックを入れた場合と、外した場合で比べてみます。

f:id:makkynm:20200601083827p:plain

Confirm - Duplicate Row Filter 重複削除 Retain row order

先ほど同様部署が営業の行に注目してみましょう。Outputの全体の値は変わっていないですが、Outputで表示されている順番が、チェックを外すと、3行目から2行目に移りましたね。

Retain row Orderは、元々のInputテーブルの順番通りに並べ替える設定でした。なので、チェックを入れると元あったInputテーブルの順番に並ぶのは自然でしょう。

チェックを外すと、順番は重複検査行の出てきた順番になります。重複検査行は、営業が2行目ですね。なのでRetain row orderを外すと、Outputも2行目に出てきます。

 

 

おわりに

気軽に重複チェックができるようになると、いろんな場面で活躍できるのではないでしょうか。特にデータ量が多いデータに対して、重複削除をExcelでやると固まっちゃいますからね。

もうここまでくればKNIMEをほとんど使いこなせているのではないでしょうか!ぜひ自動化ツールだけではなく、日々の1回限りの検証作業などにも使っていってください!

 ではまた!

 

 

 

参考リンク