はじめに
今回はみんな大好き、ピボット機能を紹介します。レポート作成を自動化するとき、ピボットをしてマトリックスのように最終出力したいというよう要望が多々あります。
KNIMEではデータベースの形になってしまっているので、レポート配信を最終目標にする場合は、必須の機能ですね。
GroupByのConfigureとほとんど同じなので、まだGroupByを知らない方は、まずGroupByを押さえておくと入りやすいと思います。
今回のテーマ ~Pivoting~
ピボットといえば、縦に連なっているデータを集計しながら横に並び変えてマトリックスのように見せる機能ですよね。
覚えてほしいこと
ピボットテーブルの
行をGroup
列を Pivots
値をAggregation
で指定
やりたいこと
Excelのピボット機能です。GroupByは、行と値のみを指定していましたが、今回はそれに"列"を追加した機能です!
今回は勤怠表を、行を社員、日付をコラムに持っていって、残業時間をマトリックスで見せる処理を行います。
Pivotingの使い方
Workflow
Workflowは下記からダウンロードできます。
Confirm - Before After
さて、まず驚くのはOutputのポートが3つもあることですよね。基本1番上(Pivot table)のみ使用します。
1つ目(Pivot table)
使用はしませんが、2つ目(Group totals)と3つ目(Pivot totals)はそれぞれ下記のようになっています。
2つ目(Group totals)
2つ目のGroup totalsは、GroupByの出力と同じです!つまり、Configure でいうPivotsの部分が除かれています。
Excelでいう列の部分を除いた結果が、2つ目に出力されています。
3つ目(Pivot totals)
2つ目のPivot totalsは、ConfigureでいうGroupの部分が除かれた結果です。
Excelでいう行の部分を除いた結果が、3つ目に出力されています。
Configure
ステップは、5StepありますがPivotの分が追加されたのみで、ほとんどGroupByと同じです。
Step1 - Group settings
GroupByのStep1と全く同じです。
グループを指定します。今回は各社員ごとの残業時間を算出したいので、「社員番号」と「名前」をGroup columnの緑の枠に入れました。
この設定はピボットテーブルでいう”行”に相当します。
Step2 - Pivots settings
ここがGroupByと唯一異なる点です。ここでは、行から列に移動させたいコラムを選択します。今回は、出勤日を列に移動させたいので、出勤日を緑の枠に入れました。出勤日の種類の数だけ、新しいコラムが作成されることになります。
この設定はピボットテーブルでいう”列”に相当します。
Step3 - Aggregation column setting
GroupByのStep2と全く同じです。
どのコラムを計算させるかを指定します。
ピボットテーブルでいう"値"に相当します。
選択可能なコラム一覧がAvailable Columnsに出てきます。このコラム一覧から、計算させたいコラム(今回は"残業時間[h]")をダブルクリックするか、1クリックしてAddのボタンを押せば、計算対象に指定できます。
Step4 - Aggregation setting
GroupByのStep3と全く同じです。
実際に計算させる方法をここで指定します。Aggregationの部分をクリックすると、計算方法が指定できます。今回は合計を求めたいので、"Sum"を指定しました。
Step5 - Column Naming
GroupByのStep3に相当します。
Pivotingでは、GroupByでのColumn namingが、Aggregation nameに変わっています。また、Column nameというもう一つのプルダウンが追加されています。
コラム名を、Pivotで指定した列の値のままにしたい場合は、Column nameに"Pivot name"を指定するだけでいいと思います。
ちなみにその他の設定は、Aggregation name(GroupByの設定でいうColumn naming)をPivotの値の前後に入れたい場合に使用します。
おわりに
単純に縦横を入れ替えたい場合は、TransposeというNodeがあります。それはまた今度解説できればと思います。もう超頻出のNodeはだいぶカバーできたと思います。
GWコロナ休業ばっかでつまらないですね、、早く遊びに行きたいーー
余談
行から列へ変換するような変化のあるおススメ映画は、「ビューティフル・マインド」です。 これあらすじは見てのお楽しみの方がいいと思うので、あまり言いませんが、最後のおじいさんになったときの姿が個人的に大好きです。なるほどな、こういう展開かと映画後半からなってきますのでぜひ最後まで見てください!
参考リンク
-
すさんのBlog:
【KNIME】ノード紹介:Transpose, Pivoting 〜表(table)の縦と横(行と列)を入れ替えたい〜 - 非プログラマーのためのインフォマティクス入門。(仮)
- KNIME E-Learning Course(英語):動画だけでなく、サンプルデータや答えのWorkflowも掲載されています。
- KNIME公式Node Pit(英語):
- KNIME Example Workflow(英語):