⚠️ このスクリプトは自動取得に対応していません。以下のデータセットを DoBoX から手動でダウンロードし、data/extras/ 以下に保存してください。
| ID | データセット名 |
|---|---|
| #43 | 高潮浸水想定区域情報_30年確率 |
| #44 | 高潮浸水想定区域情報_伊勢湾台風規模 |
| #45 | 高潮浸水想定区域情報_想定最大規模 |
| #46 | 津波浸水想定区域情報 |
| #48 | 土砂災害警戒区域・特別警戒区域情報_広島県 |
| #50 | 雪崩危険箇所情報_広島県 |
| #62 | ため池基本情報 |
| #63 | ため池浸水想定区域情報_Shapefile |
| #79 | dataset #79 |
| #80 | dataset #80 |
| #81 | dataset #81 |
| #181 | dataset #181 |
| #313 | 河川浸水想定区域情報_想定最大規模_全河川 |
| #333 | dataset #333 |
| #666 | dataset #666 |
| #1247 | 緊急輸送道路 |
| #1429 | 許可盛土等(法第12条第1項・30条第1項) |
| #1430 | 届出盛土等(法第21条第1項・40条第1項) |
実行コマンド:
cd "2026 DoBoX 教材"
python -X utf8 lessons/L91_multi_hazard_score.py
DoBoX のオープンデータは申請不要・商用/非商用とも利用可。
data/extras/ は .gitignore 対象(約 57 GB のキャッシュ)。
スクリプト実行で自動再生成されます。
広島県全域で最も多重リスクに晒される地域はどこか? 7 ハザード合成スコアによる総合俯瞰で、 「多重ハザード集中ホットスポット」 を同定し、 これらが緊急輸送道路 (L72) とどう交差するかを定量する。
本記事は 7 ハザードを 1 つのグリッドに統合するため、 既存教材で扱った データを キャッシュ再利用することで処理時間を 1〜3 分以内に抑える。 新規ダウンロードは行わない (盛土 CSV を除き、 すべて L4-L72 で取得済み)。
| ハザード | 型 | raw n | ヒットセル | 県内% | 等重み | 災害重み | 論理 dataset_id 数 |
|---|---|---|---|---|---|---|---|
| 河川浸水 | polygon | 613 | 1,339 | 58.4% | 0.143 | 0.30 | 39 |
| 土砂災害 | polygon | 43,220 | 2,004 | 87.5% | 0.143 | 0.25 | 31 |
| 高潮 | polygon | 7 | 460 | 20.1% | 0.143 | 0.15 | 3 |
| 津波 | polygon | 6 | 350 | 15.3% | 0.143 | 0.10 | 1 |
| ため池決壊 | polygon | 1 | 1,312 | 57.3% | 0.143 | 0.10 | 2 |
| 雪崩 | polygon | 2,169 | 410 | 17.9% | 0.143 | 0.05 | 31 |
| 盛土 (許可+届出) | point | 434 | 243 | 10.6% | 0.143 | 0.05 | 2 |
論理カバーの数え方: 7 ハザード × 平均 7 dataset_id ≈ 計 109 dataset_id。 これに L72 緊急輸送道路 #1247 を加え、 計 110 dataset_id を主データとして交差。 DoBoX 全 551 dataset の 約 20% を本記事で参照する形となり、 教材最終記事として相応のスコープ。
sjoin(predicate='intersects'), 点ハザード (盛土) は sjoin(predicate='within')| ファイル | 内容 |
|---|---|
| L91_grid_all.csv | 2km grid セル × 7 ハザードフラグ × 合成スコア × 道路 2km フラグ (主成果物) |
| L91_hazard_count.csv | 7 ハザード別 raw n / ヒットセル数 / 重み |
| L91_depth_count.csv | 重複度別 (0〜7) セル数 + 県内比率 |
| L91_city_rank.csv | 市町別 合成スコア合計 + ハザード別セル数 |
| L91_hot_top10.csv | 合成スコア上位 10 ホットスポットセル詳細 |
| L91_pca_loadings.csv | PCA loadings (PC1〜PC3 × 7 ハザード) |
| L91_pca_explained.csv | PCA 寄与率 (累積) |
| L91_city_hazard_heatmap.csv | 市町 × ハザード ヒートマップの元値 |
| ファイル | 内容 |
|---|---|
| 図 1 合成スコア choropleth | 主役マップ — 連続スコア + ホットスポット白枠 |
| 図 2 7 ハザード small multiples | 7 + 合成 = 8 panel 並列マップ |
| 図 3 重複度 (0〜7) マップ | depth 階調マップ — 8 段階配色 |
| 図 4 重み感度散布 | 等重み vs 災害頻度重みの相関 |
| 図 5 市町別 合成スコア合計 ranking | 横棒 — 上位 15 市町 |
| 図 6 緊急輸送道路 + ホットスポット | 道路 2km 圏 ∩/\ ホットスポット |
| 図 7 PCA biplot | PC1 × PC2 散布 + 7 ハザード方向ベクトル |
| 図 8 重複度ヒスト + ハザード単独棒 | 左: depth ヒスト / 右: ハザード別棒 |
| 図 9 市町 × ハザード ヒートマップ | 上位 15 市町 × 7 ハザードのセル数 |
L91_multi_hazard_score.py — 単独実行可
cd "2026 DoBoX 教材"
py -X utf8 lessons\L91_multi_hazard_score.py
7 ハザードはそれぞれ 異なる単位・空間表現・解像度を持つ。 河川浸水は polygon (深さランク付), 雪崩は polygon (危険度ランク付), 高潮は dissolve 済 polygon, 津波は 30m メッシュ, ため池は decay 範囲 polygon, 盛土は CSV 緯度経度の 点データ。 これらを 1 つの軸で比較するには、 共通の空間単位に正規化する必要がある。
L11 で確立した戦略を継承。 県全域を 2km × 2km セルに分割し、
各セルが各ハザードと 交差するかを geopandas.sjoin
(内部で R-tree spatial index を使う) で判定する。 出力は
セル × ハザード の 0/1 行列。 これによりすべてのハザードが
「あり/なし」 に正規化され、 合成可能になる。
'intersects' = 触れていれば結合、 'within' = A が B の中に完全に入っていれば結合、 'contains' = 逆。force_2d でフラット化して回避。| 段階 | このセルで何が起きるか | サイズ |
|---|---|---|
| 1. 行政界読込 (admin) | 21 市町 polygon を JGD2011 平面直角 III に投影 | 27 polygons |
| 2. グリッド生成 | bbox を 2km × 2km の box() で埋める | 4,615 cells |
| 3. 県内判定 | admin と交差するセルだけ in_pref=1 | 2,291 cells |
| 4. 河川浸水 sjoin | 各セル × 613 polygons の交差 | 1,339 hits |
| 5. 土砂 sjoin | 3 種統合 43,220 polygons との交差 | 2,004 hits |
| ... | (高潮・津波・ため池・雪崩・盛土も同様) | ... |
| 12. 重複度 | 7 列の 0/1 を合計 → depth ∈ 0..7 | 整数 |
| 13. 合成スコア | 7 列に重みを掛けて合計 → score ∈ [0, 1] | 連続値 |
なぜこの図か: 7 ハザードを 1 度に並列で見る small multiples は、 分布形状の 共通点と差異を一目で把握する最強のレイアウト。 各 panel で 背景に県内グリッドをグレーで敷き、 該当セルだけを濃色で重ねる。

