「縦に並んだテーブルのデータを横並びにしてほしい」と言われて行列を入れ替えたデータを作ってみたら、そうではなくて縦持ちのデータを横持ちに変換をしてほしいのだ、と言われることがあります。こうした混乱を避けるために用語を整理しておく必要があります。
縦持ち・横持ちの変換
縦持ちのデータの例として次のような表が挙げられます。
正規化されているテーブルはこのような構造となります。なにかと縦長になるので人間にとってわかりやすい形とはいえませんが、データベースとしては扱いやすい構造です。
氏名 | 趣味 |
---|---|
井上 文子 | 囲碁 |
井上 文子 | 七宝焼き |
井上 文子 | テニス |
山田 啓司 | 俳句 |
山田 啓司 | 囲碁 |
山田 啓司 | ゴルフ |
山田 啓司 | 釣り |
武田 文博 | カメラ |
武田 文博 | 釣り |
武田 文博 | ゴルフ |
鈴木 泰 | 将棋 |
鈴木 泰 | テニス |
横持ちのデータの例として次のような表が挙げられます。
正規化されていない構造であり、データの内容に応じて(趣味が多い人がいる場合)列を追加しなければならないことがあること、空白となる領域が多くなりがちなこと、集計の際に多数の列を参照しなければならないことなど、データベースとしては扱いにくいですが、人間の目には見やすい形であり、用途によっては珍しくはありません。
氏名 | 趣味1 | 趣味2 | 趣味3 | 趣味4 |
---|---|---|---|---|
井上 文子 | 囲碁 | 七宝焼き | テニス | |
山田 啓司 | 俳句 | 囲碁 | ゴルフ | 釣り |
武田 文博 | カメラ | 釣り | ゴルフ | |
鈴木 泰 | 将棋 | テニス |
この例からわかるように、縦持ちデータを横持ちデータにするという場合、通常はある項目(この例では氏名)でグループ化するという要素を含んでおり、単に縦横(行列)を入れ替えるのとは区別する必要があります。
クロス集計
クロス集計の例として次のような表が挙げられます。
列の1つ1つが固有の値(趣味)に対応していますので、横持ちデータと違ってデータが左詰めされません。データの加工が難しいため通常はこういう形のテーブルが作られることはなく、クエリとして作成されます。
氏名 | 囲碁 | 将棋 | 俳句 | 七宝焼き | ゴルフ | テニス | 釣り | カメラ |
---|---|---|---|---|---|---|---|---|
井上 文子 | 1 | 1 | 1 | |||||
山田 啓司 | 1 | 1 | 1 | 1 | ||||
武田 文博 | 1 | 1 | 1 | |||||
鈴木 泰 | 1 | 1 |
行列の入れ替え
最初に挙げた縦持ちデータを再掲します。
氏名 | 趣味 |
---|---|
井上 文子 | 囲碁 |
井上 文子 | 七宝焼き |
井上 文子 | テニス |
山田 啓司 | 俳句 |
山田 啓司 | 囲碁 |
山田 啓司 | ゴルフ |
山田 啓司 | 釣り |
武田 文博 | カメラ |
武田 文博 | 釣り |
武田 文博 | ゴルフ |
鈴木 泰 | 将棋 |
鈴木 泰 | テニス |
この行列を入れ替えた結果、つまり単純に縦横を入れ替えた結果は次のようになります。
ほとんど実用性のない形なのでこのようなテーブルが作られることはまずありませんが、(上記の横持ちの形にしてほしいつもりが)「データを横に並べてほしい」などと依頼してしまうと、このような結果で返ってくることを覚悟しなければなりません。
氏名趣味1 | 氏名趣味2 | 氏名趣味3 | 氏名趣味4 | … | 氏名趣味10 | 氏名趣味11 | 氏名趣味12 |
---|---|---|---|---|---|---|---|
井上 文子 | 井上 文子 | 井上 文子 | 山田 啓司 | … | 武田 文博 | 鈴木 泰 | 鈴木 泰 |
囲碁 | 七宝焼き | テニス | 俳句 | … | ゴルフ | 将棋 | テニス |