代码で語るマニフェスト:从政府CSV看开放数据与施政可验证性

IT政策提案
代码で語るマニフェスト:从政府CSV看开放数据与施政可验证性

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

  • 这篇文章用“代码的眼睛”看政府公开CSV,评估机器可读性、API可用性和政策可检证性
  • 以实际目录(notice.go.jp、env.go.jp、mhlw.go.jp、soumu.go.jp、inpit.go.jp的CSV)为例,指出问题并给出工程改进方案
  • 提出可执行的技术路线:模式化Schema、OpenAPI、持续验证与可溯源的数据发布フロー

結論

公開CSVは増えてきて嬉しいんですけど、エンジニア的に言うと「ただ置いてある」ケースが多くて、連結・検証・再現が難しい!要するに、機械可読でも“実用的”じゃないことが多いということです。だからこそ、スキーマ・API・自動テストを導入して、政策と数値をコードで結びつけられるようにしましょう。

レポート本文

使ったデータ(参照元)

  • NOTICE:https://notice.go.jp/docs/status_notice.csv
  • 茨城県(環境省コンテンツ):https://www.env.go.jp/content/900398071.csv
  • 国内移行データ2011(inpit):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

これ見てくださいよ、CSVが公開されているのは良いんですけど、次のようなパターンが散見されます。

  • 文字コード・エンコーディングが不統一(Shift_JISやCP932が混じる)
  • 列名や項目説明がエンベロープされておらず、メタデータが不足
  • 地域IDに統一されたキー(例:JISコード)がないためJOINが面倒
  • 更新頻度・タイムスタンプが明示されていない(差分取得が困難)
  • ライセンス表記が曖昧で再利用ルールがわからない
  • エンジニア的に言うと、これAPI一本で解決する話なんですよね。では具体的にどうするか。

    技術的評価ポイント

    • 機械可読性:CSVはOKだが、CSVW/JSON Table SchemaやJSON-LDでスキーマ化されていればよりベター
    • 連携性:地域・施設などのエンティティに永続ID(JISコードや国土数値情報ID)を付与
    • アクセス性:ダウンロードだけでなくREST API(/facilities、/notices)とGraphQLを提供
    • 信頼性:データ公開時にスキーマ検証、差分パブリッシュ、署名付きリリース

    実務的なコード例

    まずは手を動かしてCSVを読み込むときの実務スニペット(Python/pandas):

    import chardet
    

    import requests

    import pandas as pd

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

    r = requests.get(url)

    enc = chardet.detect(r.content)['encoding']

    df = pd.read_csv(pd.compat.StringIO(r.content.decode(enc)), parse_dates=['notice_date'], dtype={'pref_code': str})

    正規化例: 都道府県コードをJISに揃える

    mapping = {'茨城県': '08'}

    df['pref_code'] = df['pref_name'].map(mapping).fillna(df['pref_code'])

    要するに、エンコーディング検出→明示的なdtype→日付パースの順で堅牢に読み込むのがコツです。

    次にDB設計のミニマム例(Postgres DDL):

    CREATE TABLE notices (
    

    id SERIAL PRIMARY KEY,

    source_url TEXT NOT NULL,

    notice_date DATE NOT NULL,

    prefecture_jis CHAR(2),

    category TEXT,

    raw_json JSONB,

    published_at TIMESTAMP DEFAULT now()

    );

    CREATE INDEX ON notices (prefecture_jis, notice_date);

    APIのミニマムOpenAPIスニペット(アイデア):

    paths:
    

    /api/v1/notices:

    get:

    parameters:

    - name: prefecture_jis

    in: query

    schema:

    type: string

    responses:

    '200':

    description: list of notices

    政策の数値目標と実績のギャップ(検証手順)

    政策が「〜年までに○○を達成する」と言っている場合、検証は以下の流れでやると良いです:

  • 政策文書から目標値とスコープを抽出(可能ならRDF/JSON-LDで構造化)
  • 公開データ(CSV)から対応する指標を定義して計算(計算式をコード化)
  • 差分・トレンドを可視化して、達成率を算出
  • ここで重要なのは「計算式が公開されているか」。同じ数でも算出方法が違えば議論になるので、コードで再現できることが必須です。

    改善提案(実行可能な短期・中期施策)

    短期(1〜3ヶ月)

    • 各CSVに機械読取可能なメタデータ(CSVW/JSON Table Schema)を添付
    • 文字コードをUTF-8に統一し、バリデーションパイプラインを用意
    • ライセンス(CC-BY等)を明確にする

    中期(3〜12ヶ月)

    • 公的データのための共通API仕様(OpenAPI + 標準レスポンス)を定義
    • 永続ID(JISなど)を全データセットに導入して紐付けを容易化
    • CI(GitHub Actions等)でスキーマチェック、サンプルクエリの自動実行

    長期(1年〜)

    • データカタログ(DCAT)とメタデータの公開で検索性を高める
    • 差分API(/changes?since=)やWebhookでリアルタイム連携
    • 政策→データ→検証のワークフローを自治体に展開

    活用シナリオ

    • 緊急通知(notice.go.jp)のリアルタイムダッシュボードとアラート配信
    • 救護施設データ(mhlw)と人口データを結合して避難リソース最適化
    • 県ごとの環境指標(env.go.jp)を時系列で比較し施策効果を測定

    まとめ

    • CSV公開は第一歩で良いけど、エンジニア目線では「標準化」「ID付与」「API化」「自動テスト」が揃って初めて実用的になる
    • 政策の検証性はデータの再現可能性にかかっている。コードで算出できるようにしよう!
    • 短期はスキーマ付与・UTF-8化、中期はAPI整備、長期は差分・リアルタイム化とガバナンスの強化を進めるのが現実的な道筋

    おかむーから一言

    テクノロジーで社会をアップデートするのはむずかしいけどめっちゃ楽しい!エンジニアとして、政策をコードで検証できる世界を一緒に作りましょう!