階層的整然データ

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. 階層レベルの説明

  1. クラスレベル: `ClassID`と`クラス名`は各クラスの詳細を表します。
  2. 学生レベル: `学生ID`は各学生の詳細を表します。
  3. 科目レベル: `科目`は各科目の詳細を表します。
  4. 点数レベル: `点数`は各学生のクラス内での科目のテスト点数を表します。
  5. 観察: 各レベルでの観察の人間可読な説明を提供し、階層関係をカプセル化します。

5. NULLを許容する一意キー制約

階層的整然データの整合性を維持するために、階層の各レベルで一意キー制約を定義する必要があります。これにより、階層的な性質に対応するためにNULLを許容します。これらの制約は、ClassID学生ID、および`科目ID`の組み合わせが各観察を一意に識別することを保証します。

  1. クラスレベル:
    • 一意キー: Class ID
    • 学生ID および 科目ID にNULLを許容して、各クラスを一意に識別します。
  2. 学生レベル:
    • 一意キー: 学生ID
    • ClassID および 科目ID にNULLを許容して、各学生を一意に識別します。
  3. 科目レベル:
    • 一意キー: 科目ID
    • ClassID学生ID にNULLを許容して、各科目を一意に識別します。
  4. クラス内の学生レベル:
    • 一意キー: Class ID学生ID の組み合わせ
    • 科目ID にNULLを許容して、各クラス内の学生を一意に識別します。
  5. 点数レベル:
    • 一意キー: ClassID学生ID、および 科目ID の組み合わせ
    • 各クラス内の学生の科目ごとのテスト点数を一意に識別します。

6. 例の説明

  • クラスレベル: Class 1ClassID = 1Class 2ClassID = 2 でそれぞれ一意に識別されます。
  • クラス内の学生レベル: ClassID = 1Class 1 にいる 学生ID = 1アリス と、ClassID = 2Class 2 にいる 学生ID = 2ボブ は、ClassID学生ID の組み合わせで一意に識別されます。
  • 点数レベル: Class 1Math での アリス90 点の点数は、ClassID学生ID、および 科目ID の組み合わせで一意に識別されます。

一意キー要素にNULLを許容することにより、各レベルの識別子が対応するエンティティを一意に識別しつつ、階層関係を維持し、冗長性を回避します。

XBRLの定義リンクで定義するディメンション(Dimension)は、この構造を表すことができ、xBRL-CSVを使用して1つのCSVファイルで階層的整然データを生成できます。このアプローチは、伝統的な正規化された複数のテーブルとリレーショナルデータベースでの結合の必要性を排除します。すべての必要なデータが1つのファイルに統合されるため、データベースを使用せずに簡単に扱えます。

さらに、10年前の記録などの過去データもデータベースを必要とせずに確認できます。これにより、定期的なバージョンアップやメンテナンスからユーザーを解放します。マスタデータも含めてすべてのデータがそのまま保存されているため、過去のマスタデータを復元してJOINするという面倒な操作をしなくても、過去データはそのまま利用可能です。これにより、過去のデータを含むすべての情報が一貫して保持され、データ解析やレポーティングが容易になります。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です