代码视角看政府数据:从PDF到API的可用性检验

IT政策提案
代码视角看政府数据:从PDF到API的可用性检验

大家好,我是おかむー!今天要用一点工程师的眼光,来把政府和自治体的数据拿出来掰一掰、测一测~

  • 这篇文章用“代码说话”的方式评估政府数据的機械可読性与可用性
  • 我会指出常见问题(PDF、编码、缺元数据)并给出工程级改善建议
  • 最后给出简单代码示例,让你能把散落的CSV拉起来做分析

結論

看这个:公开数据光放PDF跟散落CSV不够!要真正变成可以被AI/分析系统吃掉的“API级数据”,需要统一格式、提供机器可读的描述(schema/CSVW/JSON-LD)、并建立持续的品質检测流水线。エンジニア的に言うと、これはAPI一本で解決する話なんですよ。

レポート本文

何が見えてるか(ソース参照)

これ見てくださいよ:国や自治体はCSVを公開してるケースもある(例:notice.go.jp の NICTER 注意喚起 CSV、jinji.go.jp や env.go.jp のCSVファイルなど)が、公開のされ方がバラバラなんです。総務省は「統計表における機械判読可能なデータの表記方法の統一ルール」を出していて(2020/12/18)、内閣官房も機械可読性の重要性を指摘してます(cas.go.jp 資料)。でも現場を見るとPDFで配られてたり、CSVが存在してもメタデータが欠けてたりする。

ポイント:

  • PDFに埋め込まれた表は機械で取り出しにくい(OCRや表抽出が必要)
  • CSVは存在してもエンコーディング(Shift_JIS vs UTF-8)、列名の不統一、日付フォーマット不一致がある
  • APIは未整備で、データカタログやスキーマ記述がないため自動化が難しい

要するに、表があるだけでは“使えるデータ”とは言えないということです。

データ品質とKPIギャップの観点

例えば「デジタル田園都市国家構想交付金」の実績報告資料を見ると(県のPDFなど)、KPIと実績は提示されているけど、項目間の対応関係や時系列データはCSVで整理されていないことが多い(山口県の資料では採択事業や実績額がPDFで示されているが、機械判読しやすい形での公開は限定的)。この状態だと政策評価や再現可能な監査がしづらいんですよね。

技術的な検証(エンジニア視点)

  • メタデータ不足:CSVにschema(列型・単位・欠損意味)がない。これ、データパイプラインを作るときの最大のハードルです。
  • 形式バラつき:同じ指標でも自治体ごとに列名や単位が違う。正規化コストが高い。
  • エンコーディングとロケール:日本の古いCSVはShift_JISで来ることが多くて、UTF-8前提のツールで読み込むと文字化けする。

改善提案(具体的にやれること)

  • すべての公開データはCSV/JSON/Parquetで併記。PDFは人向けの説明に限定。
  • 各データセットにCSVW/JSON-LDでschemaを付与(列名、型、単位、更新頻度、ライセンスを明記)
  • 公共のデータカタログ(DCAT)を採用してAPIエンドポイントを一覧化
  • CIでデータ品質チェックを回す:列数チェック、型チェック、nullレート、整合性(外部参照の存在)
  • 小さくても良いのでREST/GraphQLのAPIを用意して、認証不要の読み取り専用エンドポイントを公開

技術スタック例:GitHub Actions + pandas/pyarrowでETL、AWS S3公開、OpenAPI仕様でAPI管理。

実践コード例

以下は、公開されているCSVを拾って読み、UTF-8化して簡単なスキーマチェックをするPythonの例です(エンジニア的に言うと、こういうスクリプトでまずは“機械可読化”の第一歩を踏めます!):

import pandas as pd

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

Shift_JISの可能性があるのでまずは推測して読み込み

try:

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

except Exception:

df = pd.read_csv(url, encoding='shift_jis')

簡単なスキーマチェック

expected_cols = ['datetime', 'level', 'message']

print('columns:', df.columns.tolist())

for c in expected_cols:

if c not in df.columns:

print('Missing column:', c)

JSONに変換して出力

print(df.head().to_json(orient='records', force_ascii=False))

さらに進めるなら、panderaやjsonschemaでスキーマ検証を自動化してCIに組み込むと良いです。

オープンデータ活用提案

  • データハブを作って自治体ごとのスキーママッピングを共有(共通の辞書を持つ)
  • 二次利用を想定したサンプルNotebookやクエリ集を公開して、データ利活用の敷居を下げる
  • KPI評価レポジトリをオープン化して、政策の数値目標と実績の差分を自動更新するダッシュボードを提供

これで住民も研究者もNPOも政策評価がやりやすくなりますよね!

まとめ

  • 政府・自治体はCSVを出しているが、機械可読性やメタデータが不十分で自動化が難しい
  • PDFで配るだけはダメ。CSV/JSONに加えてschema(CSVW/JSON-LD)とAPIを用意するのが重要
  • エンジニアリングのプラクティス(CIでの品質チェック、OpenAPI、データカタログ)を導入すれば、政策評価やAI利活用の基盤になる

おかむーから一言

我是两度创业的おかむー,在GovTech和AI方向写过不少代码。技术能把行政的「見えない部分」变成可检验的事实,让政策更透明,也能真正推动社会升级!