Lesson 09

X09 河川浸水想定 × 用途地域 — 浸水深ランク × 用途 主題図研究

X系GISオーバーレイ主題図small multiples
所要 60分 / 想定レベル: リテラシ基礎+α / データ: 浸水Shapefile (rank列) + 用途地域GeoJSON

データ取得手順

⚠️ このスクリプトは自動取得に対応していません。以下のデータセットを DoBoX から手動でダウンロードし、data/extras/ 以下に保存してください。

IDデータセット名
#333dataset #333
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#999dataset #999

実行コマンド:

cd "2026 DoBoX 教材"
python -X utf8 lessons/X09_flood_landuse_zone.py

DoBoX のオープンデータは申請不要・商用/非商用とも利用可。 data/extras/.gitignore 対象(約 57 GB のキャッシュ)。 スクリプト実行で自動再生成されます。

学習目標と問い

本記事のスタイル: GIS 主題図 (Choropleth) + 浸水深 × 用途 多次元クロス分析
geopandas.overlay()用途地域 × 浸水想定ポリゴン の交差を計算し、 浸水Shapefile に隠れていた rank 列 (浸水深 8 段階) を活用して、 従来は 1 軸でしか見られなかったリスクを 用途 × 浸水深 × 水系 の3次元で可視化する。

主な問い (3 段階)

  1. 面の問い: どんな用途が浸水域に含まれるか? (絶対面積)
  2. 密度の問い: 各用途の "何 %" が浸水するか?
  3. 深さの問い: その用途は どれだけ深く 沈むか?(rank=10 の浅瀬と rank=80 の 20m 超では命の危険度が違う)

立てた仮説 (H1〜H8)

  1. H1: 浸水域内の最多用途は 住居系 (河川沿い平野部に多い)
  2. H2: 計画 vs 想定最大規模で用途別比率は変わる
  3. H3: 商業地は駅前低地に偏り、特定水系に集中
  4. H4: 絶対面積と 浸水率(密度) でランキングは入れ替わる
  5. H5: 太田川水系で住居系が集中
  6. H6: 計画→想定最大の 増加倍率 は用途で異なる
  7. H7: 工業/工業専用は河川沿いで浸水率が高い
  8. H8: 3m 以上 (致命的) の浸水域内の最多用途は 住居系(命の危険)

用語の定義

結果サマリー (詳しい本文の前に概観)

指標結果
浸水重なり最大の用途 (絶対面積)第一種住居 (3058 ha)
浸水率最大の用途 (密度)準工業 (93.8%)
計画→想定最大 増加倍率最大第一種低層住居専用 (×9.31)
致命的浸水 (3m以上) 最多用途第一種住居 (3953 ha)
想定最大規模 全用途合計20705 ha

使用データ

