コードで語るマニフェスト:日本政府・自治体データを技術で点検する

IT政策提案
コードで語るマニフェスト:日本政府・自治体データを技術で点検する

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

  • 这篇文章基于公开CSV/PDF源,评估数据的機械可読性与工程可用性。
  • 指出常见问题:编码、模式缺失、API缺乏与分類コード對齊困难。
  • 给出可落地的技術改善建议:スキーマ、API、データパッケージ化、変換例代码。

結論

これ見てくださいよ:政府・自治体のデータ、CSV化は進んでるけど「エンジニア的に言うと」まだ不十分なんですよ。単にファイルを置くだけだと再利用コストが高い。要するに、公開フォーマット・スキーマ・API・メタデータの整備が必要ということです。

レポート本文

元データの状況(参照したソース)

  • NOTICE注意喚起: https://notice.go.jp/docs/status_notice.csv — 機械判読の前提となる「CSV」公開。だがメタデータが乏しい。
  • 環境省CSV (463KB): https://www.env.go.jp/content/900398071.csv — ファイルサイズは中規模。エンコーディングや列定義が不明だと取り回しが面倒。
  • 国内移行データ: https://www.inpit.go.jp/content/100869372.csv — 移行履歴など、時系列整備が重要なカテゴリ。
  • 厚労省のCSV: https://www.mhlw.go.jp/content/001429362.csv — 医療系は粒度が細かいがスキーマ統一がないと結合が難しい。
  • 総務省の分類項目(CSV): https://www.soumu.go.jp/main_content/000420038.csv — コード表は統一連携の鍵。
  • 内閣官房の資料(PDF)についての言及: 機械可読性の重要性が政策文書で示されている(要配慮)。

これだけ見ると、CSVはあるけど「接着剤」が足りないんですよね。分類コードはあるのに、各CSVで同じ列名や型で公開されていない。だから結合できない。

技術的な問題点(具体的に)

  • エンコーディング問題
  • - 多くの官公庁ファイルはShift_JISやEUC-JP、UTF-8が混在する。エンジニア的に言うと、最初にencodingエラーで止まるんです。

  • スキーマ欠如
  • - 列名の意味、型、許容値、単位の明記がない。要するにデータ辞書がないと解析できない。

  • ID・コードの非整合
  • - 総務省の分類コードはあるのに、実際のデータ側でコード列が欠落、または表記ゆれがある。

  • APIの欠如
  • - ファイル配布のみでREST/GraphQL APIがない。タイムリーな更新や差分取得が難しい。

  • メタデータとバージョン管理不足
  • - 更新履歴やスキーマ変更履歴が公開されていない。

    データ処理の実務例(コード)

    以下は現場でよく使うパターン。まずはエンコーディング自動検出→標準化→結合。

    # pandasで読み込み(エンコーディング検出はchardetを利用)
    

    import chardet

    import pandas as pd

    def read_csv_autodetect(path):

    raw = open(path, 'rb').read()

    enc = chardet.detect(raw)['encoding'] or 'utf-8'

    return pd.read_csv(path, encoding=enc)

    読み込み例

    notice = read_csv_autodetect('status_notice.csv')

    env = read_csv_autodetect('900398071.csv')

    codebook = read_csv_autodetect('000420038.csv')

    コードをキーに結合(要:共通カラム名の正規化)

    notice = notice.rename(columns=lambda x: x.strip().lower())

    codebook = codebook.rename(columns=lambda x: x.strip().lower())

    merged = notice.merge(codebook, left_on='category_code', right_on='code', how='left')

    要するに、実務で最初にやるのはエンコーディングと列名の正規化、それからコード表で結合する作業です。

    KPIと実績のギャップ分析(やり方)

    • 多くの施策(例:デジタル田園都市国家構想の交付金)はKPIを掲げるが、公開データでKPIの時系列と事業データを直接突合できない場合がある。
    • 解法:事業ID ↔ KPIレコードを一意に紐付ける外部キー設計を政策側に要求する。CSVにproject_id、kpi_id、報告期を必須化すると集計が自動化できる。

    改善提案(エンジニア視点で実務的)

  • 常用フォーマットをUTF-8のCSV/NDJSON/Parquetに一本化。
  • スキーマ提供:JSON Schema / CSVW / Frictionless Data Packageで列定義と型を公開。
  • API化:最小限REST APIを用意、GET /datasets/{id}/records、差分取得にはIf-Modified-SinceかETagを使う。
  • コード表はマスター化してAPIで提供。コード→ラベル→説明→有効期間を持たせる。
  • データカタログ:CKANやData.go.jpのようなカタログでメタデータと更新履歴を管理。
  • 配布形式にParquetを追加して分析コストを削減。
  • 簡単なOpenAPI風の例(概念):

    paths:
    

    /datasets/{dataset_id}/records:

    get:

    parameters:

    - name: dataset_id

    in: path

    responses:

    '200':

    content:

    application/json:

    schema:

    type: array

    items: $ref: '#/components/schemas/Record'

    活用シナリオ提案

    • 地方自治体間比較ダッシュボード:共通スキーマとコード表があれば自動生成可能。
    • AI-Readyデータセット:ラベル付け済みのCSV/NDJSONでモデル学習に提供。内閣官房の「AI-Ready」方針にも合致。

    まとめ

    • CSV化は進んでるが、機械可読性を活かすためにはスキーマ・メタデータ・APIが必要。
    • 実務的にはエンコーディング標準化、コード表マスター化、Parquet/NDJSON提供が効く。
    • 小さな改善(schema.jsonと簡易REST)を積み重ねれば、データの再利用コストが劇的に下がる。

    おかむーから一言

    テクノロジーで社会をアップデートするって、結局「データをちゃんと渡せるか」に尽きるんですよね。API一本、スキーマ一つで世界が変わる。やりましょう、すぐできます!