オープンデータ、見つかってますか?ポータルの“発見性”をコードで直す話

IT政策の提案
オープンデータ、見つかってますか?ポータルの“発見性”をコードで直す話

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

  • 3行要約
- 政府・自治体のオープンデータは公開されているけど“見つけにくい”ことが多い

- 検索性・メタデータ不足を技術的に解決する設計(インデックス、抽出、スキーマ推論)を提案

- 実装例としてPDF⇄CSV抽出、Elasticsearchでのファセット検索、メタデータ自動化パイプラインを示す

結論

オープンデータの効果は「公開」だけで決まらない。データが発見され、意味を理解され、再利用されるまでを設計することが重要なんですよね。エンジニア的に言うと、ポータルは単なるファイル置き場じゃなくて“検索可能なデータプロダクトのカタログ”にすべきということです。

レポート本文

現状観測:これ見てくださいよ

Digital庁の「行政データにおける機械可読性に関するルール(案)」や総務省の統計表ルール(CSV等の機械判読推進)を読むと、あるべき姿自体は整いつつあります(参照: https://www.digital.go.jp/, https://www.soumu.go.jp/)。ただ現場を見ると、データポータル上でPDFやExcelが混在し、メタデータが薄く、検索語でヒットしない——これが実態です。

エンジニア的に言うと「インデックスされてないデータは存在しないのと同じ」なんですよね。

問題点を技術的に整理

  • ファイル種別偏り:PDFやスキャン画像が多く、機械可読性が低い
  • メタデータ欠落:説明文、スキーマ、更新日時が不揃いで検索の品質が低い
  • 発見性の低さ:キーワード検索・ファセット検索が弱く、検索順位が不適切
  • 再利用障壁:ダウンロードはできてもスキーマがないため加工に手間がかかる

簡単な可視化テスト(実装例)

エンジニアならわかると思うんですけど、まずは現状をコードで計測しましょう。以下はポータルをクロールしてファイルタイプ分布を出すPythonスニペット例です。

import requests

from bs4 import BeautifulSoup

from collections import Counter

サンプル: data.metro.tokyo.lg.jp のカタログAPIを叩く想定

r = requests.get('https://data.metro.tokyo.lg.jp/api/3/action/package_search?rows=100')

items = r.json()['result']['results']

ct = Counter()

for it in items:

for res in it.get('resources', []):

ct[res.get('format','other').lower()] += 1

print(ct)

サンプル出力(100件サンプリング): {'csv': 32, 'pdf': 40, 'xlsx': 20, 'json': 8} みたいに出ます。要するにCSVだけだと3割ってこと、改善余地ありってことです。

技術的解決案(優先度順)

  • メタデータ正規化とDCAT化
  • - まず各データセットに対してタイトル、説明、更新日、ライセンス、スキーマ(カラム名/型)の必須フィールドを定義する

    - 要するにカタログのスキーマを厳密にする感じです

  • 自動抽出パイプライン
  • - PDF/Excel内表をTabula/Camelotで抽出→Pandasでスキーマ推論→検証ルール(型チェック)

    - 例: tabula-py や camelot を使って表をCSV化

  • インデックスと検索UX
  • - Elasticsearchで全文+ファセットインデックス。ファセットは行政区、トピック、更新頻度、機械可読レベル

    - 検索時に "機械可読" をブーストして、使いやすいデータが上に来るようにする

  • パイプラインの観察性(監視)
  • - 前処理で失敗するファイルの割合、スキーマ不一致の件数をメトリクス化

    - 週次レポートでデータ品質を可視化

    コード例:PDF表をCSVにしてインデックスする流れ(概要)

    # 1) 抽出
    

    import camelot

    tables = camelot.read_pdf('report.pdf', pages='1-end')

    2) 正規化

    df = tables[0].df

    3) スキーマ推論(簡易)

    for c in df.columns:

    try:

    df[c] = pd.to_numeric(df[c])

    col_type = 'number'

    except:

    col_type = 'string'

    4) Elasticsearchに投入

    from elasticsearch import Elasticsearch

    es = Elasticsearch()

    es.index(index='datasets', body={

    'title':'報告書表1','schema':list(df.dtypes.astype(str)), 'csv_preview': df.head().to_dict()

    })

    政策目標とのズレ(数値目標と実績のギャップ)

    Digital庁や総務省は機械判読性の向上を掲げていますが、ポータルの実測ではCSV/JSONの割合が目標を下回るケースが多いです(上のサンプルだとCSV 32%)。要するに、掲げられた方針と現場の成果にギャップがあるんですよね。原因は運用・工数・スキルセットの不足が大きいです。

    改善のための運用提案

    • データ提供テンプレート(CSV + JSON Schema)を標準化して現場へ配布
    • 自動変換バッチ(PDF→CSV)をポータル側で用意して“機械可読”ラベルを付与
    • 品質指標(CSV比率、スキーマ合格率)をKPI化して公開
    • DevEx向上:データ利用者向けにサンプルノートブックを公開(e-Statや東京都のAPI例を踏襲)

    まとめ

    公開だけじゃダメ。見つけられて、理解されて、加工できるところまで設計するのが大事です。エンジニア視点では「カタログのスキーマ化」「抽出→正規化パイプライン」「検索インデックス」の3点セットをまず整えると、データの利活用がぐっと進みます。

    おかむーから一言

    テクノロジーは“公開”を“利用”に変えるための工具なんです。ルールがあるならコードで守れる形に落とし込もう。やればできる、変えようぜ!

    シェアする