よく見るデータ形式(xlsx, csv, xml, json, yaml) の違いについて

# はじめに
csv, xml, yaml, jsonなど，これらデータ形式はweb,画像処理など色々な場面で見るけど，その違いをいまいちよく知らなかったので簡単にまとめてみた．

# xlsx
* Microsoftのエクセルのデータ形式（Excel 2007以降）．

ちなみに，その他のよく見るエクセルの形式について
* 「.xls」：1997 ~2003で使用されていた形式．
* 「.xlsm」：マクロ（プログラムなどでデータ処理を自動化）を使用する際の形式．

# csv

```
ID, Name, Country
111, Mike, USA
222, Nancy, Canada
```

* Comma-Separated Valuesの略
* 名前の通り，データがコンマ(”,”)で区切り．
* 直感的にデータの中身を把握しやすく，MicrosoftのExcelやGoogle Spread Sheetと相性が良い．
* excelで開くと，それぞれの要素がセル内に入った状態で表示．

# xml

```
<?xml version='1.0' encoding='utf-8'>
<root>
    <employee>
        <employ>
            <ID>111</ID>
            <Name>Mike</Name>
            <Country>USA</Country>         
        </employ>
        <employ>
            <ID>222</ID>
            <Name>Nancy</Name>
            <Country>Canada</Country>
        </employ>
    </employee>    
</root>
```

* Extensible Markup Languageの略．
* htmlに似ていて，タグでデータを囲み，入れ子構造にすることが可能．
* csvよりもデータを直感的に把握しづらいが，様々なデータを記述可能．
* 多くのプログラミング言語において標準ライブラリで扱える（ただしNode.jsにはない）．
* 記述が冗長になりがちで、敬遠されがち．
* Ajax（Asynchronous JavaScript = 非同期 JavaScript）というものにも使われ，javascriptとxmlで**非同期**でサーバー間と通信するのに使われる．
* DeepLearningのアノテーションにも使われる．

> 非同期通信：ページ遷移を必要としない通信（同期通信の場合，リンク先に飛ぶと，ページ遷移して，画面が真っ白になった後に新しいページが表示される）．内部でxmlとjavascriptが通信することで，そのページのままページ更新が可能．

# json

```
[
    {'ID': '111', 'Name': 'Mike', 'Country': 'USA'},
    {'ID': '222', 'Name': 'Nancy', 'Country': 'Canada'}
]
```

* JavaScript Object Notationの略．
* 辞書型と呼ばれる、一対一対応のような記述方式．
* XMLよりもデータの記述量が少ないので、読み込みが速い．
* JavaScript のオブジェクトで構成されているため、そのまま JavaScript で記述したプログラムで扱うことが可能．
* 効率性の向上やファイルサイズの節約を目指したデータに向いている（スペースや終了タグによるサイズの浪費がほとんどないから）．
* ほとんどのプログラミング言語で標準ライブラリに入っている．
* コメント書けない．

# yaml(.yml)

```yml
-
  ID: 111 # コメント書けるよ
  Name: Mike
  Country: USA
-
  ID: 222
  Name: Nancy
  Country: Canada
```

* YAML Ain't a Markup Languageの略(意味:ヤムルはマークアップ言語じゃないよ！)
* xmlに似ているが，xmlよりも簡潔でほとんどが実際のデータ．
* スペースによるインデントを使ってデータの階層構造を示す表記方法が基本．
* JSONのスーパーセットなので、必要に応じて、スペースによるインデント表記からJSON風の表記へと切り替えることも可能．
* Ruby以外は外部ライブラリ必須．
* コメントを書くことが可能．
* 「.yaml」と「.yml」が存在するが，両方ともヤムル形式のファイルでどちらを使ってもよい．(個人的にはdocker-composeが.ymlなので.ymlを使っていこうと思う．)

# 各形式の関係性
* xlsx, csv：テーブルデータを扱うときに利用．列ごとに改行が必要．
* xml, json, yaml：リスト内にリストを作るようなイメージで，複雑なデータ（構造化されたデータ）を扱うときに利用．改行必要ないので，人間にとっては読みづらいが，コンピュータにとっては読みやすい．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397136/11f25205-6851-fb38-d5e6-95e126f7f7f9.png)


# まとめ
今回は，よくみる各データ形式の特徴について簡単にまとめました．

何か間違いがあれば，ご指摘いただけるとありがたいです．

# 参考
* [【何が違う？】データ形式(CSV, XML, JSON)の特徴を知ろう](https://code-ship-blog.wemotion.co.jp/technology/%E3%80%90%E4%BD%95%E3%81%8C%E9%81%95%E3%81%86%EF%BC%9F%E3%80%91%E3%83%87%E3%83%BC%E3%82%BF%E5%BD%A2%E5%BC%8Fcsv-xml-json%E3%81%AE%E7%89%B9%E5%BE%B4%E3%82%92%E7%9F%A5%E3%82%8D%E3%81%86/) 
* [【一覧表あり】エクセルで利用できる拡張子の違い－ファイルが開けない！原因と対処法](https://briarpatch.co.jp/wakaruni/excel-extension/)
* [ファイルフォーマット > YAML > 入門 > XMLやJSONとの違い](https://qiita.com/7of9/items/f8d06c7d654298bf13ed)
* [JSON, YAML, ini, TOML ざっくり比較](https://gist.github.com/miyakogi/e8631ce5f7c956db2313)
* [一周回って、人間が読み書きする設定ファイルはJSONが良いと思った](https://future-architect.github.io/articles/20191001/)
* [第6回 YAMLファイルの扱い方](https://www.oiax.jp/rails/for_web_designers/yaml.html)