代码で语るマニフェスト:从CSV到API,如何把政府数据变成可用的政策证据

IT政策提案
代码で语るマニフェスト:从CSV到API,如何把政府数据变成可用的政策证据

どうも〜おかむーです!大家好,我是おかむー,今天带点工程味的政策解读给大家〜

  • 这篇文章用工程师视角看政府公开数据:格式、可用性、可验证性。
  • 我用公开CSV示例(内閣府的自動車・公共投資表、Digital的医療機関表、NICTER通報)来说明典型问题与改进建议。
  • 给出实操级的代码片段和可落地的API/メタデータ设计,帮自治体把“PDF+雑なCSV”变成可复现证据链。

結論

目前日本政府的オープンデータ呈现两极化:有些统计能以CSV发布,极具潜力;但现实中常见编码问题、スキーマ不统一、メタデータ欠如,导致工程化再利用成本高。要把「マニフェスト=公約数値」变成可以被第三方持续验证的事实,需要三个层次的改造:1) 机器可读+语义化(DCAT/JSON-LD),2) 标准化API(REST/GraphQL/OpenAPI),3) 连续集成的データリリース(versioning & provenance)。

レポート本文

参照した生データ(抜粋)

  • 新車販売台数:内閣府CSV https://www5.cao.go.jp/j-j/wp/wp-je24/csv/d1-1-4.csv
  • 公共投資の動向:内閣府CSV https://www5.cao.go.jp/j-j/wp/wp-je24/csv/d1-1-42.csv
  • 医療機関一覧(CSV例):https://www.digital.go.jp/.../xxxxxx_hospital.csv
  • NICTER注意喚起(通報CSV):https://notice.go.jp/docs/status_nicter.csv
  • e-Stat / 統計ダッシュボード:https://dashboard.e-stat.go.jp/

これ見てくださいよ:URLが公開されてるだけでかなり嬉しいんですけど、現場でこれをそのまま叩くといくつか詰まるんですよね。

よくある技術的課題

  • エンコーディング & BOM
  • - 内閣府CSVの先頭にFEFF(BOM)がある例が見られる(スニペットに特殊文字が混じっている)。pandasだとencoding='utf-8-sig'で対応可能。

    - 要するに、エンコーディング統一してContent-Type/charsetをHTTPヘッダで返してほしいということです。

  • スキーマ不統一 & ヘッダの人間寄り表記
  • - 列名が日本語で一貫性がない(「都道府県名」「緯度」「経度」などは良いが、日時やコードは混在する)

    - 要するに、機械向けのフィールド名(snake_case)と日本語ラベルの両方を提供してほしいです。

  • メタデータ欠如(更新頻度、単位、ライセンス、出典日時)
  • - DCAT/JSON-LDでメタデータ付与すれば自動収集できるんですよね。

  • APIが無い or 不十分
  • - CSV直リンクは良いが、差分取得やフィルタリングができない。エンジニア的に言うとAPI一本で解決する話なんですよね。

    データ検証(エンジニア的にやること)

    • 例:公共投資の「予算額」と「決算額」CSVを取って、年次で比率を出してKPIとの差を把握する。数行のコードで出来るんです。

    Python(pandas)簡単な処理例:

    import pandas as pd
    

    url = 'https://www5.cao.go.jp/j-j/wp/wp-je24/csv/d1-1-42.csv'

    df = pd.read_csv(url, encoding='utf-8-sig')

    列名は実際のCSVに合わせて調整

    年度ごとに予算と決算を集計

    agg = df.groupby('年度')[['予算額','決算額']].sum()

    agg['達成率'] = agg['決算額'] / agg['予算額']

    print(agg.tail())

    要するに、CSVが整っていれば数行でギャップ分析ができるんです。

    データ品質チェックの自動化パターン

    • ステップ1:取得(HTTP GET)→ エンコーディング検査(BOM含む)
    • ステップ2:スキーマ検証(jsonschema的に型チェック)
    • ステップ3:値域チェック(負数、NULL、単位不整合)
    • ステップ4:差分とプロビナンスの記録(git-like バージョン + リリースノート)

    CIツール(GitHub Actions)でCSVの継続検証を回せば、破壊的変更や突発的不整合を即検知できます。

    API設計・運用の提案

    • 提供フォーマット:JSON (application/json), CSV (text/csv), JSON-LD
    • 基本エンドポイント:/datasets, /datasets/{id}/resources, /datasets/{id}/download
    • フィルタリング:year, prefecture_code, category
    • メタデータ:更新日時, ライセンス, 単位, カラム辞書, provenance

    OpenAPIスニペット(概念):

    paths:
    

    /datasets/{id}/query:

    get:

    parameters:

    - name: year

    in: query

    responses:

    '200':

    content:

    application/json:

    schema: {type: array, items: {type: object}}

    さらにGraphQLを併設すればフロント側の集計負荷が下がるし、モバイルアプリの利用体験も良くなります。

    マニフェストの数値検証ワークフロー(運用案)

  • 政策提出時に「数値KPI」と「データ公開場所」を宣言
  • データはCIでschema/qualityチェックを通過してから公開
  • 第三者が同じAPIを叩けるようにOpenAPIとサンプルコードを同梱
  • 定期レポートは自動生成してダッシュボード(e-StatやJapan Dashboard互換)に流す
  • 実装で注意するポイント

    • 認証は読み取りなら基本オープン。書き込みや個人情報はOAuth2.0で保護
    • 地理座標はWGS84で統一。緯度/経度カラムの命名規則を明確に
    • 時系列はISO8601で保存・公開

    まとめ

    政府のCSV公開はすでに良いスタート地点にいる。だけどエンジニア目線で見ると「生のCSV」はまだ可搬性と再現性に欠ける。改善は現実的で小さなステップから可能:エンコーディング統一→機械向けスキーマ併記→OpenAPI公開→CIで品質保証。これでマニフェストの数値を誰でも検証できる形にできるんですよね!

    おかむーから一言

    テクノロジーで政策を検証できる世界、マジで来てます。コード一本で説明できる公約を増やしましょう!