pd.json_normalize で平坦化し、全フィールドの dtype・null率を一覧化できるitems 配列に各施設 1 オブジェクトshelterId / shelterStartTimestamp / shelterEndTimestamp は 100% null = 開設状況用予約フィールド → 実体は 33 列)name, address01, latitude, longitude, capacity, municipalityNamefloodShFlg, sedimentDisasterShFlg, stormSurgeShFlg, earthquakeShFlg, tsunamiShFlghandicappedFlg, ostomateFlg, petFlg, parkingFlg, internetFlg, bathFlg, breastfeedingFlg, powerFlg, cookingFlg, heatingFlg, coolongFlg| 論題 | データセット | DL | 保存先 | 形式 | サイズ |
|---|---|---|---|---|---|
| 避難所情報 (4,065 施設) | DoBoX #42 | ページから DL ボタン | data/shelters.json | JSON (items 配列, UTF-8) | 約 4 MB |
一括取得(全レッスン共通, 推奨):
cd "2026 DoBoX 教材"
py -X utf8 data\fetch_all.pyfetch_all.py はカタログ・追加データを data/ と data/extras/ に再現可能ダウンロード。DoBoX のオープンデータは申請不要、商用・非商用とも利用可。本レッスンの .py スクリプトは、データが無ければ自動取得してから処理を始めるよう実装されています(ensure_dataset() ヘルパ)。
cd "2026 DoBoX 教材"
python -X utf8 lessons/L03_shelter_analysis.py
json.load → pd.json_normalize(raw["items"]) で 4,065 × 36 の DataFrame を得る。latitude / longitude / capacity は文字列で来るため pd.to_numeric(errors="coerce"){0,1} に整数化し、件数・カバレッジ率を集計|A∩B| / |A∪B| を 5×5 で計算 → ヒートマップ。同時対応のしやすさが定量化されるscipy.stats.lognorm.fit で μ_log, σ_log を推定 → ヒストに pdf を重ね、Q-Q プロットで末尾の乖離を可視化groupby("municipalityName") で件数・capacity合計・BFスコア中央値 → 散布 + 上位 15 バーで二側面提示>=1 を集計 (0〜11) → 件数上位 12 市町村で箱ひげ比較↑ L03_shelter_analysis.py 行 19–433
36 列のうち shelterId / shelterStartTimestamp / shelterEndTimestamp は 100% null (開設状況の予約フィールド)。capacity の null は 535 件 (13%) — 「収容力不明」の施設が一定数ある。
| field | dtype | null率(%) | ユニーク数 | 例 |
|---|---|---|---|---|
| facilityId | object | 0.0 | 4065 | 00006319 |
| name | object | 0.0 | 4020 | 中央公園広場エリア |
| capacity | float64 | 13.2 | 799 | 1500.0 |
| address01 | object | 0.0 | 3556 | 広島市中区基町15 |
| address02 | object | 0.0 | 1 | |
| latitude | float64 | 0.0 | 4040 | 34.40121 |
| longitude | float64 | 0.0 | 4044 | 132.45569 |
| shelterAdmId | object | 0.7 | 4020 | |
| floodShFlg | object | 0.0 | 2 | 0 |
| sedimentDisasterShFlg | object | 0.0 | 2 | 0 |
| stormSurgeShFlg | object | 0.0 | 2 | 0 |
| earthquakeShFlg | object | 0.0 | 2 | 1 |
| tsunamiShFlg | object | 0.0 | 2 | 1 |
| municipalityCd | object | 0.0 | 30 | 341011 |
| municipalityName | object | 0.0 | 30 | 広島市中区 |
| shelterId | object | 100.0 | 0 | - |
| shelterStartTimestamp | object | 100.0 | 0 | - |
| shelterEndTimestamp | object | 100.0 | 0 | - |
| westernFlg | object | 0.0 | 3 | 0 |
| westernNum | float64 | 60.2 | 74 | 21.0 |
| japaneseFlg | object | 0.0 | 3 | 0 |
| japaneseNum | float64 | 77.4 | 52 | 10.0 |
| handicappedFlg | object | 0.0 | 2 | 0 |
| ostomateFlg | object | 0.0 | 2 | 0 |
| petFlg | object | 0.0 | 4 | 0 |
| parkingFlg | object | 0.0 | 3 | 0 |
| parkingNum | float64 | 23.9 | 155 | 0.0 |
| internetFlg | object | 0.0 | 3 | 0 |
| bathFlg | object | 0.0 | 4 | 0 |
| breastfeedingFlg | object | 0.0 | 2 | 0 |
| powerFlg | object | 0.0 | 2 | 0 |
| cookingFlg | object | 0.0 | 2 | 0 |
| heatingFlg | object | 0.0 | 2 | 0 |
| coolongFlg | object | 0.0 | 2 | 0 |
| crowdedStatus | object | 0.0 | 1 | 9 |
| comment | object | 0.0 | 1 |





| n | cap_total | cap_med | flood | sediment | tsunami | bf_med | |
|---|---|---|---|---|---|---|---|
| municipalityName | |||||||
| 呉市 | 518 | 100239.0 | 95.0 | 347 | 217 | 284 | 0.0 |
| 福山市 | 474 | 120842.0 | 330.0 | 220 | 235 | 175 | 0.0 |
| 東広島市 | 279 | 20704.0 | 25.0 | 269 | 227 | 26 | 0.0 |
| 尾道市 | 273 | 317094.0 | 600.0 | 247 | 163 | 229 | 0.0 |
| 庄原市 | 247 | 40116.0 | 30.0 | 222 | 198 | 0 | 0.0 |
| 広島市安佐南区 | 156 | 62374.0 | 79.0 | 127 | 104 | 0 | 0.0 |
| 広島市安佐北区 | 153 | 32383.0 | 66.5 | 128 | 93 | 0 | 0.0 |
| 広島市西区 | 136 | 35840.0 | 63.5 | 103 | 96 | 18 | 0.0 |
| 江田島市 | 131 | 24663.0 | 65.0 | 123 | 91 | 74 | 0.0 |
| 三原市 | 128 | 130531.0 | 101.0 | 91 | 85 | 109 | 2.0 |
| 広島市南区 | 122 | 53049.0 | 71.5 | 106 | 92 | 5 | 0.0 |
| 府中市 | 120 | 229132.0 | 142.0 | 89 | 72 | 0 | 0.0 |
| 廿日市市 | 120 | 66827.0 | 72.0 | 109 | 81 | 67 | 1.0 |
| 広島市佐伯区 | 117 | 32273.0 | 128.0 | 99 | 81 | 6 | 0.0 |
| 北広島町 | 102 | 14351.0 | 94.0 | 57 | 67 | 0 | 0.0 |
画面拡大で個別マーカーが現れる (zoom 13 以上で MarkerCluster 解除)。クリックで施設名・住所・収容人数・BFスコア・対応災害種別を表示。
shelterId/Start/End が 100% null だと気付かずに使うとバグる。「最初に dtype と null率の表を眺めろ」がデータ実務の鉄則。