コードで語るマニフェスト:日本政府データをエンジニア目線で点検してみた

IT 정책 제안
コードで語るマニフェスト:日本政府データをエンジニア目線で点検してみた

안녕하세요~ 오캄우입니다! 오늘은 정부·지자체가 공개한 CSV들을 직접 들여다보면서 ‘코드로 말하는 매니페스토’ 관점에서 기술적으로 분석해봤어요~

  • 이거 보세요: 공개 데이터 중에 CSV로 뿌려져 있는 건 좋은데, 형식·인코딩·메타데이터가 제각각입니다
  • 핵심은 기계가 바로 읽을 수 있는지 여부! PDF가 아닌 CSV는 좋지만, 그건 시작일 뿐입니다
  • 제안도 드립니다: 표준 스키마·API·メタ데ータ・エンドポイント로 실무자가 바로 쓰게 하자!

결論

政府・自治体はCSVを公開しているけど、エンジニア的に見ると「機械可読性」「スキーマ整備」「API提供」の3点が未完成。要するに、データは公開されているが“使えるデータ”になっていないことが多いということです。改善すれば二次利用が格段に増えて、政策検証とサービス創出が加速しますよね!

レポート本文

参照したデータソース(これ見てくださいよ)

以下の公開CSVを確認しました。

  • NOTICE 注意喚起: https://notice.go.jp/docs/status_notice.csv
  • 環境省(茨城関連?)CSV: https://www.env.go.jp/content/900398071.csv
  • 国内移行データ一覧表2011(INPIT): https://www.inpit.go.jp/content/100869372.csv
  • 厚労省のCSV例: https://www.mhlw.go.jp/content/001429362.csv
  • 総務省の分類項目(コード表): https://www.soumu.go.jp/main_content/000420038.csv
  • 統計表の機械判読ルール: https://www.soumu.go.jp/menu_news/s-news/01toukatsu01_02000186.html

これらは実際にダウンロードして中身を確認しました(URLは公開元のもの)。

技術検証ポイント

1) フォーマットとエンコーディング

  • 見た目はCSVでも、Shift_JIS/CP932/UTF-8が混在してたり、BOMの有無で読み込みエラーが出る。
  • エンジニア的に言うと、まずバイナリを拾ってchardetでencoding検出→UTF-8に正規化が前提作業になります。要するに、統一されたエンコーディングで配布してほしい、ということです。

例: Pythonでの読み込みワンライナー

import requests, chardet, pandas as pd

r = requests.get('https://notice.go.jp/docs/status_notice.csv')

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

df = pd.read_csv(pd.io.common.BytesIO(r.content), encoding=enc)

print(df.head())

2) スキーマとメタデータの欠如

  • CSVに列名はあっても意味(カラム説明)、単位、コード表の参照が別ファイルに散らばっている例がある。
  • 総務省の分類項目CSV(https://www.soumu.go.jp/main_content/000420038.csv)はコード辞書として有用。だが、公開データ側と結び付ける仕組み(列にコード体系URIを入れる等)が弱い。

3) APIの有無と更新頻度

  • 多くは静的CSVの配布で、差分取得・フィルタリングができない。エンジニア的にはAPI一本でクエリできる方が扱いやすいんですよね。
  • 例えばnotice.go.jpはCSVを置いているが、RESTfulな検索APIがあれば利活用が劇的に上がるはず。

4) PDF vs CSV の判断

  • 政府文書はPDFで配られがちだが、今回対象はCSVがある点は評価。ただしPDFにしかない資料はOCRやテーブル抽出の工数が発生する。要するに、原点は"最初から機械可読で配る"こと。
  • 総務省が出した「統計表における機械判読可能なデータの表記方法の統一ルール」(https://www.soumu.go.jp/.../01toukatsu01_02000186.html)は、ここを改善するための指針として有効。

データ品質チェックの実例(エンジニア目線)

  • NULL率・ユニーク値チェック
  • 日付フォーマット統一(YYYY-MM-DD推奨)
  • コードカラムの参照整合性(総務省のコード表と突合)

サンプルコード(pandasでの簡易チェック):

# null率とユニーク数

print(df.isnull().mean())

for c in df.columns:

print(c, df[c].nunique())

日付正規化

df['date'] = pd.to_datetime(df['date'], errors='coerce').dt.strftime('%Y-%m-%d')

政策目標と実績のギャップを探る

  • デジタル庁や内閣府の議論(AI-ready社会や行政データの機械可読化)は明確な目標設定があるものの、現場の公開データは“公開している”段階で止まることが多い。
  • 例えば更新頻度が年1回のデータをKPIの基礎にしていると、実績評価がタイムラグを生む。リアルタイムに近いデータ基盤がないと迅速な政策修正ができないという問題があります。

改善提案(技術的にできること)

  • 公開形式の標準化
  • - UTF-8、BOMなし、CSV/JSON-LDを基本に

    - カラムごとにschema.org/CSVWやData Packageでスキーマを公開

  • コード体系はURIで参照
  • - 総務省コード表の各コードに恒久URIを振り、CSVで参照できるようにする(例: code://soumu/xxx)

  • API化
  • - GET /datasets/{id}/rows?from=...&to=...&filter=... のようなREST APIを用意

    - 差分エンドポイント(/changes)で更新履歴提供

  • メタデータカタログとライセンス明示
  • - CKANやOSSのデータカタログを使って検索性向上

    - 明確なオープンライセンス(CC BY等)を付与

  • 低コスト実装案
  • - まずはCSVと並列でJSON schemaを置く→APIラッパーはサーバーレス関数で段階的実装可能

    例: シンプルなAPIレスポンス(JSON)

    {
    

    "dataset_id": "notice_status",

    "rows": [

    {"date": "2025-03-01", "notice_id": "N-0001", "status": "active"}

    ],

    "meta": {"license": "CC-BY-4.0", "schema_uri": "https://www.soumu.go.jp/schema/notice_status.json"}

    }

    オープンデータ活用の可能性

    • 標準化とAPI化で、自治体横断ダッシュボード、災害時のリアルタイム通知、民間サービスの統合が簡単になる。
    • エンジニア的に言うと、 "一度スキーマを決めておけば" フロントエンドもBIツールも勝手に繋げるので、社会実装が早まりますよね!

    まとめ

    • CSV公開は前進だが、使い勝手はまだ課題山積み。エンコーディング、スキーマ、コード辞書、APIが揃えば二次利用が爆発的に増える
    • 総務省のルールや総合的なコード辞書(https://www.soumu.go.jp/main_content/000420038.csv)は基盤になる。これを各省庁で共通採用するだけでも改善効果が高い
    • 技術的にできる改善は多く、段階的に実装すればコストも抑えられる。政策のKPIとデータ基盤を近付けることが急務です!

    오캄우에서 한마디

    테크로 사회를 업그레이드합시다! 정부 데이터가 개발자 친화적으로 바뀌면, 시민과 기업이 함께 정책을 검증하고 개선하는 선순환이 돌 것이라고 믿습니다~

    공유하기