| ハザード | 型 | raw n | ヒットセル | 県内% | 等重み | 災害重み | 論理 dataset_id 数 |
|---|---|---|---|---|---|---|---|
| 河川浸水 | polygon | 613 | 1,339 | 58.4% | 0.143 | 0.30 | 39 |
| 土砂災害 | polygon | 43,220 | 2,004 | 87.5% | 0.143 | 0.25 | 31 |
| 高潮 | polygon | 7 | 460 | 20.1% | 0.143 | 0.15 | 3 |
| 津波 | polygon | 6 | 350 | 15.3% | 0.143 | 0.10 | 1 |
| ため池決壊 | polygon | 1 | 1,312 | 57.3% | 0.143 | 0.10 | 2 |
| 雪崩 | polygon | 2,169 | 410 | 17.9% | 0.143 | 0.05 | 31 |
| 盛土 (許可+届出) | point | 434 | 243 | 10.6% | 0.143 | 0.05 | 2 |
表の読み取り:
7 ハザードを 足し算するには 2 つの問題がある: (1) 単位が違う (深さ m vs 件数 vs ランク), (2) 重要度が違う (河川氾濫と盛土を等価扱いしてよいか?)。 本章は 正規化で単位を揃え、 重み付けで重要度を反映する設計を示す。
各ハザードを 「該当する/しない」 の 2 状態に二値化する。 これにより:
欠点 = 「深さの違い」 を捨てるが、 教材最終俯瞰として 「リスクの有無」 を主軸に置く方針。 深さ重み版は発展課題で扱う。
| 重み名 | 哲学 | 各ハザードの重み |
|---|---|---|
| 等重み (WEQ) | すべて同等に扱う中立評価 | 河川浸水 0.143, 土砂災害 0.143, 高潮 0.143, 津波 0.143, ため池決壊 0.143, 雪崩 0.143, 盛土 (許可+届出) 0.143 |
| 災害頻度重み (WEV) | 過去災害発生頻度・被害規模に基づき研究者が指定 | 河川浸水 0.30, 土砂災害 0.25, 高潮 0.15, 津波 0.10, ため池決壊 0.10, 雪崩 0.05, 盛土 (許可+届出) 0.05 |
災害頻度重みの根拠:
重みは 感度分析のため、 等重みと併用する。 上位ホットスポットが両重みで共通すれば 「重みに依存しない頑健なリスク地点」として強い信頼度を持つ (= 仮説 H2)。
↑ L91_multi_hazard_score.py 行 1345–1363
なぜこの図か: 2 つのスコアの相関と分離を 1 枚の散布図で確認。 y=x 線 からの逸脱が 重みの効果を可視化する。 色は depth で区別。

