🍼 東京都オープンデータ・ハッカソン 2026 · 非公式リソース

保育・子育てオープンデータ
正規化ガイド + 統一データセット

東京23区の保育・子育て系オープンデータは、区ごとに公開単位(施設別 or 地域集計)もフォーマット(CSV / Excel / PDF / JSON)も文字コードもバラバラで、区をまたいだ比較が実質できません。23区すべてを実際に調査し、生成AIで統一スキーマに正規化した結果をここに無償公開します。学童・介護など同構造の領域にも応用できる方法論です。

23/23区
実データ調査・正規化 完了
4,535件
施設単位レコード
1,258件
区集計・時系列レコード

Section 1

なぜ「23区の保育データ」を比較できないのか

「入りやすさが制度変更でどう動いたか」のような問いに答えるには、区をまたいだ同じ粒度・同じスキーマのデータが必要です。ですが現状は次の3重苦があります。

📄

粒度がバラバラ

施設単位(定員・空き数・所在地)で出す区もあれば、区全体の待機児童数だけを集計値として出す区もあります。同じ「保育データ」でも比較可能なレベルが違います。

🗃️

フォーマットがバラバラ

CSV・Excel・PDF・JSON/XML・素のHTMLが混在。文字コードもUTF-8とShift-JISが混在し、同じ列名(例:定員)でも区によって意味や単位が違うことがあります。

生成AIとの相性

この「フォーマット・粒度のバラつき」こそ、生成AIによる抽出・正規化が最も効きやすい領域です。PDFの表やHTMLの箇条書きであっても、目標スキーマを与えて読み取らせれば、人手でのデータ入力なしに構造化できます。以下は、その実践結果です。

Section 2

データの探し方 — 実は3層構造になっている

東京都・区の保育オープンデータは、1つのカタログに集約されていません。実際に23区を調査した結果、次の3つの層を順番に当たるのが最も効率的でした。

実体注意点
① 東京都オープンデータカタログ
catalog.data.metro.tokyo.lg.jp
都・一部区が組織単位でCSV/GeoJSONを登録するCKANカタログ。区が直接ここにデータセットを持つケースもある(例:一部区の「子育て」データセットバンドル)。 HTML直アクセスはAWS WAFのJSチャレンジでブロックされることがある。search.ckan.jp(横断検索ミラー)経由や、カタログのJSON API経由だと取得できることが多い。
② オープンデータAPIカタログ
spec.api.metro.tokyo.lg.jp
①とは別建ての、区市町村のデータをJSON/XMLラッパーとして提供するカタログ。区名+「保育」等で検索すると、多くの区の一次データに辿り着ける。 転送形式(JSON/XML)を統一しているだけで、列名やスキーマは統一されていない。区ごとに列構成が異なる前提で読む必要がある。
③ 各区独自のオープンデータポータル/区サイト ①②に登録がない区でも、区独自のオープンデータ推進ページや、通常の子育て支援課ページにPDF/Excelで公開されていることが多い。 「オープンデータ」と銘打っていないPDF/HTMLpageも実質的に唯一の一次情報であるケースが多い(例:現況の空き状況は区サイトのPDFのみ、というパターン)。
この3層構造は保育に限りません。学童・介護・子育て支援施設など、同じ「区ごとに粒度もフォーマットもバラバラ」な構造を持つ行政データ全般に、同じ探索順序と正規化アプローチが使えます。

Section 3

どうやったか — 正規化パイプライン

23区すべてを手作業で1つずつ処理するのは非現実的なので、並列化と「捏造しない」ルールの徹底で対応しました。実際に踏んだ手順です。

正規化パイプラインの図解:東京23区 → 8並列エージェント → 実データ抽出・正規化(PDF/CSV/HTMLを統一スキーマへ)→ 統合データセット、の4段階を左から右へ矢印でつないだフロー図

23区を並列グループに分割

23区を8グループ(1グループ2〜3区)に分け、各グループを独立したLLMエージェントが並行して担当。前工程のカタログ調査で得ていた「区ごとの当たり」(データセット名・URL)を事前情報として渡し、無駄な再探索を減らしました。

3層探索 → 実データの取得

各エージェントが Section 2 の3層(都カタログ/APIカタログ/区独自ポータル)を順に当たり、見つけたCSV・Excel・PDF・HTMLを実際にダウンロード。説明文だけで済ませず、必ずファイル本体を取得させています。

スキーマへの抽出・正規化

CSV/JSONはそのままパース(Shift-JIS→UTF-8変換込み)。PDFやHTMLの表は目視で読み取り、Section 4 のスキーマに沿って手入力で構造化。列の対応関係が曖昧な場合(結合セル、複数バージョンの様式混在など)は、推測で埋めずnullのままnotesに理由を記録させました。

