データの縦持ちと横持ち
from データハンドリングと前処理, 多次元分析
多次元分析のための適切なデータ構造
多次元分析を行うためには、分析対象のデータを、そのために適切な構造に整えておく必要がある
データの「縦持ち・横持ち」、Tidy dataといった概念が重要
データの「縦持ち・横持ち」
下のデータは、同種類の量的変数(メジャー)である「科目A」「科目B」「科目C」が横に展開されている
このようなデータの表し方を(俗に)横持ちという(wide型(wide format)ともいう)
https://gyazo.com/c06ff886c2a915400754eb7b379868fa
この、同種類の量的変数(メジャー)である「科目A」「科目B」「科目C」の値を同じ列に縦方向に並べる、つまり、「科目」という質的変数(ディメンション)と「点数」という量的変数(メジャー)の2変数に変換すると、以下のようなデータの持ち方になる
このようなデータの表し方を(俗に)縦持ちという(long型(long format)ともいう)
https://gyazo.com/ebbae0492c569034a10c2666117303b5
縦持ち・横持ちと多次元分析
上の例のように、横持ちデータを縦持ちデータに変換することで、切り口となる質的変数(=ディメンション)と集計対象となる量的変数(=メジャー)をそれぞれ一列ごとにまとめるのが、多次元分析(クロス集計ベースの分析)においては非常に重要である
必要に応じて、データの前処理として、この変換操作を行う
縦持ち・横持ちを変換する方法
どうやって変換するか?
関数を駆使して変換(楽しいがたいへん)
VBAで変換(昔はよくやったらしい)
Excel向けのTableauアドインを使う(まあまあ便利)
参考:Excelの横持を縦持ちにする #Python - Qiita
Rのtidyverseや、PythonのPandasでpivot系関数を使う(RやPythonができるなら…)
Power Queryを使う(超便利)
Power Queryでのデータの縦持ちと横持ちの変換
横持ちデータが必要な場面
散布図を描く場合には、データが横持ちである必要があることが多いので注意
散布図は「2変数の値の組(ペア)」が必要
例えば下のデータで、学生ごと、つまり「学生ID」ごとに、「科目Aの点数」と「科目Bの点数」という2つの数値の相関をみるための散布図を描きたければ、「学生IDごとに科目Aと科目Bの点数のペアが整理されているものが1件のレコード」であることが必要で、そのような形式は横持ちになる(つまり、「科目A」というメジャーと「科目B」というメジャーを横に並べ、「学生IDごとの値」がレコード1件ごとにまとまっている必要がある)。
https://gyazo.com/c06ff886c2a915400754eb7b379868fa
その他、機械学習などの統計的モデリングをする際には、「説明変数(独立変数)」や「目的変数(従属変数)」が1列ごとにまとまっている必要があり、上の「科目A(の点数)」「科目B(の点数)」のように、「同種類の変数」であっても縦に変換せず横に持っておくケースが多い