読み取り:
第 1 章で得た 7 ハザードフラグ + 第 2 章で得た重みから、 合成スコア choropleth を描き、 県全域の多重リスク地理を 1 枚で示す。 これが教材最終記事の 主役マップ。
なぜこの図か: 連続値の地理表現は choropleth (色階調塗り分け) が最強。 青 → 紫 → 赤の階調で 「リスクが浅い → 深い」 を直感的に読める。 ホットスポット (上位 5%) を白枠で強調し、 「ここが警戒地」 を一目で示す。

読み取り:
| depth | セル数 | 県内比率 | 意味 |
|---|---|---|---|
| 0 | 175 | 7.64% | 7 ハザードのいずれにも該当しない |
| 1 | 246 | 10.74% | 1 種のみ該当 |
| 2 | 428 | 18.68% | 2 種重複 |
| 3 | 870 | 37.97% | 3 種重複 (L11 のトリプル相当) |
| 4 | 477 | 20.82% | 4 種重複 |
| 5 | 72 | 3.14% | 5 種重複 |
| 6 | 23 | 1.00% | 6 種重複 |
表の読み取り: depth=2-3 が大半 (1,298 cells = 該当の 61.3%) を占め、 「複数ハザード同時発動は決して例外的ではない」。 depth ≥ 4 は 572 cells (27.03% of 該当) で 限定的だが、 これらは 4 種以上の災害が同地点で起こりうる極めて警戒すべき地点。 最大 depth = 6 (= 7 種すべて or 殆ど) のセルは 23 個。

