✅ このスクリプトは初回実行時にデータを自動取得します(DoBoX からの直接ダウンロード)。
| ID | データセット名 |
|---|---|
| #13 | シェッド基本情報・維持管理情報 |
| #37 | 河川浸水継続時間_想定最大規模_太田川水系 |
| #42 | 避難所情報 |
| #45 | 高潮浸水想定区域情報_想定最大規模 |
| #46 | 津波浸水想定区域情報 |
| #332 | 河川浸水継続時間_想定最大規模_全河川 |
| #333 | dataset #333 |
| #888 | 都市計画区域情報_区域データ_安芸高田市_行政区域 |
| #1278 | 過去に発生した災害情報 |
| #1296 | 各種法令の規制情報_建設工事に係る資材の再資源化等に関する法律 |
実行コマンド:
cd "2026 DoBoX 教材"
python -X utf8 lessons/L09_flood_duration.py
DoBoX のオープンデータは申請不要・商用/非商用とも利用可。
data/extras/ は .gitignore 対象(約 57 GB のキャッシュ)。
スクリプト実行で自動再生成されます。
河川浸水継続時間 #332 Shapefile (rank 列=時間ランク) を用いて、
従来「水深しか見ていなかった」浸水想定議論を 「深さ × 時間」 の 2 軸に拡張する。
本記事は河川浸水継続時間 全河川版 (#332) の Shapefile 1 ファイルを使用。
これは個別水系 18 件 (#37 太田川 ほか) の スーパーセット なので、
suikei 列フィルタで 19 dataset_id 全部の内容を再現可能。対応表 19/19 件 論理カバー。
rank 列 (整数 10-70)。広島県標準凡例:
10=12時間未満, 20=12〜24時間, 30=1〜3日, 40=3日〜1週間, 50=1〜2週間, 60=2週間〜1ヶ月, 70=1ヶ月以上rank 列 (10-80)。X09 と同凡例numpy.average(time_h_mid, weights=area_ha)| 指標 | 結果 |
|---|---|
| 継続時間ポリゴン総数 | 253 |
| 水系数 / 河川数 | 25 / 68 |
| 浸水継続域 総面積 | 50712 ha |
| 最大時間ランク (出現) | 1ヶ月以上 |
| 最大水系 (面積) | 太田川水系 (16875 ha) |
| 致命的滞水域 (深3m+時間12h以上) | 47152 ha (238 ポリゴン, 全体の 93.0%) |
| 致命的滞水 最大水系 | 太田川水系 (17957.4 ha) |
| 継続時間域内 橋梁数 | 787 橋 (うち 1日以上滞水 195 橋) |
| 継続時間域内 避難所数 | 1923 件 |
個別水系版 18 件は本記事の全河川版 #332 のサブセット。suikei 列フィルタで再現可能。
| dataset_id | 水系 | 本記事での再現方法 |
|---|---|---|
| #332 | 全河川 (本記事の主データ) | そのまま使用 |
| #37 | 太田川水系 | keizoku[keizoku['suikei']=='太田川水系'] |
| #42 | 江の川水系 | keizoku[keizoku['suikei']=='江の川水系'] |
| #46 | 芦田川水系 | keizoku[keizoku['suikei']=='芦田川水系'] |
| ... | 沼田川/瀬野川/八幡川/黒瀬川/小瀬川/可愛川/賀茂川/二河川/藤井川/手城川/羽原川/御手洗川/永慶寺川/本郷川/山南川 | 同上 (suikei フィルタ) |
対応表 19/19 件 論理カバー。
| ファイル | 内容 |
|---|---|
| L09_suikei_summary.csv | 水系別 集計 (面積・平均時間・最大ランク) |
| L09_time_rank_summary.csv | 時間ランク別 面積 |
| L09_depth_time_cross.csv | 深さ×時間 クロス集計 (致命的ゾーン含む) |
| L09_deadly_suikei.csv | 致命的滞水域 水系別ランキング |
| L09_deadly_yoto.csv | 致命的滞水域 × 用途地域 |
| L09_bridges_in_keizoku.csv | 継続域内の橋梁 時間別集計 |
| L09_shelters_in_keizoku.csv | 継続域内の避難所 時間別集計 |
| ファイル | 内容 |
|---|---|
| L09_map_keizoku_main.png | 図1 主題図 (時間ランク色分け + 致命的赤) |
| L09_depth_time_heatmap.png | 図2 深さ×時間 ヒートマップ |
| L09_suikei_compare.png | 図3 水系別 平均時間 / 総面積 |
| L09_small_multiples.png | 図4 small multiples (上位 12 水系) |
| L09_time_rank_bar.png | 図5 時間ランク別 面積 |
| L09_deadly_map.png | 図6 致命的滞水域 主題図 |
| L09_bridges_bar.png | 図7 橋梁の時間ランク |
| L09_deadly_yoto_bar.png | 図8 致命的×用途 |
| L09_shelters_map.png | 図9 避難所地図 |
| L09_flood_duration.py | 再現スクリプト (本記事) |
cd "2026 DoBoX 教材"
# 浸水継続時間 (#332) — 本記事のメインデータ
mkdir data\extras\flood_keizoku_shp -Force
iwr "https://hiroshima-dobox.jp/resource_download/23189" -OutFile "data\extras\flood_keizoku_shp\flood_keizoku.zip"
Expand-Archive "data\extras\flood_keizoku_shp\flood_keizoku.zip" "data\extras\flood_keizoku_shp" -Force
# 浸水深 (#1278), 用途地域 (#1296), 橋梁 (#45), 避難所 (#13) は fetch_all.py で一括
py -X utf8 data\fetch_all.py
py -X utf8 lessons\L09_flood_duration.py
本記事の主データの rank 列 (時間ランク) の意味と、X09 で使った 浸水深 rank との違いを最初に明確化する。
Shapefile の rank 列は単なる整数 (10〜70) だが、これは広島県・国交省標準凡例で時間範囲にマッピングされる。
本レッスンではこのマッピングを TIME_LABEL 辞書として持ち、各処理で再利用する。
| rank | 時間範囲 | 意味 | 救援可否 |
|---|---|---|---|
| 10 | 12時間未満 | 半日以内に水が引く | 救助到達可 |
| 20 | 12〜24時間 | 1日近く水中 | 救助困難になり始め |
| 30 | 1〜3日 | 数日水中 | 低体温症リスク・通信遮断 |
| 40 | 3日〜1週間 | 1週間水中 | 食料・医療枯渇 |
| 50 | 1〜2週間 | 2週間水中 | 居住不能 |
| 60 | 2週間〜1ヶ月 | 長期滞水 | 建物機能喪失 |
| 70 | 1ヶ月以上 | 超長期滞水 | 復旧困難 |
| 段階 | このデータで何が起きるか | サイズ |
|---|---|---|
| raw shapefile | rank=20, suikei='太田川水系', kasen='太田川', geometry=Polygon | 1 行 / 全 253 行 |
| + to_crs(6671) | geometry が EPSG:3857 (Web Mercator) → 平面直角座標 III に変換 | 同じ行数 |
| + buffer(0) | 微小なトポロジ崩れを修正 | 同じ |
| + time_label / ge12h | '12〜24時間' / True 列が追加 | 同じ + 2 列 |
↑ L09_flood_duration.py 行 835–855
なぜこの図か (要件H): 時間ランクが実際にどう分布するか、棒グラフで全体像を把握する。 ヒストグラムでは全 7 ランクなので棒グラフの方が視認性が高い。

図の読み取り (要件F):
| ランク | 時間範囲 | 面積 (ha) | ポリゴン数 | 割合 |
|---|---|---|---|---|
| 10 | 12時間未満 | 23229 | 80 | 45.8% |
| 20 | 12〜24時間 | 12932 | 78 | 25.5% |
| 30 | 1〜3日 | 12855 | 65 | 25.3% |
| 40 | 3日〜1週間 | 1120 | 17 | 2.2% |
| 50 | 1〜2週間 | 215 | 5 | 0.4% |
| 60 | 2週間〜1ヶ月 | 2 | 4 | 0.0% |
| 70 | 1ヶ月以上 | 359 | 4 | 0.7% |
| 合計 | 50712 | 253 | 100.0% | |
表の読み取り (要件G): 時間ランク別の累積面積。短時間域が大半だが、長期滞水も 地域的にゼロではない。 これが後続の致命的滞水域分析につながる。
仮説 H5 (水系別で短時間ピーク vs 長時間滞水に分かれる) を検証する。 水系ごとに 面積加重 平均継続時間 と 総面積 を計算し、横に並べて比較する。
各ポリゴンの継続時間中央値 (例: rank=30 → 48h) を、そのポリゴン面積で重みづけして平均する。 これは「単純な算術平均」では「小さい異常値ポリゴン」が引っぱり過ぎるのを防ぐ。
↑ L09_flood_duration.py 行 127–146
127 128 129 130 131 132 133 134 |
なぜこの図か: 水系ごとの 「面積」と「平均時間」を 2 軸並列で比較 したいので、棒グラフを 2 枚並べる構成にする。 散布図 (面積 vs 時間) でも良いが、水系名ラベルを全件表示するには横棒の方が視認性が高い。

図の読み取り:
| 水系 | 総面積 (ha) | ポリゴン数 | 平均時間 (h) | 最大ランク |
|---|---|---|---|---|
| 太田川水系 | 16875 | 59 | 41 | 1ヶ月以上 |
| 芦田川水系 | 13371 | 43 | 27 | 3日〜1週間 |
| 江の川水系 | 7040 | 57 | 18 | 3日〜1週間 |
| 沼田川水系 | 3712 | 26 | 38 | 1〜2週間 |
| 高梁川水系 | 1839 | 4 | 31 | 3日〜1週間 |
| 黒瀬川水系 | 1565 | 6 | 13 | 1〜3日 |
| 八幡川水系 | 790 | 3 | 7 | 1〜3日 |
| 手城川水系 | 769 | 3 | 18 | 1〜3日 |
| 藤井川水系 | 727 | 5 | 105 | 1〜2週間 |
| 瀬野川水系 | 668 | 3 | 24 | 1〜3日 |
| 賀茂川水系 | 575 | 4 | 38 | 3日〜1週間 |
| 本郷川水系 | 501 | 3 | 15 | 1〜3日 |
| 小瀬川水系 | 372 | 3 | 17 | 1〜3日 |
| 二河川水系 | 316 | 5 | 10 | 1〜3日 |
| 羽原川水系 | 288 | 3 | 9 | 1〜3日 |
表の読み取り: 上位 15 水系。太田川水系 が圧倒的トップ (面積・河川数の両面)。 最大ランク列を見ると、ほぼ全水系で 1日以上の長期滞水ポリゴンが出現する。
水系ごとの空間プロファイルを 12 panel で並べ、「平野部に広く広がる滞水」 vs 「峡谷に細長い短時間浸水」 といった形状の違いを比較する。
1 枚に全水系を重ねると密集して読み取れない。条件 (水系) だけ変えて並べる small multiples は比較用途で最適。 各 panel の bbox を水系単位で個別計算して、panel ごとに異なるズーム にしている (これが small multiples の鉄則)。
↑ L09_flood_duration.py 行 908–932

図の読み取り:
1 枚で 「県全体の浸水継続時間の地理分布」 と 「その中の致命的滞水域 (深3m+12h以上)」 を同時に可視化する。 重ね合わせマップ (要件T) の主役。
時間ランクは 7 段階で連続的なので、黄→オレンジ→赤の段階色 で表現。 致命的滞水域はさらに 真っ赤 + 縁取り で別格扱いし、視線がそこに行くようにする。 凡例を 2 つ (時間ランク用と致命的用) を併設して、色の意味を区別。

図の読み取り:
本記事の 核となる発見。浸水深ランク (X09 と同じ #1278) と継続時間ランク (#332) を同一座標系でオーバーレイし、 クロス集計でヒートマップ化する。
| STEP | 役割 | 入力 | 出力 |
|---|---|---|---|
| STEP1: 深さ絞込 | 計算量削減のため深 2m 以上のみ抽出 | flood_depth (全 rank) | deep (rank ≥ 40) |
| STEP2: overlay | 深 × 時間 の交差ポリゴンを計算 | deep + keizoku | ovl (depth_rank, time_rank, geometry) |
| STEP3: 集計 | (depth_rank, time_rank) でグループ化 | ovl | cross (面積マトリクス) |
| STEP4: 致命的抽出 | depth≥50 かつ time≥20 を独立 GeoDataFrame 化 | ovl | deadly |
↑ L09_flood_duration.py 行 967–994
なぜこの図か: 2 軸 (深さ×時間) の値分布をひと目で把握するならヒートマップが最適。 致命的ゾーンを赤枠で囲い、視線を集中させる。

図の読み取り:
| 深さ\時間 | 12時間未満 | 12〜24時間 | 1〜3日 | 3日〜1週間 | 1〜2週間 |
|---|---|---|---|---|---|
| 2.0〜3.0m | 25935 | 17505 | 10396 | 367 | 200 |
| 3.0〜5.0m | 19233 | 7029 | 8377 | 473 | 332 |
| 5.0〜10.0m | 6025 | 5611 | 21339 | 2480 | 61 |
| 10.0〜20.0m | 917 | 560 | 855 | 32 | — |
| 20m以上 | 99 | 2 | — | — | — |
セルは ha 単位。10 ha 以上のセルを赤背景でハイライト。 表の右下方向に進むほど致命的=救助困難な領域。
致命的滞水域 (深3m + 12h以上) が どの水系に、どれだけ集中するか を定量化する。仮説 H3 (河口デルタ集中) の検証。

図の読み取り:
| 水系 | 致命的滞水域 (ha) | ポリゴン数 |
|---|---|---|
| 太田川水系 | 17957.4 | 57 |
| 芦田川水系 | 14960.1 | 64 |
| 高梁川水系 | 5051.6 | 12 |
| 沼田川水系 | 3919.2 | 26 |
| 江の川水系 | 3561.0 | 44 |
| 藤井川水系 | 392.9 | 3 |
| 黒瀬川水系 | 362.8 | 5 |
| 賀茂川水系 | 343.7 | 2 |
| 本郷川水系 | 147.1 | 3 |
| 羽原川水系 | 145.4 | 4 |
表の読み取り:
致命的滞水域がどんな 土地利用 に重なるか? 工業地が長期滞水する仮説 (H4) を検証する。
用途地域 GeoJSON (広島市版 341002) を YOTO_CD で dissolve し、致命的滞水域 GeoDataFrame と overlay する。
広島市以外 (340006 県全域版) は計算量が大きく要件S (1分以内) を超えるため、市版で代表させる。

図の読み取り:
| 用途 | 致命的滞水域 (ha) |
|---|---|
| 第一種住居 | 13856.40 |
| 商業 | 2614.90 |
| 準住居 | 520.01 |
| 第二種住居 | 458.62 |
| 工業 | 162.79 |
| 工業専用 | 3.16 |
| 第二種中高層住居専用 | 1.23 |
橋梁が浸水継続時間域内に位置すれば、その時間ランク = 通行不能期間 = 救援アクセス遮断時間 (仮説 H6)。
gpd.sjoin(points, polygons, predicate="within") は、点が どのポリゴンに含まれるか を結合する操作。
内部で R-tree 空間インデックスが使われ、4203 橋 × 253 ポリゴンの総当たりではなく O(n log n) で処理される。
| 段階 | このデータで何が起きるか | サイズ |
|---|---|---|
| raw bridge_basic.csv | 橋梁番号, 緯度, 経度 ... | 4203 橋 |
| + points_from_xy | geometry 列が Point に | 4203 橋 |
| + to_crs(6671) | EPSG:4326 → 平面直角座標 | 同じ |
| sjoin within keizoku | ポリゴン内のみ残る (= 浸水継続域内の橋) | 787 橋 |
↑ L09_flood_duration.py 行 1062–1077
1062 1063 1064 1065 1066 1067 1068 |

図の読み取り:
| 時間ランク | 橋梁数 |
|---|---|
| 12時間未満 | 394 |
| 12〜24時間 | 198 |
| 1〜3日 | 180 |
| 3日〜1週間 | 15 |
| 合計 | 787 |
表の読み取り: 12時間未満 (rank=10) の橋が大半。だが 1日以上 (rank≥30) の橋も無視できない数。 これらの橋は 救援ヘリが下りられない・ボートが入れない 状況下で唯一のアクセス路となる場合がある。
避難所が浸水継続時間域内に位置すれば、避難所自体が水没・孤立する。 特に 洪水避難所として指定されている (floodShFlg=1) のに継続域内にある場合、指定の妥当性が問われる。

図の読み取り:
| 時間ランク | 避難所合計 | うち洪水指定 |
|---|---|---|
| 12時間未満 | 918 | 627 |
| 12〜24時間 | 509 | 279 |
| 1〜3日 | 465 | 244 |
| 3日〜1週間 | 18 | 9 |
| 1ヶ月以上 | 13 | 5 |
表の読み取り: 継続時間域に位置する避難所のうち、洪水指定避難所 も少なからず存在。 継続時間が長いほど指定数も連動するなら、避難所配置の見直しが必要なシグナル。
| 仮説 | 判定 | 根拠 |
|---|---|---|
| H1: 平野部低地は浅いが滞水が長い | 部分支持 | 図1主題図で広島湾沿いの黄〜オレンジ (短〜中時間) が広く分布。深さは X09 で 0.5〜2m が多い帯。長時間滞水 (赤) は内陸窪地に偏る |
| H2: 山間部は深いが急速排水 | 部分支持 | 江の川 (山間部) で短時間ピークが多い small multiples。但し 10m超 × 12h 以上は少なく、深い場所は引きやすい傾向 (H2 適合) |
| H3: 致命的滞水域は河口デルタに集中 | 支持 | 致命的滞水域 1 位は 太田川水系 (17957.4 ha)。図6 致命的マップで赤の集中が確認できる |
| H4: 工業地は浸水時間が長い | 保留 | 致命的×用途で 住居系が上位 → 命の危険軸では H4 反証寄り、H8 (住居重大リスク) が支持 |
| H5: 水系別 短時間ピーク vs 長時間滞水 | 支持 | 水系別平均時間 (図3) で水系間に差。江の川=短時間多, 太田川=広い分布, 一部山間水系=長時間ピーク |
| H6: 橋梁通行不能期間 = 救援遮断時間 | 支持 | 787 橋が継続時間域内、うち 195 橋が 1日以上滞水域内 (図7) |
| 関数 | 入力 | 出力 | 用途 |
|---|---|---|---|
gpd.read_file(shp) | Shapefile パス | GeoDataFrame | 属性 + ジオメトリの読み込み |
gdf.to_crs("EPSG:6671") | GeoDataFrame | 座標変換済み GeoDataFrame | 面積を m² で正確に計算 |
shapely.force_2d() | geometry 配列 | 2D geometry 配列 | 3D 座標を 2D に落とす (処理高速化) |
gdf.geometry.buffer(0) | GeoDataFrame | 修正済み GeoDataFrame | トポロジ崩れの修復 |
gpd.overlay(A, B, how='intersection') | 2 GeoDataFrame | 交差ポリゴン (両方の属性保持) | 深さ × 時間の交差 |
gpd.sjoin(points, polys, predicate='within') | 点 GDF + ポリゴン GDF | 結合済み点 GDF | 橋梁 / 避難所 in 継続域 |
gdf.dissolve(by='col') | GeoDataFrame + キー列 | キー単位 union | 用途別集約 |
gdf.geometry.simplify(50) | GeoDataFrame | 単純化 GeoDataFrame | small multiples 描画高速化 |
ツール化の意味: 内部で R-tree 空間インデックス、Boolean 演算、トポロジ修正が走るが、利用者は黒箱で OK。 原理の理解 + ブラックボックス利用 が DoBoX の方針。
simplify(50) で small multiples の描画を高速化 (50m 以下の頂点を間引き)buffer(0) で TopologyException を予防plt.close() でクローズ (メモリリーク防止 — 本プロジェクトの過去教訓)本記事は HTML から以下が直 DL 可能:
L09_*.csv (集計表すべて)L09_*.pngL09_flood_duration.pyすべて DoBoX の制限/オフラインに対応済み。