はじめに
こんにちは、自動化大好きまっきーです。今回は"Ungroup"というNodeを紹介したいと思います。
このNodeは、名前の通り、GroupByを解除するというような使い方に有効です。
実用的には、下のすさんのブログで紹介されているように、縦方向にセル結合されたものを1行ずつにするというような使い方くらいかなと思います。
今回のテーマ ~Ungroup~
なお、今回使用するデータは以前GroupByで使用したデータと同じです。もしGroupByってなんだ?と言う方がいらっしゃれば、下記の記事をご覧ください。
Workflowは下記からダウンロードできます。
覚えてほしいこと
UngroupはListを縦方向に解除する
やりたいこと - Ungroup
「GroupByで合計残業時間を算出したあと、GroupBy前のデータ(勤怠表のデータ)に戻す」
ということをやりたいと思います。
GroupByで合計残業時間を算出したあと、GroupByで潰してしまった日付ごとの情報を復活させます。
事前準備
GroupByのConfigure
まずはGroupByのConfigureです。GroupByする際に、List型のデータを作成していることが、Ungroupで元データを復活させるためには必要です。
ListはManual Aggregationのオプションで指定することができます。
ちょっと一言でも解説しますが、ここが元データに戻すために必要になるポイントとなります。
List(リスト)とは?
List(リスト)とは、データの塊を角かっことカンマで表現したものです。英語では、"Collection"と言ったりもします。
例えば、
「りんご、いちご、みかん」
と言うデータの塊があるとすると、List(リスト)型で表現すると、
[りんご, いちご, みかん]
と言うようなデータの持ち方になります。
KNIMEでは、Listのデータ型は下のような[...]と言うアイコンで表現されます。
また、全てのデータを横に並べると大変なことになってしまうので、3データくらい見せた後は「...」で省略されます。
Ungroupの使い方
このNodeは、Listというデータ型になっているものを縦方向に展開する機能を持っています。
Workflow
Ungroupを使ってGroupByする前のデータ、JoinerのOutputを再現したいと思います。
Confirm - Before After
出勤日と残業時間のコラムに注目ください。GroupByで一度殺してしまっている、日付単位の情報が、Ungroupにより復活していることがわかると思います。
Configure
UngroupのConfigureは非常に単純です。縦方向に分解したいリスト型を選択するだけです。
一応Additional Settingsについて解説しておきます。
Remove selected collection column
選択されたリスト型のコラムを出力から除外する
Skip missing values
欠損値があった場合スキップするオプションです
Skip empty collections
もしデータのない空リストだった場合はスキップします。
ちょっと一言
Ungroupの注意点
注意点として、決してUngroupがGroupByの元情報を認識しながら元に戻すわけではないということがあげられます。
ちょっとこの表現では分かりにくいかもしれないのですが、UngroupはListを縦方向に分解する能力しか持っていないということです。実験してみましょう。
ListとList(Sorted)の違いについて - GroupBy
実験する前段階として、GroupByの機能でListを作るときに、List(sorted)というオプションがあったと思います。この機能について少しだけ解説します。
これは、Listを作る際にソートをかけておくというオプションです。
例えば、縦方向に
4
3
2
6
というようなデータがあった場合には、通常のListだと、
[4,3,2,6]
というデータの持ち方になりますが、List(Sorted)のオプションを適用すると、
[2,3,4,6]
というデータの持ち方になります。
今回の例で言うと、残業時間と勤務日をListにしたと思います。これをList(Sorted)をしたものと比べてみましょう。
ソートしたリスト
ソートしないリスト(元データの順番を継承)
List(Sorted)を使ってUngroupした場合どうなるか?
さて、このList(Sorted)を使用してListを作った場合の結果をお見せします。
ご覧の通り、元データと異なるデータが作られてしまいました。つまり、UngroupはListを単純に縦方向に分解する機能しか持っていないと言うことです。
List型はExcel Writerには対応していない
List型を含んだままそのままExcel に出力しようとしても出力できません。下記のエラーが出ると思います。
ERROR Excel Writer
Execute failed: Unsupported column type 'List'. Please remove corresponding column(s) from the input table.
サポートしてないので、Column FilterとかであらかじめInputからリスト型は抜いておいてね。と言う意味ですね。
おわりに
いかがでしたでしょうか。List型を使うのは少し高度なNodeに出てくることがあります。応用の聞くNodeなのかもしれません。こんなところで使ってます!と言うようなコメントあれば嬉しいですね。
ではまた!
一日1回押していただけると大変応援になります↓
余談
またまた楽天モバイルのお話。楽天の三木谷さんが、赤字決算のお話してましたね。
「1141億円」の赤字だと言うことです。そりゃそうですよね、1年間無料で楽天モバイルのプランを拡大しまくってるんですもん。なおかつポイントあげちゃってますし。
契約数が想定以上に多かったみたいです。今の時期に楽天さんがお金くれるって言うんですからありがとうございますって感じで受け取ります。格安SIMとしては、サービスとしてとてもいいと思います。
また不便なところなどレポートしたいと思いますー、ではまた!
参考リンク
- すさんのブログ:
【KNIME】ノード紹介:cell splitterとUngroupのコラボ 〜文字列を縦方向に分割したい〜 - 非プログラマーのためのインフォマティクス入門。(仮)
- KNIME公式Node Pit(英語):
- KNIME Example Workflow(英語):