Views: 7
階層的整然データ
1. Wickhamの定義
ハドリー・ウィカム(Hadley Wickham)は、データの整然(tidy)形式について以下のように定義しています:
整頓されたデータでは
1. 各変数は列を形成する
2. 観測がそれぞれの行を形成する
3. それぞれの種類の観察単位が表を形成するこれはコッドの第3正規形(Codd 1990)であるが、制約が統計的な言葉で組み立てられている。関係データベースで一般的な多数のデータセットではなく、単一のデータセットに焦点を当てている。
「データセット内の各変数が専用の列に配置され、各観測値が専用の行に配置され、この観測単位が表を稀有生する。」というこの整頓されたデータの定義は、データ分析と可視化を容易にし、一貫したデータの取り扱いを可能にする。ここで重要なことは,整頓されたデータは,「各タイプの観測単位 」を指定することによって,オブザベーションのタイプに制限を課していることである。この制約を取り払い、「観測単位」だけを指定すれば、様々な種類のデータを一貫した形式で扱えることになり、データ分析の柔軟性が格段に向上する。これが階層的整然データです。
2. 階層的整然データの拡張
階層的整然データ(Hierarchical Tidy Data)は、Wickhamの整然データの原則を拡張し、複数の階層を持つデータセットを効率的に表現する方法です。このアプローチでは、階層間の関係を維持しながら、データを1つの表形式に統合します。従来、正規化された複数の表をJOIN操作で組み合わせて必要な情報を操作していましたが、階層的整然データ(Hierarchical Tidy Data)では、必要な情報はすべて一つの表に含まれているだけでなく、異なる観測に対応させて行を使用することでデータの重複もなくなります。
3. 具体例
以下の表は、クラス、学生、科目、点数の情報を階層的に整然データとして表現したものです:
ClassID | 学生ID | 科目ID | クラス名 | 学生名 | 科目 | 点数 | 観察 |
---|---|---|---|---|---|---|---|
NULL |
1 |
NULL |
NULL |
アリス |
NULL |
NULL |
学生アリス |
NULL |
2 |
NULL |
NULL |
ボブ |
NULL |
NULL |
学生ボブ |
NULL |
NULL |
1 |
NULL |
NULL |
数学 |
NULL |
科目数学 |
NULL |
NULL |
2 |
NULL |
NULL |
科学 |
NULL |
科目科学 |
1 |
NULL |
NULL |
クラス1 |
NULL |
NULL |
NULL |
クラス1 |
1 |
1 |
NULL |
NULL |
アリス |
NULL |
NULL |
アリスはクラス1にいます |
1 |
1 |
1 |
NULL |
NULL |
NULL |
90 |
アリスのクラス1での数学の点数は90です |
1 |
1 |
2 |
NULL |
NULL |
NULL |
85 |
アリスのクラス1での科学の点数は85です |
2 |
NULL |
NULL |
クラス2 |
NULL |
NULL |
NULL |
クラス2 |
2 |
2 |
NULL |
NULL |
ボブ |
NULL |
NULL |
ボブはクラス2にいます |
2 |
2 |
1 |
NULL |
NULL |
NULL |
80 |
ボブのクラス2での数学の点数は80です |
2 |
2 |
2 |
NULL |
NULL |
NULL |
88 |
ボブのクラス2での科学の点数は88です |
この表では、各レベル(クラス、学生、科目、点数)の情報が統合され、各観測が行として表されています。これにより、データの冗長性が排除され、階層的な関係を保ちながらデータを効率的に管理できます。
4. 階層レベルの説明
- クラスレベル: `ClassID`と`クラス名`は各クラスの詳細を表します。
- 学生レベル: `学生ID`は各学生の詳細を表します。
- 科目レベル: `科目`は各科目の詳細を表します。
- 点数レベル: `点数`は各学生のクラス内での科目のテスト点数を表します。
- 観察: 各レベルでの観察の人間可読な説明を提供し、階層関係をカプセル化します。
5. NULLを許容する一意キー制約
階層的整然データの整合性を維持するために、階層の各レベルで一意キー制約を定義する必要があります。これにより、階層的な性質に対応するためにNULLを許容します。これらの制約は、ClassID
、学生ID
、および`科目ID`の組み合わせが各観察を一意に識別することを保証します。
- クラスレベル:
- 一意キー:
Class ID
学生ID
および科目ID
にNULLを許容して、各クラスを一意に識別します。
- 一意キー:
- 学生レベル:
- 一意キー:
学生ID
ClassID
および科目ID
にNULLを許容して、各学生を一意に識別します。
- 一意キー:
- 科目レベル:
- 一意キー:
科目ID
ClassID
、学生ID
にNULLを許容して、各科目を一意に識別します。
- 一意キー:
- クラス内の学生レベル:
- 一意キー:
Class ID
と学生ID
の組み合わせ 科目ID
にNULLを許容して、各クラス内の学生を一意に識別します。
- 一意キー:
- 点数レベル:
- 一意キー:
ClassID
、学生ID
、および科目ID
の組み合わせ - 各クラス内の学生の科目ごとのテスト点数を一意に識別します。
- 一意キー:
6. 例の説明
- クラスレベル:
Class 1
はClassID = 1
、Class 2
はClassID = 2
でそれぞれ一意に識別されます。 - クラス内の学生レベル:
ClassID = 1
のClass 1
にいる学生ID = 1
のアリス
と、ClassID = 2
のClass 2
にいる学生ID = 2
のボブ
は、ClassID
と学生ID
の組み合わせで一意に識別されます。 - 点数レベル:
Class 1
のMath
でのアリス
の90
点の点数は、ClassID
、学生ID
、および科目ID
の組み合わせで一意に識別されます。
一意キー要素にNULLを許容することにより、各レベルの識別子が対応するエンティティを一意に識別しつつ、階層関係を維持し、冗長性を回避します。
XBRLの定義リンクで定義するディメンション(Dimension)は、この構造を表すことができ、xBRL-CSVを使用して1つのCSVファイルで階層的整然データを生成できます。このアプローチは、伝統的な正規化された複数のテーブルとリレーショナルデータベースでの結合の必要性を排除します。すべての必要なデータが1つのファイルに統合されるため、データベースを使用せずに簡単に扱えます。
さらに、10年前の記録などの過去データもデータベースを必要とせずに確認できます。これにより、定期的なバージョンアップやメンテナンスからユーザーを解放します。マスタデータも含めてすべてのデータがそのまま保存されているため、過去のマスタデータを復元してJOINするという面倒な操作をしなくても、過去データはそのまま利用可能です。これにより、過去のデータを含むすべての情報が一貫して保持され、データ解析やレポーティングが容易になります。
コメントを残す