戻る

CSVの罠

語義に従うならば、カンマで区切られた値を持ったテキストファイルであれば何でもCSVと呼ぶことができるものの、エンジニアであれば暗黙のうちに列がキー、行がレコードとなっているものを想像することが多いのではないでしょうか。

とはいえ実際には単にカンマで区切られたフリーフォーマットのCSVファイルで統計情報を公表している役所もあるし、自治体システム標準化のデータ標準・連携標準のようにキー・値、キー・値と交互に並んだ形式のCSVファイルもあります。後者はレコードによって含まれる項目が異なる場合や、ネストしたデータ構造を扱う場合に便利ではあって、固定長電文の時代から似たようなデータ構造は広く使われてきた歴史があります。

こうしたフォーマットは形式的にはCSVといえなくもないし、CSVとして開けなくもないのですが、pandasをはじめとした一般的なライブラリーで思うように扱えません。さらに何かしらのエラーで値を一つ読み飛ばした場合など、順序性に依存しているが故にキーと値の対応関係が崩れてしまいます。CSVスキーマやTable Schemaなどの仕様を使ってメタデータを付与することもできず、パーサーを使ったデータの検証も困難です。

こういったデータを表現するのであれば、本来であればCSVよりもJSONを使った方が安全でしょう。また機械的にJSONに変換した上で、JSONスキーマで検証することも考えられるかも知れません。という訳で、こういった2次元の表になっておらず、各行にキー・値を持つCSVファイルのことを仮にCSKV (Camma Separated Key Value)と呼ぶことにして、cskv2jsonというツールをつくってみました。とりあえずはコンバーターをつくっただけですが、暇を見て変換したCSKVをJSONスキーマで検証したり、Frictionless DataのCSKVバインディングなんかをつくれないか思案しています。