クロス集計(横持ち変換)
縦に並んだ値を横に広げます。 「店舗 × 月の売上表」のようなクロス集計表(ピボットテーブル)を作ります。
逆向き(横を縦に積む)は縦持ち変換です。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | 縦に展開する列 + 横に展開する列の値ごとの列 |
Spark エンジンでも動きます。
縦・横・集計対象に指定しなかった列は出力から消えます。
設定項目
- 縦に展開する列を選択必須
- 表の行になる列。複数選べます。
- 横に展開する列を選択必須
- 表の列になる列。複数選べます。この列の値が、そのまま列名になります。
集計の設定
関数と対象列の組は 1 つだけです。データ集計のように組を並べることはできないので、合計と平均を同時に出したいときはノードを 2 つに分けます。
- 関数を選択必須
- 交わるところに入れる値の作り方。集計しない / 合計 / 平均 / 中央値 / 最小値 / 最大値 / カウント / ユニークカウント。
- 集計対象列を選択必須
- 交わるところに入れる値の元になる列。1 列だけ選びます。関数によって選べる型が変わります。関数がカウントのときは、この項目は出ません(行数を数えるので対象列が要りません)。関数が「集計しない」のときは
対象列を選択という名前で出ます。
オプション
- 発生した欠損値を置換する
- 組み合わせがなかったところに入れる値。空のままだと空欄になります。
- 数値型の集計対象列の欠損値を置換して処理する
- 集計する前に、元データの空欄をこの値に置き換えます。数値型の集計対象列だけが対象です。
関数ごとの違い
選んだ関数によって、集計対象に選べる列の型が変わります。
関数と、選べる列の型
| 関数 | 選べる型 | 集計対象列 |
|---|---|---|
| 集計しない | すべての型 | 要る |
| 合計 | 数値 | 要る |
| 平均 | 数値 / 時間 | 要る |
| 中央値 | 数値 | 要る |
| 最小値 | 数値 / 日付 / 日付時間 / 時間 | 要る |
| 最大値 | 数値 / 日付 / 日付時間 / 時間 | 要る |
| カウント | — | 要らない(行数を数える) |
| ユニークカウント | すべての型 | 要る |
データ集計にある標準偏差はここにはありません。 標準偏差のクロス表が欲しいときは、先にデータ集計で縦持ちのまま出してから、この機能で横に広げてください。
変換のしかた
入力
| 店舗 | 月 | 売上 |
|---|---|---|
| 渋谷 | 1月 | 120 |
| 渋谷 | 2月 | 140 |
| 新宿 | 1月 | 98 |
設定 — 縦に展開する列 店舗、横に展開する列 月、関数「合計」、集計対象列 売上
出力
| 店舗 | 1月 | 2月 |
|---|---|---|
| 渋谷 | 120 | 140 |
| 新宿 | 98 |
組み合わせがないところは空欄になります(新宿の 2 月)。「発生した欠損値を置換する」に 0 を入れると 0 が入ります。
行になるのは、データに実際にある縦の値だけです。 縦に展開する列が空欄の行も消えません。空欄のまま 1 行として並びます。
「集計しない」を選ぶとき
縦と横の組み合わせに値が 1 つしかないことが分かっているときに使います。元の値をそのまま置くので、集計で型が変わる心配がありません。
2 つの欠損値の設定の違い
| 見るところ | 数値型の…欠損値を置換して処理する | 発生した欠損値を置換する |
|---|---|---|
| いつ効くか | 集計の前 | 集計の後 |
| 対象 | 元データの空欄 | 組み合わせがなかったところ |
| 使いどころ | 空欄を 0 として合計したい | なかった組み合わせを 0 と見せたい |
平均ではこの 2 つで答えが変わります。前で埋めると空欄の行も分母に入り、後で埋めても分母は変わりません。
列名の付き方
横に展開する列の値が、そのまま列名になります。
| 条件 | できる列名 |
|---|---|
| 横に展開する列が 1 つ | その列の値(1月 2月 …) |
| 横に展開する列が 2 つ以上 | 値を _ でつないだもの(A_上期 A_下期 …) |
| 横に展開する列の値が空欄 | <NA> |
| できた列名が縦に展開する列の名前と同じ | 縦の列のほうに _1 が付く(店舗_1) |
値の種類が多いと列が大量にできるので、先に絞っておいてください。日付をそのまま横に展開すると、日数分の列ができます。
エラーと対処
同じ列を 2 か所に指定している
縦・横・集計対象のうち 2 つ以上に同じ列を指定したとき。どの組み合わせかによって文言が変わります。
{{invalid_cols}}列が 「縦に展開する列」と「横に展開する列」の両方に設定されています。
{{invalid_cols}}列が 「縦に展開する列」と「集計対象列」の両方に設定されています。
{{invalid_cols}}列が 「横に展開する列」と「集計対象列」の両方に設定されています。
{{invalid_cols}}列が 「縦に展開する列」と「横に展開する列」と「集計対象列」のすべてに設定されています。
直し方 — 役割ごとに違う列を指定してください。同じ列を縦と集計対象の両方に使いたい場合は、先に値を列に挿入などで列を複製します。
中央値を数値以外に掛けた
集計対象列が数値型でないときに出ます。
{{func_label}}は数値型以外には適用できません。
合計でも同じメッセージが出ますが、そちらは Spark エンジンのときだけです。
直し方 — 列の型変更で数値にするか、その型でも使える関数(最小値・最大値・カウント・ユニークカウント)に変えてください。
最小値・最大値を文字列に掛けた(Spark エンジンのみ)
{{func_label}}は文字列型には適用できません。
直し方 — 関数をカウントかユニークカウントに変えてください。Spark エンジンを使わないときは、最小値・最大値を文字列の列に掛けられます。
平均を数値・時間以外に掛けた
平均は数値型と時間型にしか使えません。
{{func_label}}は数値,時間型以外には適用できません。
直し方 — 列の型変更で数値にするか、関数を変えてください。
「集計しない」で値が重複している
縦 × 横の組み合わせに違う値が 2 つ以上あるとき。同じ値が並んでいるだけなら出ません。
縦・横のキー列に対して中の値が重複しています。「集計しない」場合はキーごとに一意の値である必要があります。
直し方 — 関数を「合計」や「カウント」に変えるか、先に重複行の処理で重複をなくしてください。
横に広げる値が多すぎる(Spark エンジンのみ)
Spark エンジンで、横に展開する列の値が 10,000 種類を超えたとき。
横に展開する列の値のユニーク数は10,000以下である必要があります。
直し方 — 横に展開する列の種類を減らします。日付なら日付の丸めで月や年にまとめる、細かい区分なら文字の置換でまとめる、といった方法があります。
集計対象列を選んでいない
「集計しない」以外の関数で、集計対象列を選択が空のまま実行したときに出ます。前の処理で列名が変わり、選んでいた列が入力データからなくなったときにも同じメッセージです。
対象の列が選択されていません。
直し方 — 列を選び直してください。
選んだ列が見つからない
縦に展開する列を選択・横に展開する列を選択で指定した列が入力データにないとき、またはどの条件にも 1 列も当たらないとき。前の処理で列名が変わった場合にも出ます。
対象の列が存在しません。
直し方 — 列を選び直してください。列名が変わりうるデータでは、名前に頼らない選び方(型で選ぶ・前方一致)に変えると壊れにくくなります。
よく使う例
1. 店舗 × 月の売上表
お題 — 明細から、店舗を行・月を列にした表を作りたい
入力
| 店舗 | 月 | 売上 |
|---|---|---|
| 渋谷 | 1月 | 60 |
| 渋谷 | 1月 | 60 |
| 渋谷 | 2月 | 140 |
| 新宿 | 1月 | 98 |
設定 — 縦に展開する列 店舗、横に展開する列 月、関数「合計」、集計対象列 売上
出力
| 店舗 | 1月 | 2月 |
|---|---|---|
| 渋谷 | 120 | 140 |
| 新宿 | 98 |
2. 空欄を 0 で埋める
お題 — 売上がなかった月を 0 と表示したい
入力 — 例 1 と同じ 店舗 月 売上(新宿の 2 月の行がない)
設定 — 例 1 に加えて「発生した欠損値を置換する」に 0
出力
| 店舗 | 1月 | 2月 |
|---|---|---|
| 渋谷 | 120 | 140 |
| 新宿 | 98 | 0 |
3. 件数のクロス表を作る
お題 — 地域 × 商品区分の件数を見たい
入力
| 地域 | 区分 |
|---|---|
| 東日本 | 食品 |
| 東日本 | 食品 |
| 東日本 | 日用品 |
| 西日本 | 食品 |
設定 — 縦に展開する列 地域、横に展開する列 区分、関数「カウント」(集計対象列の項目は出ません)
出力
| 地域 | 日用品 | 食品 |
|---|---|---|
| 東日本 | 1 | 2 |
| 西日本 | 1 |
4. 縦持ちから元に戻す
お題 — 縦持ち変換したデータを元の形に戻したい
入力
| 店舗 | 列名 | 値 |
|---|---|---|
| 渋谷 | 1月 | 120 |
| 渋谷 | 2月 | 140 |
| 新宿 | 1月 | 98 |
設定 — 縦に展開する列 店舗、横に展開する列 列名、関数「集計しない」、対象列 値
出力
| 店舗 | 1月 | 2月 |
|---|---|---|
| 渋谷 | 120 | 140 |
| 新宿 | 98 |
5. 2 つのキーを行にする
お題 — 店舗と担当者の組み合わせを行にしたい
入力
| 店舗 | 担当者 | 月 | 売上 |
|---|---|---|---|
| 渋谷 | 田中 | 1月 | 120 |
| 渋谷 | 佐藤 | 1月 | 60 |
| 渋谷 | 田中 | 2月 | 140 |
設定 — 縦に展開する列に 店舗 と 担当者 の 2 つ、横に展開する列 月、関数「合計」、集計対象列 売上
出力
| 店舗 | 担当者 | 1月 | 2月 |
|---|---|---|---|
| 渋谷 | 田中 | 120 | 140 |
| 渋谷 | 佐藤 | 60 |
6. 2 つの軸を横に並べる
お題 — 「地域 × 期」のように、2 つの区分を掛け合わせた列が欲しい
入力
| 顧客ID | 地域 | 期 | 購入額 |
|---|---|---|---|
| 1 | A | 上期 | 100 |
| 2 | A | 下期 | 400 |
| 3 | B | 上期 | 200 |
設定 — 縦に展開する列 顧客ID、横に展開する列に 地域 と 期 の 2 つ、関数「合計」、集計対象列 購入額
出力
| 顧客ID | A_上期 | A_下期 | B_上期 |
|---|---|---|---|
| 1 | 100 | ||
| 2 | 400 | ||
| 3 | 200 |
列名は 2 つの値を _ でつないだものになります。
7. 空欄を 0 とみなして平均する
お題 — 未入力を 0 として、区分ごとの平均を出したい
入力
| 区分 | 期 | 購入額 |
|---|---|---|
| A | 上期 | |
| A | 上期 | 400 |
設定 — 縦に展開する列 区分、横に展開する列 期、関数「平均」、集計対象列 購入額、「数値型の集計対象列の欠損値を置換して処理する」に 0
出力
| 区分 | 上期 |
|---|---|
| A | 200 |
空のままにすると空欄の行が分母から外れ、400 になります。