代码看清政府数据:从CSV到API,能不能别再把信息藏在PDF里?

IT政策提案
代码看清政府数据:从CSV到API,能不能别再把信息藏在PDF里?

どうも〜おかむーです!大家好,今天来点偏技术也偏政策的内容~

  • 这篇文章基于公开CSV/目录(例:notice.go.jp、env.go.jp、soumu.go.jp等)做技术检视
  • 结论是:政府在推进「机器可读性」上有进步,但数据格式、元数据和API化还不够统一,影响再利用
  • 提出可落地的工程改进建议:统一Schema/编码、提供API与CSVW、开放版本与变更记录

結論

从现有的公开资源看(见:NOTICE、各省厅CSV、地方数据目录),日本政府在把数据从PDF搬到CSV这一步做得越来越多。要するに,CSV是好事,但CSV不等于机器可读的终点——缺乏统一schema、字符编码不一、字段语义不明确、没有稳定的API,这些问题让开发者和研究者在实务上仍然花大量时间做清洗和内聚。

レポート本文

これ見てくださいよ:参考的数据源

  • 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: https://www.mhlw.go.jp/content/001682075.csv
  • デジタル行財政改革会議の資料(機械可読性ルール)PDF: https://www.digital.go.jp/.../20260331_meeting_executive_outline_05.pdf
  • 都道府県・市のデータカタログ(例:東京都): https://portal.data.metro.tokyo.lg.jp/

これらを見ると分かるのは「データは出すようになった」が「出し方がバラバラ」ってことです。エンジニア的に言うと、CSVがあるだけで『APIがある』とは言えないんですよね。

問題点を技術的に整理する

  • 文字コードとエンコーディング
  • - 日本の行政データでShift_JIS、EUC、UTF-8が混在することが多い。要するに、読み込むときにencodingを推測・指定しないと文字化けする。

    - 対策:公開時にUTF-8統一+HTTPヘッダーでContent-Typeとcharsetを明示。

  • スキーマの欠如/非標準なカラム
  • - 同じ意味の列が省庁ごとに名前違い(例:prefecture / 都道府県 / 都道府県名)。要するに結合が面倒。

    - 対策:CSVW(CSV on the Web)のメタデータを付与してカラム意味を機械的に表現する、またはJSON Schema/OpenAPIで共通スキーマを公開。

  • 更新履歴・バージョン管理の欠如
  • - データの更新タイミングや差分が不明だと再現性のある分析ができない。

    - 対策:毎回のダンプにバージョンと変更ログを付け、差分API(or ETag)で効率同期。

  • APIの不在または限定的
  • - データカタログはあるけど、REST/GraphQLで安定提供されているデータはまだ限定的。

    - エンジニア的に言うとAPI一本で解決する話なんですよ:認証・レート制御・検索クエリ・ページネーションがあると再利用がぐっと楽。

  • 地理情報・タイムスタンプの不統一
  • - 住所文字列だけだとジオコーディングが必要。緯度経度があれば一発で可視化できる。

    - 対策:可能ならWGS84の緯度経度カラムを標準で付ける。

    具体的なコード例(実務的な入り口)

    これ見てくださいよ。Python + pandasで公開CSVを読み込み、エンコーディングと日付を指定して正規化する例です。

    import pandas as pd
    

    from urllib.request import urlopen

    url = 'https://notice.go.jp/docs/status_notice.csv'

    読み込み時にencodingを指定し、parse_datesで日付を解釈

    df = pd.read_csv(url, encoding='utf-8', parse_dates=['date'], dayfirst=False)

    カラム名標準化の例

    df = df.rename(columns={

    '都道府県': 'prefecture',

    '発表日': 'date',

    })

    緯度経度がない場合は別途ジオコーディングをかける

    print(df.head())

    要するに、このひと手間が毎回必要になるのが問題なんですよね。

    政策目標と実績のギャップ

    デジタル行財政改革会議の資料(機械可読性ルール)では「行政データの機械可読性を担保する」方針が出ている(資料4-1)。でも現場を見ると「ルールはあるが実装が追いついてない」フェーズです。目標:機械可読。実績:CSV化は進んだがメタデータ・API化はまだ不十分。

    要するに、政策目標(全データの機械可読化)と現場実績(断片的なCSV公開)の間に実装ギャップがある。これを埋めるにはルールだけでなく、ツールと運用が必要です。

    実装提案(現場で使えるロードマップ)

    短期(3〜6ヶ月)

    • 全公開CSVをUTF-8化し、HTTPヘッダーでcharset明示
    • 各CSVにCSVWメタデータ(JSON形式)を添付:カラム名、型、必須/任意、単位、更新日時
    • データカタログに「最新APIエンドポイント」のメタを追加

    中期(6〜12ヶ月)

    • 各省庁共通のスキーマガイドラインを策定(住所、日時、緯度経度、識別子)
    • REST APIを公開(OpenAPI仕様)し、CSVはそのエクスポート形式として整備
    • CIでデータバリデーション(Schema validation)を入れる

    長期(1年〜)

    • 変化履歴を追える差分API(WebHooksやETag/If-Modified-Since対応)を整備
    • 認証が必要なデータはOAuth2 + APIキーで統一し、利用者管理を実装
    • データセットごとにSLA(公開頻度・遅延許容)を設定

    予算と現場負荷の感覚的見積もり

    • CSV→UTF-8/ヘッダー統一は工数小。自動化パイプライン1週間〜1ヶ月で整備可能
    • CSVW + スキーマ策定は中程度の工数(3ヶ月〜6ヶ月)で、ガイドラインと一部変換ツールを作れば広がる
    • API化と差分同期はコスト高(半年〜1年程度、運用含む)だが長期コスト削減につながる

    まとめ

    • 良いニュース:公開CSVは増えている。データ出力の第一歩は踏めてる!
    • 課題:エンコーディング、スキーマ、API不足、更新履歴の欠如が再利用を阻む
    • 解決策:UTF-8統一、CSVW/JSON Schema、OpenAPIでAPIを整備、差分管理を導入

    短期でできる改善を積み重ねれば、研究者・開発者・市民による価値創造がぐっと加速するんですよ!

    おかむーから一言

    テクノロジーで社会をアップデートするって言ってるんだから、データの出し方もアップデートしようよ!エンジニアの小さな工夫が政策の可視化と民主的検証をぐっと強くするんだ。応援してます!