コンテンツにスキップ

クロス集計(横持ち変換)

縦に並んだ値を横に広げます。 「店舗 × 月の売上表」のようなクロス集計表(ピボットテーブル)を作ります。

逆向き(横を縦に積む)は縦持ち変換です。

入出力

ポート内容
入力データデータ
出力データ縦に展開する列 + 横に展開する列の値ごとの列

Spark エンジンでも動きます。

縦・横・集計対象に指定しなかった列は出力から消えます。

設定項目

縦に展開する列を選択必須
表の行になる列。複数選べます。
横に展開する列を選択必須
表の列になる列。複数選べます。この列の値が、そのまま列名になります。

集計の設定

関数と対象列の組は 1 つだけです。データ集計のように組を並べることはできないので、合計と平均を同時に出したいときはノードを 2 つに分けます。

関数を選択必須
交わるところに入れる値の作り方。集計しない / 合計 / 平均 / 中央値 / 最小値 / 最大値 / カウント / ユニークカウント。
集計対象列を選択必須
交わるところに入れる値の元になる列。1 列だけ選びます。関数によって選べる型が変わります。関数がカウントのときは、この項目は出ません(行数を数えるので対象列が要りません)。関数が「集計しない」のときは対象列を選択という名前で出ます。

オプション

発生した欠損値を置換する
組み合わせがなかったところに入れる値。空のままだと空欄になります。
数値型の集計対象列の欠損値を置換して処理する
集計する前に、元データの空欄をこの値に置き換えます。数値型の集計対象列だけが対象です。

関数ごとの違い

選んだ関数によって、集計対象に選べる列の型が変わります。

関数と、選べる列の型
関数選べる型集計対象列
集計しないすべての型要る
合計数値要る
平均数値 / 時間要る
中央値数値要る
最小値数値 / 日付 / 日付時間 / 時間要る
最大値数値 / 日付 / 日付時間 / 時間要る
カウント—要らない(行数を数える)
ユニークカウントすべての型要る

データ集計にある標準偏差はここにはありません。 標準偏差のクロス表が欲しいときは、先にデータ集計で縦持ちのまま出してから、この機能で横に広げてください。

変換のしかた

入力

店舗月売上
渋谷1月120
渋谷2月140
新宿1月98

設定 — 縦に展開する列 店舗、横に展開する列 月、関数「合計」、集計対象列 売上

出力

店舗1月2月
渋谷120140
新宿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月
渋谷120140
新宿98

2. 空欄を 0 で埋める

お題 — 売上がなかった月を 0 と表示したい

入力 — 例 1 と同じ 店舗 月 売上(新宿の 2 月の行がない)

設定 — 例 1 に加えて「発生した欠損値を置換する」に 0

出力

店舗1月2月
渋谷120140
新宿980

3. 件数のクロス表を作る

お題 — 地域 × 商品区分の件数を見たい

入力

地域区分
東日本食品
東日本食品
東日本日用品
西日本食品

設定 — 縦に展開する列 地域、横に展開する列 区分、関数「カウント」(集計対象列の項目は出ません)

出力

地域日用品食品
東日本12
西日本1

4. 縦持ちから元に戻す

お題 — 縦持ち変換したデータを元の形に戻したい

入力

店舗列名値
渋谷1月120
渋谷2月140
新宿1月98

設定 — 縦に展開する列 店舗、横に展開する列 列名、関数「集計しない」、対象列 値

出力

店舗1月2月
渋谷120140
新宿98

5. 2 つのキーを行にする

お題 — 店舗と担当者の組み合わせを行にしたい

入力

店舗担当者月売上
渋谷田中1月120
渋谷佐藤1月60
渋谷田中2月140

設定 — 縦に展開する列に 店舗 と 担当者 の 2 つ、横に展開する列 月、関数「合計」、集計対象列 売上

出力

店舗担当者1月2月
渋谷田中120140
渋谷佐藤60

6. 2 つの軸を横に並べる

お題 — 「地域 × 期」のように、2 つの区分を掛け合わせた列が欲しい

入力

顧客ID地域期購入額
1A上期100
2A下期400
3B上期200

設定 — 縦に展開する列 顧客ID、横に展開する列に 地域 と 期 の 2 つ、関数「合計」、集計対象列 購入額

出力

顧客IDA_上期A_下期B_上期
1100
2400
3200

列名は 2 つの値を _ でつないだものになります。

7. 空欄を 0 とみなして平均する

お題 — 未入力を 0 として、区分ごとの平均を出したい

入力

区分期購入額
A上期
A上期400

設定 — 縦に展開する列 区分、横に展開する列 期、関数「平均」、集計対象列 購入額、「数値型の集計対象列の欠損値を置換して処理する」に 0

出力

区分上期
A200

空のままにすると空欄の行が分母から外れ、400 になります。

関連