公共CSVの三大つまずき:文字コード・日付・住所を現場でさくっと直すテクニック

どうも〜おかむーです!今日はちょっとエンジニアっぽい話をしますよ〜
- 3行要約
- よくあるトラップは「文字コード」「日付フォーマット」「住所/自治体コード」の3つ。エンジニア的に言うとここをさっさと正規化できれば分析パイプラインは劇的に安定します
- 実務で使えるコード例と、現場に投げやすい改善提案(HTTPヘッダ、スキーマ、軽量マニフェスト)をまとめます!
結論
公共CSVは“公開=終わり”じゃないです。文字コード・日付・住所というトリプルボトルネックを最初に潰す工程を標準化すれば、政策検証やダッシュボード更新のコストがぐっと下がる。要するに、データ公開はエンドポイントだけでなく「正規化ガードレール」をセットで出せば最強です。
レポート本文
まずは現場でよく見る“3つの罠”
- 文字コード:Shift_JIS/EUC-JP/UTF-8が混在。HTTPヘッダにcharsetがないとブラウザやツールが誤判定します
- 日付フォーマット:YYYY/MM/DD、YYYY-MM-DD、和暦、日付と時間が別カラムなど入り乱れる
- 住所・自治体:表記揺れ(都道府県略記、市町村統合表記)、JIS自治体コードの有無
これら、見た目はCSVでも「同じ列名」が違う意味を持ってたりするんですよね。エンジニア的に言うと、スキーマが曖昧なままデータを受け取ると型エラーやマッチング誤差が頻発します。
具体的な検証対象(今回参考にした公開CSV)
- NOTICE注意喚起(https://notice.go.jp/docs/status_notice.csv)
- 環境省・茨城データ(https://www.env.go.jp/content/900398071.csv)
- 総務省 全国一覧(https://www.soumu.go.jp/main_content/000323625.csv)
- 厚労省 救護施設(https://www.mhlw.go.jp/content/001682075.csv)
これ見てくださいよ、全部CSVで公開されてる点は良いんですが、現場でつなごうとすると上の罠に必ず引っかかります。
実務で使える「受け入れパターン」コード例(Python)
import requests, chardet, io
import pandas as pd
from dateutil import parser
url = 'https://notice.go.jp/docs/status_notice.csv'
r = requests.get(url, timeout=10)
enc = chardet.detect(r.content)['encoding'] or 'utf-8'
安全に読み込む
df = pd.read_csv(io.BytesIO(r.content), encoding=enc, dtype=str)
日付正規化の例
for c in df.columns:
if 'date' in c.lower() or '日' in c:
df[c] = df[c].apply(lambda v: parser.parse(v).date() if pd.notna(v) else None)
要するに、まずはencodingを推定してバイト列から確実にDataFrameにするのが第一歩です。
さらに住所・自治体の正規化はこうやると現場で効きます:
- まず自治体コード(JIS X 0401/0402)で結合を試みる
- なければ都道府県・市区町村を正規化辞書(公的マスタ)でマップ
- 表記揺れには RapidFuzz(高速な類似度)でしきい値マッチ
簡単なマッチ例(擬似コード):
from rapidfuzz import fuzz
target: 公的マスタリスト
score = fuzz.ratio('横浜市中区', '横浜市中区')
if score > 90:
# マッチとみなす
pass
政策評価へのインパクト
- KPI集計で「日付の集計時差」や「自治体重複」があると、実績と報告の乖離が発生します
- 例えば救護施設の稼働率を時系列で追うとき、日付解釈ミスで週次の変動がノイズに見えることがある
- 要するに、データの整合性は政策の信頼性に直結します
現場に提案したい軽量改善リスト(すぐ投げられる)
- ファイル配信で Content-Type: text/csv; charset=UTF-8 を必ず付ける
- 各CSVに同名の schema.json を置く(列名・型・必須フラグを記載)
- dataset_index.json を公開して更新日時、行数、ハッシュ(SHA256)を記載する(完全署名まではいかなくても差分検出できる)
- 公的マスタ(自治体コード)へのリンクをCSV内カラムで明示
これ、技術的にはめちゃくちゃ簡単です。サーバ側で1つスクリプト置けば運用できますし、エンジニアならコード書く人ならわかると思うんですけど、コストはほとんどかかりません。
まとめ
- 公共CSVは公開形態がOKでも、中身の正規化ができていないと分析に耐えない
- 文字コード→日付→住所の三点を最初に潰すパイプラインが現場の生産性を大きく上げる
- 小さな改善(Content-Type、schema.json、indexファイル)を自治体側に提案すれば、政策評価の信頼性が向上する
おかむーから一言
テクノロジーで社会をアップデートするには「小さな習慣」を変えるだけで十分。CSV一枚の質を上げることが、政策への信頼を積み上げる第一歩です。やっていきましょう!
情報ソース
- https://notice.go.jp/docs/status_notice.csv
- https://www.env.go.jp/content/900398071.csv
- https://www.inpit.go.jp/content/100869372.csv
- https://www.mhlw.go.jp/content/001682075.csv
- https://www.soumu.go.jp/main_content/000323625.csv
- https://www.intec.co.jp/column/smartcity-08.html
- https://www.digital.go.jp/resources/data_case_study_local
- https://ja.wikipedia.org/wiki/%E5%85%AC%E5%85%B1
- https://www.manawin.jp/languagegap/general/koukyou-kouteki/
- https://datafor.jp/opendata2025/
- https://www.zhihu.com/question/290714454
- https://metidx-gov.note.jp/n/n9468573c213b
- https://www.zhihu.com/question/6430289390
- https://ai-government-portal.com/%E5%85%AC%E5%8B%99%E5%93%A1%E3%81%AE%E6%96%B0%E3%81%97%E3%81%84%E6%8C%91%E6%88%A6%E3%80%8C%E8%A1%8C%E6%94%BFux%E6%94%B9%E5%96%84%E6%A5%AD%E5%8B%99%E5%A7%94%E8%A8%97%E3%80%8D%E5%AE%8C%E5%85%A8%E3%82%AC/
- https://www.zhihu.com/question/38923279
シェアする
関連レポート

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

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

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