図表とデータは一致してる?政府CSVの“図表再現性テスト”を提案するよ

IT政策の提案
図表とデータは一致してる?政府CSVの“図表再現性テスト”を提案するよ

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

  • これ見てくださいよ:省庁が「図(第1-1-4図)」として出してる横にCSVがあることが増えた
  • でも図とCSVが本当に一致してるかは意外と検証されてない!エンジニア的に言うと再現性テストが足りないんですよ
  • 提案:公開ワークフローに「図表再現性テスト」を入れて、数値と図の元データが一致することを自動化しよう

結論

政府・自治体が公開する図表に対して、発表時点でCSVや機械可読データと数値の一致性を自動検証する仕組みを導入すべき。要するに、"図はただの絵じゃなくてデータの宣誓書"にするということです。

レポート本文

背景と事例

最近、内閣府の統計資料にCSVが並んでます(例: https://www5.cao.go.jp/j-j/wp/wp-je24/csv/d1-1-4.csv や d1-1-42.csv)。Digital庁や各省でもhospital.csvのような機械可読ファイルが公開されてます。これ、すごく良い流れなんですけど、気をつけたいのは「図(PDF/HTML)とCSVの同期」です。

これ見てくださいよ:図のキャプションや注記に載る合計値・寄与度が、CSVから集計すると微妙にズレることがある。要するに、図は手作業で作られてCSVは別工程で出た、という運用ミスが発生しがちなんです。

技術的にチェックする方法(考え方)

  • データ取り込み
  • - エンジニア的に言うと、まずencodingとBOMを正しく扱うこと!pandasだとutf-8-sigでBOM除去、またはchardetでエンコ検出。

  • 図からの数値抽出
  • - PDFならtabula/camelot、HTMLならDOMから直接数値を取る。要するに"図を機械で読む"処理を入れる。

  • 再現性テスト
  • - CSVから同じ集計(合計、月次、寄与度)を計算して図の数値と比較。絶対差 or 相対差で閾値(例えば0.5%)を定める。

  • CI化
  • - デプロイ前にテストがFailしたら公開を止める。簡単なGitHub ActionsでOK。

    サンプルコード(概念例、実行は現場で)

    import pandas as pd
    

    from decimal import Decimal

    def load_csv(path):

    try:

    return pd.read_csv(path, encoding='utf-8-sig')

    except Exception:

    return pd.read_csv(path, encoding='cp932')

    集計例: 新車販売の合計を比較

    df = load_csv('d1-1-4.csv')

    前処理: 列名正規化、数値化など

    expected_value は図のキャプションから抽出した値

    def within_tolerance(a, b, rel_tol=0.005):

    return abs(Decimal(a) - Decimal(b)) <= abs(Decimal(b) * Decimal(rel_tol))

    CI(概念)

    # GitHub Actions pseudo
    

    on: [push]

    jobs:

    test:

    runs-on: ubuntu-latest

    steps:

    - uses: actions/checkout@v2

    - name: Run figure-data-check

    run: python scripts/figure_data_check.py

    実装上の注意点

    • 文字コードとBOM:CSVにFEFFのようなBOMが付くと壊れることがある。utf-8-sigで対処。
    • 単位と丸め:図は四捨五入で表示されるから比較は"許容誤差"を設定すること。
    • メタデータの欠如:図に使った「元データの行番号」や「生成SQL」があれば再現性がグッと上がる。

    政策とアカウンタビリティの観点

    政策の進捗や予算の説明に図が使われる場面は多い。図とデータが一致しないと、数字の信頼性が落ちて政策への信頼にも影響する。要するに、技術の仕組みで説明責任を担保する場面なんです。

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

    • 図ごとにmetadata.jsonを添付(fields: source_csv, query_hash, generated_at, rounding)
    • 公開パイプラインに再現性テストを入れる(図作成ジョブの最後にテスト)
    • 図のHTML埋め込み時に元データのURLをdata-*属性で記載
    • 省庁共通の「図表テスト」ライブラリをOSS化して共有

    まとめ

    図は政策を伝える強力な手段だけど、ちゃんと元データと繋げないと説明力が落ちる。エンジニア的に言うと、"図表再現性テスト"は小さな投資で大きく信頼を高められるんですよ!

    おかむーから一言

    コードで再現できる政策は強いです。Techで説明責任を立て直して、もっと健全な公共政策を作っていきましょう!

    シェアする