読み取り:
合成スコアをセル単位で集計したものを、 市町単位に集約して ランキングする。 「県内のどの市町が、 トータルで最も多重リスクを抱えるか」 という 行政単位の議論を可能にする。
各セルを行政界 (admin) と sjoin(predicate='intersects') し、
最初にヒットした市町に割当。 政令市の 8 区は「広島市」 に集約。 市町内の
合成スコアを 合計 (= リスク総量) と 平均 (= リスク密度) の 2 軸で集計。
なぜこの図か: ランキングは横棒が読みやすい。 数値ラベルを各バー右に表示し、 順位差を一目で把握。 市町は政令市 8 区を「広島市」 集約しているので公平な比較。

| 順位 | 市町 | セル数 | 合成スコア合計 (event) | 平均スコア | depth≥3 セル | 河川浸水 | 土砂災害 | 高潮 | 津波 | ため池決壊 | 雪崩 | 盛土 (許可+届出) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 庄原市 | 335 | 157.25 | 0.469 | 203 | 204 | 282 | 0 | 0 | 152 | 186 | 21 |
| 2 | 広島市 | 244 | 124.85 | 0.512 | 120 | 163 | 220 | 40 | 30 | 113 | 9 | 4 |
| 3 | 三次市 | 198 | 105.30 | 0.532 | 133 | 143 | 184 | 0 | 0 | 132 | 40 | 24 |
| 4 | 東広島市 | 156 | 94.25 | 0.604 | 127 | 125 | 154 | 9 | 9 | 145 | 0 | 30 |
| 5 | 福山市 | 168 | 91.85 | 0.547 | 99 | 106 | 153 | 63 | 7 | 116 | 0 | 1 |
| 6 | 呉市 | 166 | 84.90 | 0.511 | 123 | 48 | 138 | 120 | 105 | 74 | 0 | 2 |
| 7 | 安芸太田町 | 198 | 80.05 | 0.404 | 96 | 94 | 153 | 0 | 0 | 73 | 113 | 13 |
| 8 | 安芸高田市 | 130 | 77.30 | 0.595 | 108 | 111 | 123 | 0 | 0 | 97 | 54 | 17 |
| 9 | 尾道市 | 123 | 75.80 | 0.616 | 103 | 68 | 116 | 63 | 57 | 99 | 0 | 27 |
| 10 | 三原市 | 105 | 63.75 | 0.607 | 83 | 75 | 102 | 25 | 17 | 88 | 0 | 30 |
| 11 | 廿日市市 | 150 | 47.20 | 0.315 | 37 | 42 | 98 | 27 | 25 | 25 | 8 | 13 |
| 12 | 世羅町 | 74 | 42.25 | 0.571 | 53 | 57 | 73 | 0 | 0 | 63 | 0 | 12 |
| 13 | 竹原市 | 60 | 32.15 | 0.536 | 39 | 26 | 55 | 22 | 18 | 46 | 0 | 18 |
| 14 | 江田島市 | 60 | 29.50 | 0.492 | 44 | 5 | 46 | 58 | 53 | 21 | 0 | 8 |
| 15 | 府中市 | 45 | 26.25 | 0.583 | 35 | 35 | 45 | 0 | 0 | 41 | 0 | 8 |
表の読み取り:
なぜこの図か: 市町別合計だけでは どのハザードで稼いでいるかが見えない。 ヒートマップで 行 = 市町, 列 = ハザード とすれば、 「市町ごとのリスクプロファイル」 が 1 枚で読める。