★ 河川浸水想定区域 dataset 39件のカバーについて
DoBoXには河川浸水想定区域情報が 39 dataset_id 公開されています:
  • 計画規模 19件: 全河川版 (#295) + 個別18水系 (#35 太田川 / #157 江の川 / #279 芦田川 / #280 沼田川 ほか) + 単独河川
  • 想定最大規模 20件: 全河川版 (#313) + 個別18水系 + 中小河川ブロック
本記事は 全河川版 Shapefile (#295 + #313) を使用。これは各個別水系 dataset_id の スーパーセット として配布されており、suikei列でフィルタすれば個別水系の中身を完全再現できます (例: flood_max[flood_max['suikei']=='太田川水系'] で #36 と等価)。 したがって本記事は 河川浸水想定区域 39 件全部を論理カバー しています。 個別水系特化の深掘り研究 (M1 太田川 / M2 江の川 / M3 芦田川 / M4 沼田川 / M5 黒瀬川) は今後の発展課題です。

ダウンロード

ファイル内容
X09_yoto_max_summary.csv用途別 浸水面積 (重複除去済)
X09_yoto_depth_pivot.csv用途×浸水深ランク ピボット
X09_yoto_scale_compare.csv計画 vs 想定最大の比較
X09_yoto_suikei_pivot.csv用途×水系 ピボット
X09_yoto_rate.csv用途別 浸水率
X09_deadly_zone.csv致命的浸水 (3m以上) 用途別
X09_yoto_depth_heatmap.png図1 用途×浸水深ヒートマップ
X09_map_yoto_depth_overlay.png図2 主題図 重ね合わせ
X09_map_yoto_inflood.png図3 主題図 浸水内のみ
X09_map_yoto_small_multiples.png図4 用途別 small multiples
X09_yoto_max_bar.png図5 用途別ランキング
X09_yoto_scale_compare.png図6 規模比較
X09_yoto_suikei_heatmap.png図7 用途×水系
X09_yoto_rate_bar.png図8 浸水率(密度)
X09_deadly_zone_bar.png図9 致命的浸水ランキング
X09_depth_stack.png図10 上位用途の浸水深内訳
X09_flood_landuse_zone.py再現スクリプト

分析1: 用途 × 浸水深ランク ヒートマップ (主役の発見)

狙い

flood Shapefile の rank 列(浸水深ランク) を活用し、 「どの用途が、どれくらいの深さで沈むか」 を 1枚の地図様マトリクスで把握する。

手法

実装

X09_flood_landuse_zone.py 行 533–548

533
534
535
536
537
538
ovl = gpd.overlay(landuse_d, flood_max[["rank", "suikei", "geometry"]],
                  how="intersection", keep_geom_type=False)
ovl["overlap_ha"] = ovl.geometry.area / 10000
pivot = ovl.pivot_table(index="yoto_name", columns="rank",
                        values="overlap_ha", aggfunc="sum", fill_value=0)
ax.imshow(pivot.values, cmap="YlOrRd")

結果

なぜこの図か: 2 軸 (用途×深さ) の値分布をひと目で見るにはヒートマップが最適。

用途×浸水深ランク 重なり面積 (想定最大規模)
用途×浸水深ランク 重なり面積 (想定最大規模)

読み取り:

分析2: 主題図 — 用途 × 浸水深 重ね合わせ

狙い

地図上で「どこ」 を確認する。用途地域を背景の色面、浸水深を半透明の青〜紫で重ねる。

手法

結果

なぜこの図か: ヒートマップでは「どこ」が分からない。地図にすることで地理的偏りを補完する。

広島市 用途×浸水深 主題図
広島市 用途×浸水深 主題図

読み取り:

分析3: 主題図 — 浸水内ポリゴンだけ抽出

狙い

「実際に浸水する用途地域」の 形と地理的分布 を強調表示。

結果

なぜこの図か: 浸水域内の polygon だけ用途別色分けし、非浸水部はグレーにすることで、リスクが地理的に どこに集中するか を直感的に把握できる。

浸水域内の用途地域ポリゴン
浸水域内の用途地域ポリゴン

読み取り:

分析4: 用途別 small multiples (12 panels)

狙い

用途を 1 つずつ取り出し、その用途だけの浸水分布 を 12 panel で並べる。形状の違いを比較。

結果

なぜこの図か: 1 枚に全用途を重ねると密集して読み取れない。条件 (用途) だけ変えて並べる small multiples は比較用途で最適。

用途別 浸水内ポリゴン (12 panels)
用途別 浸水内ポリゴン (12 panels)

読み取り:

分析5: 用途別 浸水重なり 絶対面積ランキング

狙い

シンプルに「面積で何が一番多いか」をランキング。

手法

X09_flood_landuse_zone.py 行 612–619

612
613
614
diss = ovl.dissolve(by="yoto_name")  # 用途ごとに union (重複除去)
diss["overlap_ha"] = diss.geometry.area / 10000
diss.sort_values("overlap_ha", ascending=False)

なぜこの図か: 面積を直接比較するなら横棒グラフが最も読み取りやすい。

用途別 浸水重なり面積 ランキング
用途別 浸水重なり面積 ランキング

読み取り: 第一種住居 が突出。住居系 4 種で全体の半分超 (H1 支持)。

分析6: 用途別 浸水率 (密度) - 絶対面積では見えない真実

狙い

絶対面積では 「広い用途ほど浸水量が多い」のは当たり前。これを 浸水率(=浸水重なり / 用途総面積) で正規化することで、密度視点のリスクが見える。

手法

X09_flood_landuse_zone.py 行 627–634

627
628
629
total = landuse_d.groupby("yoto_name")["total_ha"].sum()
overlap = sum_max.set_index("yoto_name")["overlap_ha"]
rate = overlap / total * 100

なぜこの図か: 絶対面積と密度は別物。両方を並べることで「面積大なのに密度低い用途」「面積小なのに密度高い用途」が浮かぶ。

用途別 浸水率 (密度)
用途別 浸水率 (密度)

読み取り:

分析7: 計画規模 vs 想定最大規模 + 増加倍率

狙い

降雨規模を変えると、用途別の重なりはどう変化するか?

用途別 計画 vs 想定最大 重なり
用途別 計画 vs 想定最大 重なり

読み取り:

分析8: 用途 × 水系 ヒートマップ

狙い

水系単位で重なり面積を集計。どの河川がどの用途を浸水させるか?

用途×水系 重なり面積
用途×水系 重なり面積

読み取り:

分析9: 致命的浸水 (3m 以上) × 用途

狙い

命の危険を伴う 3m 以上の浸水深 (rank ≥ 50) に絞り、用途別ランキング。

結果

なぜこの図か: 浸水域全体ではなく、致命的な深さに絞ることで「人的被害が真に懸念される用途」がわかる。

致命的浸水 (3m以上) × 用途
致命的浸水 (3m以上) × 用途
上位用途の浸水深内訳 (積み上げ棒)
上位用途の浸水深内訳 (積み上げ棒)

読み取り:

浸水深ランクの全体分布

狙い

用途を問わず、想定最大規模の浸水域全体での 深さの分布 を確認する。

浸水深ランク面積 (ha)用途地域内割合
0.0〜0.5m827.44.0%
0.5〜1.0m793.73.8%
1.0〜2.0m1151.35.6%
2.0〜3.0m7287.935.2%
3.0〜5.0m4936.023.8%
5.0〜10.0m5005.124.2%
10.0〜20.0m702.03.4%
20m以上1.20.0%
合計20704.7100.0%

読み取り:

用途×水系 上位 10 ペア

クロス集計の上位 10 ペアを抽出。リスクが集中する組合せ。

用途水系面積(ha)
第一種住居太田川水系5991.0
商業太田川水系3019.8
準工業太田川水系2252.5
工業太田川水系2180.0
第二種住居太田川水系2153.5
工業専用太田川水系1072.4
第一種住居中小河川735.0
田園住居太田川水系579.1
第二種中高層住居専用太田川水系478.2
第一種住居八幡川水系336.6

仮説検証と考察

仮説判定根拠
H1 住居系最多 (絶対面積)支持図5 で第一種住居がトップ 3058 ha
H2 規模別比率の差支持図6 で増加倍率が用途で異なる
H3 商業地の特定水系集中部分支持太田川集中、図7
H4 絶対 vs 密度の入替支持図8: 浸水率トップは 準工業 (93.8%) で絶対面積トップとは別
H5 太田川水系集中支持図7 太田川水系が最も濃い
H6 増加倍率の用途差支持第一種低層住居専用 ×9.31
H7 工業/工業専用の高浸水率支持港湾部立地で密度高
H8 致命的浸水の住居系最多支持図9 (deadly bar)

考察

発展課題 (結果から導かれる新たな問い)

  1. 住居系の細分化 × 深さ:
    • 結果X: 住居系が浸水重なりの 4 割超
    • 新仮説Y: 第一種住居 (高密度) と 第一種低層住居専用 (低密度) で 命の危険深さ の分布が異なる
    • 課題Z: 住居系 7 区分を全て分解した浸水深ヒストグラムを作成
  2. 市町別の用途×浸水パターン: 階層クラスタリングで市町を「商業集中・工業集中・住宅集中・低リスク」群に分類
  3. X07/X08 との結合: DID 人口集中地区(X07) と避難所立地(X08) の3層分析で、 「人がいるのに避難先が遠い」 高深度浸水域を特定
  4. 過去災害との照合: S66 過去災害情報 と本記事の致命的浸水域 (3m以上) を照合し、想定の妥当性を経験的に検証
  5. 建築年代との交差: 浸水域内の住居の建築年代 (古い木造?新しい RC?) を国勢調査建物データと交差
  6. 用途地域変遷との時系列比較: 過去の用途指定変更履歴と現在の浸水想定の整合を確認

補足: 用途地域コード対照表 / GIS メソッドの黒箱化

用途地域コード(YOTO_CD) → 名称

コード用途名主な特徴
1第一種低層住居専用戸建中心、低密度
2第二種低層住居専用低層、店舗一部可
3第一種中高層住居専用マンション可、店舗制限
4第二種中高層住居専用中高層、店舗一部可
5第一種住居住宅+小規模店舗
6第二種住居住居+店舗・事務所
7準住居幹線沿い住居
8近隣商業近隣商業地
9商業商業中心地
10準工業軽工業+住居
11工業工場+一部住居
12工業専用工場専用 (住居不可)
13田園住居農地と調和した住居

GIS メソッドの黒箱化 (ツール化視点)

本記事で使った GIS 操作は、原理を理解した上で 「何が入って何が出るか」だけ覚えれば 利用できる。

関数入力出力
gpd.overlay(A, B, how='intersection')2 GeoDataFrame交差ポリゴン (両方の属性を保持)
gdf.dissolve(by='col')1 GeoDataFrame + キー列キー単位で union された GeoDataFrame
gdf.geometry.buffer(0)1 GeoDataFrame微小なトポロジ崩れを修正したジオメトリ
gdf.to_crs('EPSG:6671')1 GeoDataFrame座標系変換 (面積を m² で正確に計算)

ツール化の意味: 内部で R-tree 空間インデックス、トポロジ修正、Boolean 演算が走るが、利用者はそれを知らなくても結果が得られる。原理の理解 + ブラックボックス利用 が DoBoX の方針。

処理時間とパフォーマンス (要件S対応)