代码で語るマニフェスト:从机器可读到可用的政府数据工程实践

IT政策提案
代码で語るマニフェスト:从机器可读到可用的政府数据工程实践

どうも〜おかむーです!今天来谈一件看似行政但超级工程的问题:政府数据到底能不能被代码友好地用起来〜

  • 这篇文章用工程师视角检视日本政府/自治体在“机器可读性”上的实践与差距
  • 我会引用官方规则(Digital庁、総務省等)、举出典型问题,并给出可执行的技术改进建议
  • 最后给出示例代码片段,说明如何把 PDF/非结构化表格转成 CSV/API 可用格式

結論

现在多数地方政府的数据在“对人可读、对机器不友好”的状态,原因主要是报表以 PDF/画像或复杂 Excel 发布、缺乏统一 API/模式和版本管理。要把政策愿景变成真正可评估的「可执行承诺」,需要三件事:强制机器可读优先(CSV/JSON/API)、统一元数据与 schema、并建立持续的パイプライン(ETL + CI)。エンジニア的に言うと、API 一本化と schema validation が全ての土台なんです!

レポート本文

背景と现状(官方文件的依据)

これ見てくださいよ:Digital庁が公開している「行政データにおける機械可読性に関するルール(案)」では、ファイル形式をレベル分けしていて、CSV/Excel はレベル1として推奨されています(参考: https://www.digital.go.jp/...)。総務省も統計表の機械判読可能化ルールをまとめており、統一ルールの重要性を説いています(参考: https://www.soumu.go.jp/...)。それでも現場ではPDF公開が根強いんですよね。

  • 公式ガイドライン:推奨は CSV / 構造化 Excel / API
  • 現実:報告書や統計が PDF に埋め込まれるケースが多い

要するに、政策目標を数値で追う前提が整っていないということです。

問題点の技術的分析

  • フォーマット不一致
  • - PDFやスキャン画像で公開 → 機械判読不可

    - 複雑なExcel(マージセル・改ページ) → 自動処理が困難

    - 結果:データパイプラインが組みづらい

  • メタデータ欠如
  • - リソースにスキーマ、更新日時、ライセンスが明示されていない

    - データ統合や自動検証の障害になる

  • API不在または低品質
  • - APIがある自治体もあるが、OpenAPI/Swagger 等の仕様やバージョン管理がない

    - 認証・レート制御・安定性が散発的

  • 数値目標と実績のギャップ追跡ができない
  • - 目標値(例:オープンデータ公開率や更新頻度)が掲げられても、機械的に追跡できないため評価不能

    技術的改善提案(実行プラン)

    1) まずは公開ルールを「機械可読優先」に変更

    - 政府/自治体は PDF を補助資料に限定し、一次データは CSV/JSON/API で公開

    - Digital庁のレベル分けを法的運用に落とし込む(レベル1 を必須化)

    2) 共通スキーマとメタデータ

    - 各ドメイン(財政、福祉、都市計画など)で JSON Schema/CSV Schema を定義

    - メタデータ(更新日、ライセンス、解説、単位、原点)を Data Catalog に登録

    3) API と開発者ポータル

    - OpenAPI 仕様を採用し、サンドボックスを用意する

    - API のバージョニング、Rate Limit、サンプルコードを提供

    4) データパイプラインと品質ゲート

    - ETL(抽出→変換→検証→公開)を CI 化して、schema validation と自動テストを導入

    - 例:GitHub Actions / GitLab CI で CSV Schema を検査し、失敗で公開ストップ

    5) レガシーデータ(PDF等)の戦略

    - OCR + テーブル抽出(例: Camelot/Tabula)で一時的に機械化

    - 抽出結果は手作業レビューを必須にして、最終版は構造化フォーマットへ変換

    コード例:PDF表→CSV(示例)

    以下はエンジニア的なヒント(サンプル)です。実行環境に合わせて調整してください。

    # requirements: requests, tabula-py, pandas
    

    import requests

    import tabula

    import pandas as pd

    1) PDF をダウンロード

    pdf_url = 'https://example.localgov.jp/report.pdf'

    r = requests.get(pdf_url)

    open('report.pdf', 'wb').write(r.content)

    2) Tabula でテーブル抽出

    tabula.read_pdf は複数テーブルを返すことが多い

    tables = tabula.read_pdf('report.pdf', pages='all', multiple_tables=True)

    3) 簡易マージと整形

    df = pd.concat(tables, ignore_index=True)

    列名正規化の例

    df.columns = [c.strip().lower().replace('\n','_') for c in df.columns]

    4) スキーマ検証 (簡易)

    required_columns = {'year','budget_amount'}

    if not required_columns.issubset(set(df.columns)):

    raise SystemExit('必要カラムが欠けています')

    5) CSV 出力

    df.to_csv('report_clean.csv', index=False)

    要するに、PDF→CSV はワークアラウンドであって、最終解は「一次データを最初から構造化して公開すること」です。

    指標で見る改善効果(例)

    • 現状:自治体公開データのうち機械可読(CSV/JSON/API)は仮に 30% とする
    • 目標:1年で 70% に引き上げ、2年で 90%に
    • KPI:公開件数中のCSV/JSON比率、APIレスポンス成功率、schema validation 通過率

    これらは定量的に測ってこそ政策の実効性がわかるんですよね。

    まとめ

    • 公式ガイドラインはあるが、現場運用はPDF中心で機械可読性が低い
    • エンジニア視点では「スキーマ」「API」「CIパイプライン」の3点セットがキー
    • PDF抽出は短期対応、長期的には一次データの構造化公開が最優先

    おかむーから一言

    テクノロジーで行政をアップデートするって言うと大げさに聞こえるかもしれないけど、データの“出し方”を変えるだけで政策評価も市民サービスもガラッと変わります!僕はエンジニアとしてそこを一緒に作りたいんですよ〜