公開CSVの正体を暴く:メタデータがないとデータは再利用できないよねって話

- これ見てくださいよ、政府系サイトにCSVは置いてあるけどメタデータがないケースが多すぎる!
- エンジニア的に言うと、CSVは生データだけ渡されてもスキーマ不明で再現性ゼロなんですよね
- 提案:自動でCSVを巡回してスキーマ・エンコーディング・サンプルを吐くパイプラインを国・自治体のカタログに繋ごう
結論
公開されたCSVに「機械可読なメタデータ(スキーマ、エンコーディング、更新日時、ライセンス)」が付いていれば、二度と“誰かが解釈して使う”ような泥臭い作業は不要になる。要するに、データはファイルだけで終わらせず、データカタログ(DCAT/JSON-LD)+JSON Schemaで配信してほしいって話です。
レポート本文
背景と問題意識
どうも〜おかむーです!ちょっと技術寄りなお話。政府や自治体のサイトを巡回すると、CSVが直接置いてあるケース(例:NOTICEのNICTERデータ https://notice.go.jp/docs/status_nicter.csv や各省のCSVリンク)が増えてます。これは素晴らしいんだけど、これ見てくださいよ、ヘッダはあるけど「この列は日付か?文字列か?」ってのが曖昧なんですよ。
エンジニア的に言うと、CSV単体はスキーマレスなBlobなので、最初にやるのは「推測」と「クレンジング」。これが現場コストを生む。
実際にやってみた(簡易調査)
- 例:https://notice.go.jp/docs/status_nicter.csv をcurlで取る
curl -I https://notice.go.jp/docs/status_nicter.csv
-> Content-Type: text/csv; charset=Shift_JIS などが返る場合がある
- Pythonでのテスト(エンコーディング判定→読み込み→スキーマ推定)
import chardet, requests, pandas as pd
r = requests.get(url)
enc = chardet.detect(r.content)['encoding']
df = pd.read_csv(io.BytesIO(r.content), encoding=enc)
推定スキーマ
for col in df.columns:
print(col, pd.api.types.infer_dtype(df[col], skipna=True))
要するに、手順は明確:encoding判定→ヘッダ抽出→型推定→NULL率やユニーク率を算出。ここまでを自動化できれば、利用者は「このCSVはこう使えばOK」とすぐ判断できる。
技術的課題
- エンコーディング(Shift_JIS, UTF-8, EUC-JP)が混在する
- 日付フォーマットが複数あり得る(YYYY/MM/DD、YYYY-MM-DD、Unix epochなど)
- 欠損値・合成カラム(例:住所カラムにカンマが混入)でCSVパーサーがブレる
- HTTPヘッダにメタデータがほとんど無い(Content-Type以外にスキーマや更新日時がない)
要するに、機械可読の『説明』が足りないんです!要するに〜ということです。
改善提案:自動メタデータ抽出パイプライン(プロトタイプ)
エンジニアとしてはこう作るのが良いと思う:
- govドメイン(.go.jp, .lg.jp)を定期クロールしてCSV/JSON/PDFのリンクを抽出
- HEADでContent-Type/Last-Modified/Content-Lengthを取得
- GETでファイルをダウンロード(最大サンプル数で抑制)
- encoding推定(chardet)
- スキーマ推定(pandas + infer_dtype)
- 基本統計(NULL率、ユニーク数、最小/最大など)
- サンプル行の保存
- DCATのDataset/DistributionにマッピングしてJSON-LDで公開
- 列ごとにJSON Schemaを生成してリンク
- 可能ならSwagger/OpenAPIのData Schemaとしても公開
コード例(JSON Schemaを作るイメージ):
# 簡易スニペット
schema = {"type":"object","properties":{}}
for col in df.columns:
t = 'string'
if pd.api.types.is_integer_dtype(df[col]): t='integer'
elif pd.api.types.is_float_dtype(df[col]): t='number'
schema['properties'][col] = {"type":t}
実務での導入戦術
- まずは中央(デジタル庁)でPoCをやる:週次でgovドメインのCSVを巡回して品質ダッシュボードを作る
- 成果物:CSVごとの「利用しやすさスコア」、推定スキーマ、エンコーディング、サンプルCSV
- 自治体側には「スキーマJSONを同梱して公開するテンプレート」を配布(GitHubでテンプレート公開)
メリット:研究者やスタートアップが初期コストゼロでデータを利用開始できる。政策評価も自動化されやすくなる。
まとめ
- CSVだけ置いて終わりはもうやめよう。ファイルに説明(メタデータ)を付けるべき
- 技術的には自動巡回→スキーマ推定→DCAT/JSON Schema化で十分実現可能
- まずはデジタル庁や主要省庁からPoCを回すと効果が早く出る
おかむーから一言
テクノロジーは面倒くさい作業を自動化するためにあるんです。メタデータをちゃんとつければ、行政データはもっと民主化される。やろう、今日からできることを始めよう!
情報ソース
- https://www.zhihu.com/question/290714454
- https://metidx-gov.note.jp/n/n9468573c213b
- https://www.zhihu.com/question/6430289390
- https://zenn.dev/govtechtokyo/articles/b65dc687e50918
- https://www.zhihu.com/question/38923279
- https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB
- https://www.chisou.go.jp/sousei/pdf/r5_guideline-checkaction.pdf
- https://column.nippoukun.bpsinc.jp/what-is-digitization/
- https://www.city.sukagawa.fukushima.jp/shisei/gyoseiunei/keikaku/chiho_sosei/1015604/4045.html
- https://www.digital.go.jp/
- https://notice.go.jp/docs/status_nicter.csv
- https://www.jinji.go.jp/content/900024615.csv
- https://www.env.go.jp/content/900398071.csv
- https://www.inpit.go.jp/content/100869372.csv
- https://www.mhlw.go.jp/content/001429362.csv
シェアする
関連レポート

公共予約システムの“ログインからAPI化”ロードマップ:パスワードレスで運用コストを下げる技術提案
公共施設予約の認証とデータを段階的にAPI化して運用コストを下げる技術ロードマップを紹介します。

政府データを“つなげる”発想:省庁バラバラを超えるフェデレーション戦略
フェデレーション層で省庁データをつなぎ、PDF混在を克服する実践的な技術案を示す。

政策ダッシュボードは“作るだけ”じゃダメ!KPIを自動で監査するパイプライン設計
政策ダッシュボードの数値を自動監査するパイプライン設計案。API・スキーマ・差分管理でKPIの信頼性を上げる技術手法を紹介します。