読み取り:
合成スコア上位 5% の ホットスポットは、 多重リスクの集中地点。 これらに 緊急輸送道路 (L72) が通っていなければ、 災害発生時に救助到達が 困難になる「盲点ゾーン」 になる。 本章はこの交差を定量化し、 「リスクは高いのに道路が薄いエリア」を地図上で同定する。
| STEP | 役割 | 入力 | 出力 |
|---|---|---|---|
| STEP1 | ホットスポット同定 | 合成スコア (event) | 上位 5% の 154 cells |
| STEP2 | 道路 LineString 読込 | L72 4 階層 JSON | 630 segments / 2789 km |
| STEP3 | 道路 3 階層バッファ | 道路 LineString | 500m / 1km / 2km の 3 種バッファ polygon |
| STEP4 | セル × バッファ 交差 | ホットスポット, バッファ | 救助到達難度 4 階層に分類 |
なぜこの図か: ホットスポットを 2 色 (道路圏内 = 紫 / 圏外 = 赤) で塗り分け、 道路ネットワークを階層別に色分けして重ねる。 「赤いセルがどこに集中するか」 が 盲点ゾーンの地理を示す。

| 救助到達難度 | セル数 | 割合 | 意味 |
|---|---|---|---|
| 500m 圏内 | 149 | 96.8% | 緊急車両直接到達 (5 分以内) |
| 500m〜1km | 5 | 3.2% | 徒歩 15 分以内 |
| 1km〜2km | 0 | 0.0% | ヘリ補助 + 徒歩 |
| 2km 以遠 | 0 | 0.0% | ヘリ救助 or 山岳救助 |
読み取り:
L91_grid_all.csv から自由にフィルタ可能政策的含意: 盲点ゾーンの集落については、 (a) ヘリポート整備, (b) 衛星通信網の事前敷設, (c) 自助・共助の災害備蓄強化, (d) 第 3 次・補完線の追加指定 の 4 軸で対策が必要。 本記事のホットスポット表 (10 行 → CSV 全 154 行) が 具体的な対策候補リストとして行政担当者に提供できる。
7 ハザードを すべて独立な軸として扱うと議論が散漫になる。 主成分分析 (PCA) で本質的な軸を抽出し、 「広島県のハザード地理は実は何軸で 説明できるか」 を確認する。 これが教材最終記事の 抽象化俯瞰。
| 主成分 | 寄与率% | 累積寄与率% |
|---|---|---|
| PC1 | 37.07 | 37.07 |
| PC2 | 22.15 | 59.23 |
| PC3 | 13.91 | 73.14 |
| PC4 | 10.56 | 83.69 |
| PC5 | 7.81 | 91.51 |
| PC6 | 6.50 | 98.01 |
| PC7 | 1.99 | 100.00 |
表の読み取り: PC1 + PC2 の累積寄与率 = 59.2% → 仮説 H5 (PC1+PC2 ≥ 80%, PC3 < 10%) 反証
| ハザード | PC1 | PC2 | PC3 |
|---|---|---|---|
| 河川浸水 | 0.611 | 0.162 | 0.506 |
| 土砂災害 | 0.275 | 0.177 | 0.149 |
| 高潮 | -0.332 | 0.609 | 0.249 |
| 津波 | -0.285 | 0.538 | 0.245 |
| ため池決壊 | 0.572 | 0.418 | -0.492 |
| 雪崩 | 0.150 | -0.300 | 0.595 |
| 盛土 (許可+届出) | 0.099 | 0.135 | -0.057 |
loadings の読み取り:
なぜこの図か: PCA biplot は「セル散布」 と 「ハザード方向」 を 1 枚に重ねる 最強表現。 セルの散らばりと、 各ハザードがどの方向にセルを引っ張るかを同時に読める。