突き合わせ検証

可能な場合はソース側に印字された合計値(例:PDFの「合計◯◯件」という注記)と、抽出したレコードの件数を突き合わせて一致を確認。実際、江戸川区のPDFはこの方法で抽出件数とソースの印字合計が完全一致しました。一致しない・確認できないケースは正直にnotesへ記載。

マージ・集計

23区分の正規化済みJSONを1本の combined.json にマージし、区ごとのレコード件数・フォーマット内訳・欠損率を機械的に集計するスクリプトを実行。Section 5・6 の表とグラフは、すべてこのスクリプトの出力からそのまま生成しています(手作業の転記ミスが入りません)。

この分割統治アプローチも汎用です。「区数 × フォーマットの組み合わせ」が多い行政データほど、1区ずつ順番に処理するより、区ごとに独立させて並列処理する方が速く、かつ1区の失敗が他区に波及しません。

Section 4

統一スキーマ

23区のデータを2種類のレコード型に正規化しました。施設単位の情報と、区全体の集計・時系列情報は性質が異なるため、意図的に分けています。

childcare_facility — 施設単位レコード

{
  "ward": "港区", "ward_romaji": "Minato",
  "facility_id": "区独自IDまたは生成スラッグ",
  "facility_name": "string",
  "facility_type": "認可保育所 | 認証保育所A型/B型 | 認可外保育施設 |
                    認定こども園 | 地域型保育事業 | 事業所内保育所 |
                    学童クラブ | 一時保育 | 病児保育 | other",
  "address": "string | null",  "lat": "number | null",  "lon": "number | null",
  "capacity_total": "number | null",   "capacity_by_age": "{ \"0\":n, \"1\":n, ... } | null",
  "enrolled_total": "number | null",   "vacancy_count": "number | null",
  "as_of_date": "YYYY-MM-DD | null",   "granularity": "per_facility",
  "source_format": "csv | xlsx | pdf | json | xml | html",
  "source_url": "string",   "source_dataset_title": "string",
  "notes": "string | null — 欠損・推定・不確実性は必ずここに明記"
}

childcare_ward_stat — 区集計・時系列レコード

{
  "ward": "港区", "ward_romaji": "Minato",
  "period": "YYYY-MM または YYYY年度",
  "metric": "capacity_total | enrolled_total | waitlist_count | applicants | facility_count",
  "value": "number",  "unit": "string | null",  "granularity": "ward_aggregate",
  "source_format": "csv | xlsx | pdf | json | xml | html",
  "source_url": "string",   "source_dataset_title": "string",   "notes": "string | null"
}
正規化の原則(実際に守らせた3ルール): ①URL・数値は実際に取得したソースからのみ記録し、絶対に捏造しない。 ②値が読み取れない場合はnullにしてnotesに理由を書く(欠損は正直な結果であり、失敗ではない)。 ③PDFの表が曖昧で列の対応関係を推測しないと埋まらない場合は、無理に埋めず空欄のままにする。

Section 5

集計 — 23区の実態

23区すべてで実データを取得・正規化した結果の集計です。全体サマリーののち、23区全件の内訳表を掲載します(グラフでの可視化は次のSection 6)。

全体サマリー

🏫

4,535件

施設単位レコード(23区合計)

📈

1,258件

区集計・時系列レコード(23区合計)

🎯

47% / 35%

定員判明率 / 緯度経度判明率(施設レコード中)

フォーマット内訳(全5,793レコード中)

PDF 35% CSV 25% xlsx 17% HTML 13% JSON 10%
PDF — 2,008件(最大シェア。多くは目視転記が必要) CSV — 1,474件 Excel — 963件 HTML — 741件 JSON — 607件

構造化データ(CSV/JSON)よりPDF/HTML/Excelの方が多く、「オープンデータ」を謳っていても実際は目視転記が前提のデータが主流であることが分かります。

気になった特記事項

「待機児童ゼロ」の公式記録

千代田区(2025年度11ヶ月連続)、練馬区(2021〜2025年度5年連続)、足立区(2023年度)、葛飾区(2022〜2024年度)で、区の公式統計上ゼロという記録が見つかりました。これ自体がSection 1の「制度変更で入りやすさがどう動いたか」という問いへの重要な材料になります。

🔄

「オープンデータ」が消える/古びる

杉並区は公式オープンデータCSVページが404で消失(API経由のデータで代替)、新宿区の都カタログ登録は2017年度で更新停止、葛飾区の学童クラブCSVは2020年時点で止まっていました。オープンデータは「登録した後」のメンテナンスが弱いという構造的な傾向が見えます。

区ごとの内訳(23区全件)

