ワイドデータとロングデータ
ワイドデータ(wide data)とロングデータ(long data)[1]ワイド型(式)とロング型(式)という場合もあります。またロングを、「狭い」という意味でナロー(narrow)と表現する場合もあります。は、データのまとめ方についての用語です。
ワイドデータは横幅(列方向)が大きくなるようにまとめられたデータ、ロングデータは縦の高さ(行方向)が大きくなるようにまとめられたデータです。
ワイドかロングかは相対的なものです。従って、ワイドからロングに変換する、あるいはロングからワイドに変換するといったように、変換を伴う場合によく用いられます。
例として、次のirisデータセットをロングデータと考えます[2]irisデータセットをワイドデータと考え、600行3列のロングデータに変換することも可能です。。省略していますが、全体で150行5列のデータです。
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
7 | 3.2 | 4.7 | 1.4 | versicolor |
6.4 | 3.2 | 4.5 | 1.5 | versicolor |
6.9 | 3.1 | 4.9 | 1.5 | versicolor |
5.5 | 2.3 | 4 | 1.3 | versicolor |
6.5 | 2.8 | 4.6 | 1.5 | versicolor |
5.7 | 2.8 | 4.5 | 1.3 | versicolor |
6.3 | 3.3 | 6 | 2.5 | virginica |
5.8 | 2.7 | 5.1 | 1.9 | virginica |
7.1 | 3 | 5.9 | 2.1 | virginica |
6.3 | 2.9 | 5.6 | 1.8 | virginica |
6.5 | 3 | 5.8 | 2.2 | virginica |
7.6 | 3 | 6.6 | 2.1 | virginica |
これをワイドデータに変換すると、次のようになります。省略していますが、全体で50行12列のデータです。
setosa Sepal.Length | setosa Sepal.Width | setosa Petal.Length | setosa Petal.Width | versicolor Sepal.Length | versicolor Sepal.Width | versicolor Petal.Length | versicolor Petal.Width | virginica Sepal.Length | virginica Sepal.Width | virginica Petal.Length | virginica Petal.Width |
---|---|---|---|---|---|---|---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | 7 | 3.2 | 4.7 | 1.4 | 6.3 | 3.3 | 6 | 2.5 |
4.9 | 3 | 1.4 | 0.2 | 6.4 | 3.2 | 4.5 | 1.5 | 5.8 | 2.7 | 5.1 | 1.9 |
4.7 | 3.2 | 1.3 | 0.2 | 6.9 | 3.1 | 4.9 | 1.5 | 7.1 | 3 | 5.9 | 2.1 |
4.6 | 3.1 | 1.5 | 0.2 | 5.5 | 2.3 | 4 | 1.3 | 6.3 | 2.9 | 5.6 | 1.8 |
5 | 3.6 | 1.4 | 0.2 | 6.5 | 2.8 | 4.6 | 1.5 | 6.5 | 3 | 5.8 | 2.2 |
5.4 | 3.9 | 1.7 | 0.4 | 5.7 | 2.8 | 4.5 | 1.3 | 7.6 | 3 | 6.6 | 2.1 |
これをロングデータに変換すると、当然ですが元に戻ります。
ワイドデータからロングデータに変換することを、列を「積み重ねる」という意味で、スタッキング(stacking)、スタック(stack)するといいます。対して、ロングデータからワイドデータに変換することを、アンスタッキング(unstacking)、アンスタック(unstack)するといいます。
実務においてはスタッキング、つまりワイドデータからロングデータに変換する機会の方が多いかもしれません。
表計算ソフトと構造化データの違い
上記のワイドデータですが、Excelのような表計算ソフトだと、次のように列名を2行に分け、かつセル結合を用いた形でまとるという方も、すくなからずいらっしゃるのではないでしょうか。
setosa | versicolor | virginica | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |
5.1 | 3.5 | 1.4 | 0.2 | 7 | 3.2 | 4.7 | 1.4 | 6.3 | 3.3 | 6 | 2.5 |
4.9 | 3 | 1.4 | 0.2 | 6.4 | 3.2 | 4.5 | 1.5 | 5.8 | 2.7 | 5.1 | 1.9 |
4.7 | 3.2 | 1.3 | 0.2 | 6.9 | 3.1 | 4.9 | 1.5 | 7.1 | 3 | 5.9 | 2.1 |
4.6 | 3.1 | 1.5 | 0.2 | 5.5 | 2.3 | 4 | 1.3 | 6.3 | 2.9 | 5.6 | 1.8 |
5 | 3.6 | 1.4 | 0.2 | 6.5 | 2.8 | 4.6 | 1.5 | 6.5 | 3 | 5.8 | 2.2 |
5.4 | 3.9 | 1.7 | 0.4 | 5.7 | 2.8 | 4.5 | 1.3 | 7.6 | 3 | 6.6 | 2.1 |
さらに次のように、3行に分けて列名を記述するという方も、いらっしゃるかもしれません。
setosa | versicolor | virginica | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Sepal | Petal | Sepal | Petal | Sepal | Petal | ||||||
Length | Width | Length | Width | Length | Width | Length | Width | Length | Width | Length | Width |
5.1 | 3.5 | 1.4 | 0.2 | 7 | 3.2 | 4.7 | 1.4 | 6.3 | 3.3 | 6 | 2.5 |
4.9 | 3 | 1.4 | 0.2 | 6.4 | 3.2 | 4.5 | 1.5 | 5.8 | 2.7 | 5.1 | 1.9 |
4.7 | 3.2 | 1.3 | 0.2 | 6.9 | 3.1 | 4.9 | 1.5 | 7.1 | 3 | 5.9 | 2.1 |
4.6 | 3.1 | 1.5 | 0.2 | 5.5 | 2.3 | 4 | 1.3 | 6.3 | 2.9 | 5.6 | 1.8 |
5 | 3.6 | 1.4 | 0.2 | 6.5 | 2.8 | 4.6 | 1.5 | 6.5 | 3 | 5.8 | 2.2 |
5.4 | 3.9 | 1.7 | 0.4 | 5.7 | 2.8 | 4.5 | 1.3 | 7.6 | 3 | 6.6 | 2.1 |
表計算ソフトの中で完結する限り、特段問題があるわけではありません。しかしこれを構造化データとして扱い、統計解析の専用ツール上で分析を行うには、いくつか考えないといけない点が出てきます。
まず構造化データでは、列名と値は明確に区別されています。列名は必ずつけないといけないわけではありませんが、つける場合は必ず1行[3] … Continue readingで表します。またセル結合という概念も、構造化データにはありません。
構造化データのルールに合わせて、事前に列名を加工しておくか、列名を無視して値のみを読み込み、必要に応じてデータベースまたは統計解析ツール上で、新たに列名を付与する必要があります。
また統計解析ツール上で取り扱いがしやすいのは、結局一番最初のirisデータセットそのままの形です。分析の目的によって必ずそうしないといけないわけではないのですが、ほとんどの場合スタッキングしてから分析を始めることになるのではないでしょうか。