CSVファイルとは? ~知っているようで知らない落とし穴について~|データ分析用語を解説

AUTHOR :   ギックス

本記事は、株式会社ギックスの運営していた分析情報サイト graffe/グラーフ より移設されました(2019/7/1)

分析データの受渡方法で頻繁に使うCSVファイル。扱い方を間違うと厄介なことになる

分析業務に限らず、抽出元システムからデータをエクスポート(外部ファイル出力)して、取込先システムにデータをインポート(外部ファイル取込)する作業(処理)の中で使用するファイルフォーマット形式として、CSVファイルが多く用いられます。Excelの保存形式やオープンデータの提供方法、身近な物では年賀状ソフトの住所録情報のエクスポート形式などでCSVファイル形式が使用され、ITに詳しい人だけではなく、一般のパソコン利用者でもCSVファイルの存在を知っている人は多いと思います。
今回は、何気に使っているCSVファイルのファイル形式とその弱点について、原点に戻って説明します。

CSVファイルとは?

CSVファイルについて、Wikipediaの内容を引用します。

comma-separated values(略称:CSV)は、いくつかのフィールド(項目)をカンマ「,」で区切ったテキストデータおよびテキストファイル。拡張子は .csv、MIMEタイプは text/csv。
「comma-separated variables」とも言う。広く普及した訳語はないが、「カンマ区切り」などとも呼ばれる。Microsoft Excelでは「CSV (カンマ区切り)」としている。
(中略)
類似したフォーマットとして、タブ区切りされた tab-separated values (TSV)や、半角スペース区切りされた space-separated values (SSV) などがあり、これらをまとめて character-separated values (CSV)、delimiter-separated values とも呼ばれることも多い。
引用:Wikipedia|Comma-Separated Values

ご存知の通り、CSVファイルは、日本語で翻訳すると「カンマ区切り」のファイル形式です。1行の文字列を半角カンマ文字「,」で複数のデータ項目に分割します。また、区切り文字として、タブ文字や半角スペース、半角パイプ「|」などを使用した形式もCSV(character-separated values)ファイルと言う場合もありますので、相手に伝える時は「カンマ区切りのCSVファイル」と言った方が誤解はないと思います。
ここまでの情報は、CSVファイルの概要についてです。これからCSVファイルを分析データとして使い場合を想定して、情報を深掘りします。

CSVファイルの行(レコード)と列(カラム)の考え方

会計や売上システムなどで使用される一般的なDBではデータをExcelのような表形式で保持しています。表形式ですので「行」と「列」の概念があり、1件の情報を1行にまとめ、1行の各列に各情報が登録されています。このようなDBから外部ファイルとしてCSVファイルをエクスポートした場合、行と列の構造はどうなっているのでしょうか?
CSVファイルにも「行」の仕様がありますので、1行を改行文字がある場所までを1行としています。しかし、列の持ち方については、CSVファイルの仕様として決まっている物ではありません。そのため、CSVファイルをデータとして扱うために項目(フィールド)の出現順の条件を加える必要があります。
例えば、DBからPOSレジの情報を下記のようなCSVファイルとしてエクスポートしたとします。その中にはカンマ区切りで情報が入っています。これをカンマで項目ごとに分解し、CSVファイルの項目の出現順によってDB上の列を判断します。この様に列を表現することができないCSVファイルの仕様に対して、項目の出現順の条件を加えて、仮想的に列を表現することができます。また、「何番目の項目がDB上の列のどこに該当するか」をCSVファイルからも分かるように、先頭行にタイトル行を持たせていると便利です。csv

CSVファイルで扱いが面倒な文字

CSVファイルは「改行文字までを1行」「カンマ文字までを1項目」として解釈します。しかし、データの中には改行文字やカンマ文字も文字情報として保持している場合があります。このようなデータをそのままCSVファイルでエクスポートしてしまうと、上記で説明した項目の出現順の情報が狂い、正しいCSVファイルの解釈ができなくなります。
カンマや改行文字を文字情報として出力したい場合は、括り文字として半角ダブルクォーテーション「”」や半角クォーテーション「’」などを使用して1つの項目の文字列情報として扱う方法が多く用いられます。
例えば「今なら2本セットで19,800円です」という文字列情報を普通にCSVファイルとして解釈した場合、「今なら2本セットで19」と「800円です」に項目が分かれてしまいます。これを回避するために「”今なら2本セットで19,800円です”」と両端に半角ダブルクォーテーションを追加します。また「今なら2本セットで”19,800円”です」のように途中に半角ダブルクォーテーションが入っている場合は「”今なら2本セットで\”19,800円\”です”」と円マーク「\」を半角ダブルクォーテーションの前に付ける事で半角ダブルクォーテーションも文字情報として扱う事ができます。
この様に半角ダブルクォーテーションや半角クォーテーション、円マークを使うことでカンマ文字も文字情報として取り扱うことができますが、この様な仕様は、CSVファイルの仕様として必ず実装しなくてはいけない決まりはないため、取込先(インポート先)のシステムでは、カンマ文字を正しく解釈できない場合があります。

ExcelでCSVファイルを使うときは要注意

CSVファイルはExcelでも参照・編集が可能です。しかし、CSVファイルをExcelで編集する時には注意が必要です。
CSVファイルには、ExcelやDBなどにあるデータ型の情報が入っていません。抽出元のシステムのデータ型が文字列型、数値型、日付型などに関係なく全て文字情報として出力されています。この様なCSVファイルをExcelで普通に開いた場合、Excelの解釈でデータ型が設定され、結果、下記のような元のCSVファイルの情報と違う形で表示されてしまいます。(例は上記のCSVファイルをExcelで開いた場合の例です)csv2
上記のようにCSVファイルの情報を壊さないために、ExcelからCSVファイルを開く場合は、Excelの「外部データの取り込み(テキストファイル)」機能を使用して、各項目のデータ型を設定して取り込む必要があります。csv3

データ分析用語:索引
SERVICE