CSV、XML、JSON…、データフォーマットも進化している
我々Gixoではいろいろなデータの分析や加工処理を行っています。私も日々データと格闘しているわけですが、私が学生のころと比べるとITをとりまくいろいろな事が進化していると感じます。その中でデータフォーマットの進化やその変遷についてまとめてみたいと考えました。この記事では各々のテキストデータの長所や短所をまじえながらその進化や変遷を皆さんと一緒に追っていきたいと思っています。
今回取り上げるデータフォーマットの種類
本記事では振り返っていく題材として、テキストデータのフォーマットとして代表的な以下のフォーマットについて述べていきます。
- フラットフォーマット(固定長フォーマット)
- Character-Separated Valuesフォーマット(CSV,TSV,SSVなど)
- XMLフォーマット
- JSONフォーマット
こんなデータがあったとする
本記事を進めていくにあたって、以下のようなデータを想定して各々のデータのフォーマットについて述べていきます。
データの名前は、「歴代ホームラン数の順位」です
順位 | 氏名 | 本数 |
1 | 王貞治 | 868 |
2 | 野村克也 | 657 |
3 | 門田博光 | 567 |
4 | 山本浩二 | 536 |
5 | 清原和博 | 525 |
※出展:日本プロ野球機構オフィシャルサイト・歴代最高記録 本塁打 【通算記録】より
まず、このデータを各データ形式で表現してみる。
1. フラット(固定長フォーマット)
001王貞治□□0868002野村克也657003門田博光567004山本浩二536005清原和博525 |
注.□は半角空白文字をあらわします。
各データがフラットに並んでいます。改行もありません。このようなデータは固定長データと呼ばれ「Xバイト目~からYバイト目まではZという項目である」というルールでデータを処理していきます。本データにおいては、「1バイト目から3バイト目までは順位、4バイト目から11バイト目までは氏名、12バイト目から15バイト目まではホームラン数、ここまでを1人分のデータとして、16バイト目以降は2人目のデータ、3人目のデータを同じルールで繰り返す。」というルールになっています。また、ここでは全角文字は2バイトとして計算するというルールも存在します。くわしくは第2回目以降の記事で説明します。
2. CSV(Character-Separated Values)
1,王貞治,868 |
2,野村克也,657 |
3,門田博光,567 |
4,山本浩二,536 |
5,清原和博,525 |
各データが区切り文字(デリミタ)で区切られています。本データにおいては、各レコード(王さん、野村さん…)のデータが改行文字で区切られており、また各項目(順位、氏名、ホームラン数)が、カンマ文字で区切られています。
3. XML(Extensible Markup Language)
<?xml version=”1.0″ encoding=”utf-8″?> | ||||
<data name=”歴代ホームラン数の順位”> | ||||
<record> | ||||
<順位>1</順位> | <氏名>王貞治</氏名> | <本数>868</本数> | ||
</record> | ||||
<record> | ||||
<順位>2</順位> | <氏名>野村克也</氏名> | <本数>657</本数> | ||
</record> | ||||
<record> | ||||
<順位>3</順位> | <氏名>門田博光</氏名> | <本数>567</本数> | ||
</record> | ||||
<record> | ||||
<順位>4</順位> | <氏名>山本浩二</氏名> | <本数>536</本数> | ||
</record> | ||||
<record> | ||||
<順位>5</順位> | <氏名>清原和博</氏名> | <本数>525</本数> | ||
</record> | ||||
</data> |
全てのデータがタグで囲まれることによって分割されています。またタグの中に子供のタグを記述することもできます。これによって全体が木構造(ツリー構造)であらわされます。各タグの名前は自由に決めることができます。また本データでは見やすさを考えて改行文字で各タグを改行していますが、実は本データにおいてこれらの改行は不要であり意味をもちません。
4. JSON(JavaScript Object Notation)
[ | ||||||
{ | ||||||
“順位”:1 | , | “氏名”:”王貞治” | , | “本数”:868 | ||
} | ||||||
, | ||||||
{ | ||||||
“順位”:2 | , | “氏名”:”野村克也” | , | “本数”:657 | ||
} | ||||||
, | ||||||
{ | ||||||
“順位”:3 | , | “氏名”:”門田博光” | , | “本数”:567 | ||
} | ||||||
, | ||||||
{ | ||||||
“順位”:4 | , | “氏名”:”山本浩二” | , | “本数”:536 | ||
} | ||||||
, | ||||||
{ | ||||||
“順位”:5 | , | “氏名”:”清原和博” | , | “本数”:525 | ||
} | ||||||
] |
全てのデータが角かっこ”[]”や波かっこ”{}”タグで囲まれ、かつ各データがコロン”:”やカンマ文字で区切られています。またかっこの中に子供のかっこを記述することもできます。これによって全体が木構造(ツリー構造)であらわされます。本データに関しては上記XMLと同様に改行は不要であり意味を持ちません。
今回は上記1~4までのフォーマットを紹介しました。お気づきの方もいらっしゃると思いますが、フラットフォーマット→CSVフォーマット→XML・JSONフォーマットという流れでこれらのフォーマットは誕生しました。そして、この流れに沿ってフォーマットに記述ルールが増えていっていることに着目していただきたいのです。これらの記述ルールによって、今日データを扱う我々は、より効率的にデータを処理する事が可能になったわけです。本連載ではこれらのフォーマットについてのルールや特徴を一つ一つ説明しながらデータ処理の変遷を振り返りたいと考えています。
次回は、これらをふまえて「テキストデータを処理する際のルール」について説明します。(各フォーマットの具体的な説明は次々回=第三回以降を予定しています。)
本連載について
- 第1回 いろいろなデータフォーマットが登場しています
- 第2回 データフォーマットを考える上での6つのポイント
- 第3回 フラットフォーマット(固定長フォーマット)について
- 第4回 Character-Separated Valuesフォーマット(CSV,TSV,SSVなど)について
- 第5回 XMLフォーマットについて
- 第6回 JSONフォーマットについて
- 第7回 まとめ