施設件数区集計件数主なフォーマット定員判明率緯度経度判明率特記事項
中野区4418JSON, HTML, PDF54%53%23区最多の施設件数(複数データセットを合成)
杉並区377109JSON, PDF1%24%区公式オープンデータCSVページが404で消失、API経由データで代替
江東区32084CSV, PDF10%33%
世田谷区29627HTML0%0%統計資料は充実もPDF中心、地区別内訳の多くは未公開
板橋区295148CSV0%53%
足立区28613CSV, Excel43%0%待機児童ゼロ(2023年度時点、公式アクションプラン)
葛飾区243156CSV, PDF0%30%待機児童ゼロ(2022〜2024年度)/学童データは2020年時点で更新停止
港区23610CSV78%54%唯一、月次更新のCSV+GeoJSONを施設単位で公開
北区2217HTML100%0%
練馬区220306CSV, Excel94%0%待機児童ゼロ(2021〜2025年度、5年連続)
江戸川区20735CSV, PDF94%94%
大田区19221PDF100%0%
品川区18816PDF100%0%
豊島区149100Excel, PDF93%93%
文京区1240CSV100%100%施設データはきれいなCSVだが区集計(時系列)データは未発見
目黒区12052CSV0%100%
墨田区11984HTML, PDF67%0%
中央区1033CSV89%100%
新宿区989PDF0%0%公式カタログ登録は2017年度で更新停止、現況はPDFのみ
台東区8720CSV80%83%
渋谷区8439HTML, PDF8%0%
荒川区830CSV, HTML0%84%当初サーベイでは見落とされていたCKANデータセットを追加調査で発見・訂正
千代田区4611PDF100%0%待機児童ゼロ(2025年度11ヶ月連続、公式統計)

出典URL・欠損理由はデータセット内の source_url / notes フィールドに区・レコード単位で記録されています。

Section 6

可視化(グラフ)

上の表と同じデータを、2本のグラフで見せます。棒の実際の値はホバー(フォーマット内訳)または右側の数値ラベルで確認できます。色の意味が分かりにくい場合は、上のSection 5の表を参照してください。

区ごとの施設件数 × フォーマット構成(施設件数の多い順)

CSV JSON HTML Excel PDF
中野区441件
杉並区377件
江東区320件
世田谷区296件
板橋区295件
足立区286件
葛飾区243件
港区236件
北区221件
練馬区220件
江戸川区207件
大田区192件
品川区188件
豊島区149件
文京区124件
目黒区120件
墨田区119件
中央区103件
新宿区98件
台東区87件
渋谷区84件
荒川区83件
千代田区46件

棒の長さ=施設件数(中野区441件を100%とした相対値)。色の内訳=その区のソースフォーマット構成。セグメントにカーソルを合わせると件数が表示されます。

区ごとの定員判明率(データの充実度、高い順)

「空き数だけ公開・定員は非公開」という区が多いことが分かります。単一系列のため色は1色(判明率)で統一しています。

北区
100%
大田区
100%
品川区
100%
文京区
100%
千代田区
100%
練馬区
94%
江戸川区
94%
豊島区
93%
中央区
89%
台東区
80%
港区
78%
墨田区
67%
中野区
54%
足立区
43%
江東区
10%
渋谷区
8%
杉並区
1%
世田谷区
0%
板橋区
0%
葛飾区
0%
目黒区
0%
新宿区
0%
荒川区
0%
↑ 同じデータの表(Section 5)を見る

Section 7

データを使う

この正規化データセットとスキーマ定義をそのまま公開します。同じ探索・抽出をゼロからやり直す必要はありません。

正規化済みデータセット(23区統合)

4,535施設レコード + 1,258区集計レコード。JSON、UTF-8。

combined.json · 約5.6MB · 2026-07-23時点で取得・正規化

combined.json をダウンロード →

スキーマ定義書

上記データセットの元になった正規化ルール(Markdown)。

SCHEMA.md をダウンロード →
ライセンス・出典表記について:このデータセットは23区それぞれが公開した一次データを集約・正規化したものです。各レコードのsource_urlが実際の一次情報源であり、区ごとにライセンス条件(多くはCC BY 4.0だが、区によって個別規約が優先される場合あり)が異なります。再配布・成果物への組み込みの際は、レコードごとのsource_urlを辿って一次情報源のライセンス表記ルールに従ってください。本サイトはあくまで「取得・正規化の手間を省く」ための中間成果物です。

本ページは1参加者(門戸良介)が個人の立場で作成した非公式コンテンツです。東京都・GovTech東京・ハッカソン事務局の公式資料ではありません。掲載データは2026年7月時点で各区の公開情報から取得したものであり、最新の値・URL・ライセンス条件は必ず各データ提供元の一次情報でご確認ください。抽出過程で読み取れなかった項目は正直にnullとしており、憶測で埋めた値はありません。