0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python/DuckDB】日本の官公庁オープンデータを1行で分析する3分レシピ(入札・法人・44年間地価・医療)

0
Last updated at Posted at 2026-10-15

はじめに:日本のオープンデータはなぜこんなにも扱いづらいのか

日本の公的機関(官公庁・自治体・e-Stat等)が公開しているオープンデータは、世界屈指の網羅性と信頼性を誇ります。
しかし、いざデータ分析や機械学習、Webアプリケーションの開発に使おうとすると、以下のような「泥臭い罠」に直面します。

  • 文字コードの罠: Shift_JIS や CP932 で保存されており、現代のPython環境で読み込むと一発で文字化けする。
  • 日付の罠: 「令和5年10月1日」「平成28年度」といった元号表記が混在し、ISO-8601標準(YYYY-MM-DD)にパースするだけで前処理コードが膨らむ。
  • 表構造の罠: セル結合、無駄なタイトル行、空行、全角半角や注釈記号が入り乱れ、pd.read_csv() がエラーを吐く。
  • 名寄せの罠: 省庁ごとに企業名や住所の表記ゆれが激しく、テーブル横断のJOINが極めて困難。

こうした前処理の泥落としに丸一日費やした経験があるエンジニアも多いのではないでしょうか。

そこで今回、日本の主要な官公庁データ(全155データセット / 1,016万件超)を、米国連邦政府・SEC基準の「US標準24列スネークケース」「100% UTF-8」「13桁法人番号・5桁JIS自治体コード完備」に正規化しました。

主要な7大データセットの軽量サンプルを Hugging FaceにParquet形式で無料公開 しています。
さらに、ブラウザから1行のローカル環境構築もなしに3分で動かせる Google Colabレシピ を用意しました。

Open In Colab


3分クッキング:DuckDBでリモートParquetを直接インメモリ集計

DuckDBの read_parquet() を使うと、ローカルにギガバイト級のファイルをダウンロードすることなく、Hugging Face上にホストされたParquetファイルを直接HTTP経由でインメモリクエリできます。

準備(DuckDBのインストール)

pip install duckdb plotly pandas

レシピ1:全省庁の入札落札実績トップ企業を抽出(デジタル庁 GEPS)

国の電子入札システム(GEPS)に公示された直近の全省庁落札実績(2020〜2026年約28.5万件)から、落札金額上位企業を集計します。

import duckdb

con = duckdb.connect()
url = "https://huggingface.co/datasets/japan-opendata/japan-official-data-megabank-showcase/resolve/main/data/japan_public_procurement_sample_5k.parquet"

query = f"""
    SELECT 
        legal_name AS vendor_name,
        corporate_number,
        COUNT(*) AS total_contracts,
        ROUND(SUM(capital_amount_jpy) / 1e8, 2) AS total_award_100m_yen
    FROM read_parquet('{url}')
    WHERE legal_name IS NOT NULL
    GROUP BY legal_name, corporate_number
    ORDER BY total_award_100m_yen DESC
    LIMIT 5
"""

df = con.execute(query).df()
print(df)

たったこれだけで、数十秒後にはクリーンなデータフレームが出力されます。

レシピ2:国税庁の13桁法人番号を使って「落札データ × 本社所在地」を横断結合(JOIN)

日本のオープンデータの最大の弱点は「名寄せ」でした。 本データセット群では、すべての法人に対して国税庁の13桁法人番号(corporate_number)を機械的に付与しています。

そのため、別々の省庁から公開されているデータ同士を、SQLの INNER JOIN で一瞬で結合できます。

proc_url = "https://huggingface.co/datasets/japan-opendata/japan-official-data-megabank-showcase/resolve/main/data/japan_public_procurement_sample_5k.parquet"
corp_url = "https://huggingface.co/datasets/japan-opendata/japan-official-data-megabank-showcase/resolve/main/data/japan_corporate_invoices_sample_5k.parquet"

join_query = f"""
    SELECT 
        p.legal_name AS vendor_name,
        p.corporate_number,
        c.prefecture_en AS hq_prefecture,
        c.city_ja AS hq_city,
        COUNT(p.primary_name) AS bids_won,
        ROUND(SUM(p.capital_amount_jpy) / 1e6, 2) AS award_value_million_yen
    FROM read_parquet('{proc_url}') p
    INNER JOIN read_parquet('{corp_url}') c
        ON p.corporate_number = c.corporate_number
    WHERE p.corporate_number IS NOT NULL
    GROUP BY p.legal_name, p.corporate_number, c.prefecture_en, c.city_ja
    ORDER BY award_value_million_yen DESC
    LIMIT 10
"""

df_join = con.execute(join_query).df()
print(df_join)

レシピ3:過去44年間の地価公示データから最高価格地点を探索(国土交通省)

1983年〜2026年までの44年間におよぶ国土交通省の地価公示データ(約110万件)も、同じフォーマットで照会可能です。

land_url = "https://huggingface.co/datasets/japan-opendata/japan-official-data-megabank-showcase/resolve/main/data/japan_land_prices_sample_5k.parquet"

land_query = f"""
    SELECT 
        area_name_local AS location,
        city,
        current_value AS land_price_yen_per_sqm,
        yoy_change_pct,
        event_date AS valuation_year
    FROM read_parquet('{land_url}')
    WHERE current_value IS NOT NULL
    ORDER BY current_value DESC
    LIMIT 5
"""

df_land = con.execute(land_query).df()
print(df_land)

ブラウザで即座に動かせる Google Colab ノートブック

上記を含むすべてのレシピとインタラクティブな可視化グラフをまとめたGoogle Colabノートブックを公開しています。 ブラウザでアクセスして「すべてのセルを実行」を押すだけで3分で体験できます。

👉 Google Colab で開く
https://colab.research.google.com/github/japan-opendata-lab/japan-official-data-megabank/blob/main/notebooks/japan_open_data_in_3_minutes.ipynb

本番データ(1,016万件)やAPI自動連携が必要な場合

Hugging Face上のデータセットは各カテゴリ2,000〜5,000件のショールーム用サンプルです。

本番プロダクト、商用分析、定期更新パイプライン、またはClaude Desktop / CursorなどのAIエージェントから直接クエリしたい場合は、以下の公開リソースをご活用ください。

RapidAPI Hub(月額0〜499$ / 全量 1,016万件):
https://rapidapi.com/organization/japan-opendata-lab

※BASICプラン(無料)で即座にAPIキーを取得して月50回まで本番エンドポイントを試せます。MEGAプランではRenderバックエンド上のDuckDB生SQL実行(POST /api/v1/query)が可能です。

公式 Python SDK(GitHub):
https://github.com/japan-opendata-lab/japan-official-data-megabank

Claude / Cursor 向け MCP サーバー:
https://github.com/japan-opendata-lab/japan-data-mcp

※Smithery Quality Score 100/100点満点認定。

日本の公的データの泥落としにかかる時間をゼロにして、本質的な分析やプロダクト開発を加速させましょう!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?