CSVの文字化けはバグじゃない、運用の設計ミスだよ!——政府CSVのローカル依存をエンジニア視点で直す

IT政策の提案
CSVの文字化けはバグじゃない、運用の設計ミスだよ!——政府CSVのローカル依存をエンジニア視点で直す

どうも〜おかむーです!今日はちょっとエンジニアっぽい話をしますよ〜

  • 3行要約
- 政府・自治体の公開CSV、実は文字コード・区切り・日付・数値表記で自動処理が壊れがち

- エンジニア的には「検出→正規化→宣言(メタデータ)」の3工程でほぼ解決する

- 小さなツールチェーン(chardet/iconv/csvkit + pandas)で現場運用に組み込める改善案を提示するよ!

結論

公開CSVの失敗の原因は「ローカル慣習がそのままデータになっている」ことが大半。エンジニア的に言うと、まず“誰でも再現できる読み方”をファイルに書いておくこと(encoding, delimiter, header, date format, null token)でデータ利用の障壁が激減する。要するに、データと一緒にマシンが読める説明(datapackage.json や CSVW など)を付けるべき、ということです。

レポート本文

これ見てくださいよ:NOTICEのCSV(https://notice.go.jp/docs/status_notice.csv)、環境省の茨城県CSV(https://www.env.go.jp/content/900398071.csv)、総務省の全国CSV(https://www.soumu.go.jp/main_content/000323625.csv)など、複数の公開CSVを想定して話します。表面上はCSVでも、実際に自動処理にかけると次のような罠があるんです。

主なトラップ一覧

  • 文字コード(Shift_JIS / UTF-8 / EUC-JP / BOM)
  • 区切り文字(, と ; とタブの混在)
  • 日付表記(YYYY/MM/DD, YYYY年M月D日, 令和表記)
  • 数値表記(千区切りカンマ、全角数字)
  • ヘッダの日本語バリエーション(空白・改行・重複カラム名)

エンジニア的に言うと、これらは“スキーマのドリフト”ではなく“読み取りの曖昧さ”が原因です。要するにデータが自己記述してない、ということ。

実務で使えるワークフロー(検出→正規化→宣言)

1) エンコーディングと区切りの自動検出

import requests

from chardet import detect

r = requests.get('https://notice.go.jp/docs/status_notice.csv')

raw = r.content

print(detect(raw))

2) 正規化(例: Shift_JIS → UTF-8、全角→半角、千区切り除去)

# iconvで変換、csvkitで検査

curl -sS https://.../file.csv -o file.raw.csv

ENC=$(python -c "import chardet,sys; print(chardet.detect(open('file.raw.csv','rb').read())['encoding'])")

iconv -f "$ENC" -t UTF-8 file.raw.csv > file.utf8.csv

csvclean file.utf8.csv # csvkitのツールで壊れ行チェック

3) スキーマ化と宣言(datapackage.json / CSVW)

  • カラム名、データ型、日付フォーマット、nullトークンを明記
  • CIでCSVが変わったらスキーマバリデーションを実行

例: pandasでの読み込みテンプレート

import pandas as pd

parse_dates = ['reported_at']

df = pd.read_csv('file.utf8.csv', delimiter=',', encoding='utf-8', na_values=['', 'NA', '−'])

df['reported_at'] = pd.to_datetime(df['reported_at'], errors='coerce', format='%Y-%m-%d')

数値の前処理

df['count'] = df['count'].astype(str).str.replace(',', '').astype(float)

運用提案(現場に導入しやすいレイヤ)

  • データ公開ページに“機械読み取りガイド”を必須表示(encoding, delimiter, date format)
  • CIパイプラインでCSVのヘルスチェックを実行(csvkit + jsonschema)
  • 既存データはバッチで正規化して「UTF-8 + 明示スキーマ」のミラーを作る

具体的な効果の想像

  • データ利活用のハードルが下がり、自治体側の問い合わせが減る
  • 自動集計・ダッシュボードの信頼性が上がるため、政策評価が高速化

まとめ

政府CSVの最悪の敵は「見た目がCSVならOK」思考です。エンコーダーや区切りに関して現場で暗黙ルールがあると、データ利活用は停滞します。エンジニア的には、まずは「検出→正規化→宣言」のワークフローを導入して、データ公開と同時に機械が読める説明を書いておくのが最もコスパ良い改善策です。

おかむーから一言

技術で行政が変わる瞬間って、派手さはないけど地味に強烈なんですよね。小さなルールづくりと自動化で、社会の意思決定をもっと速く、もっと正確にしていきましょう!

シェアする