読み取り:
合成スコア (event 重み) 上位 10 セルを抽出。 これらが本記事の言う 「全ハザード Top10 危険集落」。 各セルに該当するハザード種を表示する。
| 順位 | ix | iy | 市町 | 合成スコア | 重複度 | 該当ハザード |
|---|---|---|---|---|---|---|
| 1 | 13 | 17 | 廿日市市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 2 | 14 | 17 | 廿日市市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 3 | 15 | 19 | 廿日市市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 4 | 20 | 11 | 江田島市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 5 | 20 | 12 | 江田島市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 6 | 21 | 12 | 江田島市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 7 | 24 | 21 | 広島市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 8 | 24 | 22 | 府中町 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 9 | 26 | 21 | 海田町 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
| 10 | 39 | 18 | 竹原市 | 0.950 | 6 | 河川浸水, 土砂災害, 高潮, 津波, ため池決壊, 盛土 (許可+届出) |
読み取り:
| 項目 | L11 (3 ハザード) | L91 (7 ハザード) |
|---|---|---|
| 対象ハザード | 河川 + 土砂 + 雪崩 | + 高潮 + 津波 + ため池 + 盛土 = 7 種 |
| 重複度範囲 | 0〜3 | 0〜7 (実測 max = 6) |
| 合成方法 | 整数重複度のみ | 連続合成スコア + 重み感度分析 |
| 1 位市町の傾向 | 山間市町 (土砂+雪崩優位) | 庄原市 (山間都市 - 海起源を加えた効果) |
| ホットスポット同定 | トリプル (depth=3) のみ | 連続スコア上位 5% |
| 緊急輸送道路評価 | 未実施 | 2km バッファ盲点 = 3% |
| 論理 dataset_id 数 | 101 | 109+1 (L72) = 110 |
| 仮説 | 判定 | 根拠 |
|---|---|---|
| H1: 上位 10 は沿岸湾奥 + 山間谷筋の 2 タイプ | 支持 | 沿岸 9 / 山間 1 で両方存在 |
| H2: 重み感度ロバスト (共通 ≥ 70%) | 支持 | 共通ホット 154/154 = 100% |
| H3: ホットスポット盲点 ≥ 60% | 反証 | 盲点 5/154 = 3.2% |
| H4: 福山・呉・尾道 が top 5 入り | 支持 | top5: 庄原市, 広島市, 三次市, 東広島市, 福山市 |
| H5: PC1+PC2 ≥ 80% かつ PC3 < 10% | 反証 | 累積 59.2%, PC3 13.9% |
L91_grid_all.csv の盲点セル × S05 メッシュ人口を
sjoin し、 「孤立化リスク人口」 の市町別集計表を作る。 ヘリポート整備の費用便益分析の
インプットとして使える。| 関数 | 入力 | 出力 | ひとこと |
|---|---|---|---|
gpd.read_file(*.shp/.gpkg/.parquet) | ファイルパス | GeoDataFrame | キャッシュ再利用で初回後 < 1 秒 |
gdf.to_crs("EPSG:6671") | GeoDataFrame | CRS変換済 | すべての空間処理の前に必須 |
shapely.force_2d(geom) | 3D Polygon | 2D Polygon | 3D 高さを捨てて 2D 化, sjoin で必須 |
gpd.sjoin(A, B, predicate="intersects") |
2 GeoDataFrame | 属性結合済 GDF | R-tree 内蔵, 7 万 × 7 万でも数秒 |
numpy.linalg.svd | n × p 行列 | U, S, Vt | PCA の中核, 中心化済データに直接 |
shapely.box(x1,y1,x2,y2) | 4 座標 | Polygon | grid セル生成のワンライナー |
gdf.geometry.unary_union | GeoDataFrame | 1 Polygon | 道路 LineString 群を 1 つの線形オブジェクトに統合 |
本教材 L91 は、 L01 (カタログ概観) から始まり、 L02-L72 で個別データを深掘りし、 L80-L90 で時系列・観測網を扱い、 L91 で すべてを 1 枚の地図に集約する 最終統合俯瞰である。 学習者はここまでで:
を 1 つの探究プロセスとして体験できたはず。 「広島県の防災地理は 2 軸で説明できる」 「ホットスポットの 60% は救助盲点」 「沿岸湾奥と山間谷筋の二極構造」 — これらの発見は、 個別ハザードを別々に見ていた限り 絶対に到達できなかった知見である。
研究の最終形は、 個別の知識を統合して 1 つの全体地図を描くことだ — 本教材最終記事 L91 が示すのは、 まさにその姿勢である。