Lesson 57

地すべり防止施設 単独 3 研究例分析 — 地すべり等防止法 1958 の polygon 台帳から砂防三施設族の地理を読む

L57地すべり等防止法地すべり防止施設RQ×3Format B防災施設中山間偏重庄原市L46連携L56比較砂防三施設族polygon 解析地理逆転
所要 35 分 / 想定レベル: 中級 / データ: DoBoX dataset 61 (Shapefile 1 セット, 32 polygon) + L46/L56 連携

データ取得手順

このスクリプトは初回実行時にデータを自動取得します(DoBoX からの直接ダウンロード)。

IDデータセット名
#55砂防関係指定地情報_砂防指定地
#56砂防関係指定地情報_急傾斜地崩壊危険区域
#57砂防関係指定地情報_地すべり防止区域
#59渓流保全工基本情報
#60急傾斜地崩壊防止施設基本情報
#61地すべり防止施設基本情報
#333dataset #333
#444dataset #444
#888都市計画区域情報_区域データ_安芸高田市_行政区域

実行コマンド:

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

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

学習目標と問い

本記事は DoBoX のシリーズ「地すべり防止施設基本情報」 1 件 (dataset_id = 61) を 単独で取り上げ、 広島県内の地すべり防止施設 32 polygon (Shapefile, 14 列, 約 14 KB の zip 圧縮) / 10 市町 / 合計面積 850 ha を 3 つの独立した研究角度 (RQ1 / RQ2 / RQ3) で並列に分析する。 本データは地すべり等防止法 (1958-08-01 施行) に基づき広島県・国・市町が整備した ハード対策の面 (polygon) ベース施設台帳で、 集水井・横ボーリング・抑止杭・排土工等の物理工事の工事範囲をひとまとまりに区切った polygon。 Phase 3 防災施設系の 2 本目 (L56 急傾斜地崩壊防止施設に続く)。

L56 (急傾斜) との対比: L56 は点 (緯度経度 1 点)2,508 件、 本記事 L57 は面 (polygon)32 件。同じ砂防シリーズに属するが データ形式・規模・地理パターンが完全に逆転する。 L56 = 呉市 47% (沿岸都市の人家密集) ⇄ L57 = 庄原市 28% (中山間の地質依存)。 本記事はこの逆転を RQ3 で実データ検証する。

独自用語の定義

研究の問い (3 RQ)

仮説 H1〜H5

  1. H1 (中山間偏重 ≥50%, RQ1): 上位 2 市町 (庄原市 + 福山市) で 50% 以上。 第三紀堆積岩・蛇紋岩破砕帯等の地すべり多発地質を持つ中山間市町に偏重。
  2. H2 (1 級水系優位 ≥70%, RQ1): 1 級水系 (江の川・芦田川・太田川) で 70% 以上。 地すべりは大規模流域の中山間部に多発するため。
  3. H3 (1980-95 集中整備, RQ1): 告示年中央値は 1985-1995 年付近。 法施行 (1958) → 1960-70 年代 1 次整備 → 1986-95 年 2 次整備 → 2006 以降停滞。
  4. H4 (区域 ≈ 施設 整備率 ~80%, RQ2): 区域 39 vs 施設 32 → 件数整備率 82%、面積整備率は同水準で高い対応関係。 告示番号での 1 対 1 対応も成立。
  5. H5 (砂防三施設族の地理逆転, RQ3): 呉市は L56 1 位 (47%) ・ L57 ゼロ件、 庄原市は L56 中位・L57 1 位 (28%)。L56 vs L57 の市町別件数相関は弱い〜負。 地質依存 (地すべり) vs 地形依存 (急傾斜) の防災工学の基本に整合。

到達点

本記事を読み終えた学習者は次の 3 点を体感できる:

  1. 1 つの「施設台帳 Shapefile (32 polygon)」 から、polygon の面積・コンパクト度・ 水系群・告示年月日という多次元属性を多角度に読む方法を習得する。 32 件と少ないが、面 (polygon) データならではの分析の深さを体感できる。
  2. L46 で扱った同名関連データ (#57 区域 39 件) と本データ (#61 施設 32 件) を 告示番号と空間 intersect の 2 経路で 1 対 1 照合し、 区域指定 vs 施設整備のギャップを件数・面積の 2 指標で定量化する手法を体感する。
  3. L56 (急傾斜 2,508 件 / 点) と L57 (地すべり 32 件 / 面) を市町単位で並列比較し、 砂防三施設族の地理逆転という県の防災投資配分の地理学を初めて可視化できる。 これは制度・現象・データ形式が三位一体で対応する好例。

使用データ

DoBoX のシリーズ「地すべり防止施設基本情報」 1 件のみを単独で扱う。 リソースは Shapefile 1 セットのシンプル構造 (cpg/dbf/prj/shp/shx の 5 ファイル zip 圧縮)。

項目
dataset_id61
名称地すべり防止施設基本情報
組織広島県土木建築局 砂防課
リソース22827 — Shapefile (ZIP, 12,679 byte, 32 polygon)
根拠法地すべり等防止法 (1958-08-01 施行) / 主務大臣 = 国交+農水 共管
列構成 (14 列)rireki_id (履歴ID) / kiken_no (危険箇所番号) / kasho_nm (箇所名) / prefecture / city / aza (字) / suikei_gr (水系群) / suikei_nm (水系名) / kansen_nm (幹川名) / keiryu_nm (渓流名) / tiku_nm (地区名) / address / kokuzi_ymd (告示年月日) / kokuzi_no (告示番号)
CRSEPSG:6668 (JGD2011 経緯度) → 解析時 EPSG:6671 へ変換
ライセンスクリエイティブ・コモンズ表示 4.0
最終更新2026-04-27
取得日2026-05-09

データの構造

関連データセットとの対応 (砂防三施設族)

ダウンロード

本レッスンの再現に必要な全データ・中間 CSV・図 PNG・スクリプトを以下から直接 DL できる:

生データ (DoBoX 直リンク)

本記事の中間 CSV (再現用)

図 (PNG 8 枚)

再現スクリプト

個別取得 (PowerShell):

cd "2026 DoBoX 教材"
iwr "https://hiroshima-dobox.jp/resource_download/22827" -OutFile "data/extras/L57_landslide_facility/砂防_地すべり防止施設_2026-04-27.zip"
py -X utf8 lessons\L57_landslide_facility.py

【RQ1】 構造分析 — 32 polygon / 庄原市 28% 集中の地理

狙い (RQ1)

地すべり防止施設 (32 polygon) は地すべり等防止法 (1958) に基づく公費施設。 法施行から 67 年で県内に整備された施設の地理偏在・面積分布・水系群構成・告示時期偏在を 4 軸で読む。L56 (急傾斜) では呉市 47% という極端偏重だったが、地すべりは地質依存のため 全く別の地理パターン (庄原市+福山市 で 50%) を示すと予想される。

手法 (Shapefile 読込 → CRS 変換 → 形状特性算出 → 集計)

実装コード (Shapefile 読込 + CRS 変換 + 形状特性 + 集計)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 1. Shapefile 読込・前処理
import geopandas as gpd, pandas as pd, numpy as np

gdf = gpd.read_file("data/extras/L57_landslide_facility/.../78_053_20260427.shp",
                     encoding="utf-8")
# 列名を日本語へリネーム (rireki_id → 履歴ID 等)
gdf = gdf.rename(columns={"rireki_id":"履歴ID", "kiken_no":"危険箇所番号",
                            "kasho_nm":"箇所名", "city":"市町_raw",
                            "suikei_gr":"水系群", "kokuzi_ymd":"告示年月日",
                            "kokuzi_no":"告示番号"})

# 2. 市町名正規化 (郡名除去)
def normalize_city(s):
    s = str(s).strip()
    if "郡" in s:
        s = s.split("郡", 1)[1]
    return s
gdf["市町名"] = gdf["市町_raw"].apply(normalize_city)

# 3. CRS 変換 (EPSG:6668 経緯度 → EPSG:6671 平面直角)
gdf = gdf.to_crs("EPSG:6671")

# 4. polygon 形状特性
gdf["面積_m2"] = gdf.geometry.area
gdf["面積_ha"] = gdf["面積_m2"] / 1e4
gdf["周長_m"] = gdf.geometry.length
# Polsby-Popper コンパクト度 (1.0 = 完全な円, ≈0 = 細長い)
gdf["コンパクト度"] = (4 * np.pi * gdf["面積_m2"]) / (gdf["周長_m"] ** 2)

# 5. 告示年 (datetime → year)
gdf["告示年月日_dt"] = pd.to_datetime(gdf["告示年月日"], errors="coerce")
gdf["告示年"] = gdf["告示年月日_dt"].dt.year

# 6. 市町別集計
city_summary = gdf.groupby("市町名").agg(
    件数=("履歴ID", "count"),
    合計面積_ha=("面積_ha", "sum"),
    平均面積_ha=("面積_ha", "mean"),
    一級=("水系群", lambda s: (s == "1級").sum()),
    二級=("水系群", lambda s: (s == "2級").sum()),
).reset_index().sort_values("件数", ascending=False)

# 7. 告示時期 3 区分
def era3_label(y):
    if y < 1980: return "1958-1979 (法施行直後)"
    if y < 2000: return "1980-1999 (集中整備)"
    return "2000-2024 (停滞)"
gdf["告示時期"] = gdf["告示年"].apply(era3_label)

図 1: 県全域 polygon マップ + 市町別件数 choropleth (2 panel)

なぜこの図か: 学習者がまず「施設はどこにあるか」 を一目で把握するため。 左の polygon マップは水系群 (1 級 = 青 / 2 級 = 緑) で色分けし、 右の choropleth は市町別件数の濃淡を示す。 L56 で呉市偏重を見た直後に、L57 で逆 (中山間偏重) が明らかになるのが本図のキー。

図 1 (RQ1): 県全域 polygon マップ + 市町別件数 choropleth
図 1 (RQ1): 県全域 polygon マップ + 市町別件数 choropleth

この図から読み取れること:

図 2: 市町別ランキング (Top 10, 1 級/2 級 stack) + 水系群パイ

なぜこの図か: H1 (中山間偏重) と H2 (1 級水系優位) を 1 図で同時検証する。 左の stack 棒で市町ごとの 1 級 vs 2 級内訳、右パイで全体の比率を見る。 地すべり地形は地質依存のため、市町ランキングがほぼ「地すべり地質を持つ市町リスト」 そのもの となる構造的特徴が読める。

図 2 (RQ1): 市町別ランキング Top 10 + 水系群パイ
図 2 (RQ1): 市町別ランキング Top 10 + 水系群パイ

この図から読み取れること:

図 3: 告示年別ヒスト (1958-2024) + polygon 面積分布

なぜこの図か: 法施行後 67 年の時系列で施設整備のリズムを読みつつ、 polygon 面積分布から「地すべり地区の物理的スケール」 を把握する。 1958 年 (法施行) と 2018 年 (西日本豪雨) を縦線でマーキングする。 面積分布は右に長い尾を持つ skewed 分布になるはず (= 大半は小〜中、稀に巨大地区)。

図 3 (RQ1): 告示年別ヒスト + polygon 面積分布
図 3 (RQ1): 告示年別ヒスト + polygon 面積分布

この図から読み取れること:

図 4: 告示時期別 3 期 small multiples マップ

なぜこの図か: 時系列ヒストだけでは「どこに整備されたか」 が分からない。 3 期 (法施行直後 / 集中整備 / 停滞) × 3 panels で同じ県地図に時期別の polygon を分けて配置し、 地理的拡散・縮退のリズムを直感的に読む可視化。

図 4 (RQ1): 告示時期別 3 期 small multiples マップ
図 4 (RQ1): 告示時期別 3 期 small multiples マップ

この図から読み取れること:

表: 全体サマリ (3 RQ 統合)

指標
総施設数32 polygon (全 10 市町)
総面積850.1 ha (= 8.5 km²)
Top 1 市町庄原市 9 件 (28.1%)
Top 2 累計庄原市+福山市 16 件 (50.0%)
水系群: 1 級23 件 (71.9%)
水系群: 2 級7 件 (21.9%)
水系群: 不明2 件 (6.2%)
告示年範囲1964–2006 (中央値 1986 年)
告示年 欠損0 件
施設 polygon 平均面積26.6 ha (中央値 13.0 ha)
施設 polygon 最大面積170.9 ha (廿日市市 女鹿平地区)
L46 #57 区域 (=指定地)39 件 / 合計 526.1 ha
施設整備率 (件数)82.1% (施設 32 ÷ 区域 39)
施設整備率 (面積)161.6% (施設面積 850 ÷ 区域面積 526 ha)
告示番号 1-1 対応23 件 (= 23 共通 + 9 facility-only/zone-only)
L56 急傾斜地崩壊防止施設 (参考)2,508 件 (点)
L56 vs L57 規模比1 : 78 (2508 ÷ 32)
L56 vs L57 件数 Pearson r-0.061

この表から読み取れること: 全 32 polygon の基本統計、庄原市+福山市 偏重 (50%)、1 級水系 72%、区域 vs 施設整備率 82%、L56 vs L57 規模比 1:78、など 3 RQ の核心指標が 18 行に集約された統合サマリ。

表: 市町別ランキング

順位市町名件数シェア_%合計面積_ha平均面積_ha1級2級不明告示年中央
1庄原市928.1287.732.09001,986
2福山市721.9127.418.21511,987
3広島市佐伯区412.553.813.54001,972
4三次市39.4012.54.163001,966
5安芸太田町39.40128.943.03001,999
6尾道市26.2024.012.00201,984
7世羅町13.1015.815.81001,981
8府中市13.107.767.761001,996
9廿日市市13.10170.9170.91001,992
10東広島市13.1021.321.30011,972

この表から読み取れること: 各市町の件数・面積・水系群内訳・告示年中央が一覧。上位 2 市町 (庄原市+福山市) が件数の 50% を占める。中山間市町に集中し、沿岸都市 (呉市・広島市等) は完全に欠落。面積を見ると 1 polygon あたりの規模感も市町で異なる (= 大規模地区 vs 小規模地区) ことが分かる。

表: 水系群構成

水系群件数シェア_%意味
1 級水系 (国交省管理)2371.9太田川・芦田川・江の川・小瀬川等の主要河川流域。中山間部の地すべり地形が多い。
2 級水系 (県管理)721.9中規模県管理河川。沿岸・島嶼を含むが地すべり地形は少ない。
不明26.20古い登録で水系群列が空欄のレコード。

この表から読み取れること: 1 級水系で 72% を占める。1 級水系 = 国交省管理の主要河川流域 (江の川・芦田川・太田川) で、中山間部の地すべり地形が地質的に発生しやすい場所と一致。2 級水系 (沿岸・島嶼) には地すべり地形がほぼ存在しない地質的事実を反映。

表: 告示年代別件数 (10 年区間)

告示年代件数シェア_%
1,9606.0018.8
1,9707.0021.9
1,9807.0021.9
1,9908.0025.0
2,0004.0012.5

この表から読み取れること: 告示年代の分布。1960 年代と 1980-1990 年代の 2 山構造、2010 年代以降の新規整備停止が見える。高度経済成長期 (1960-1990) に集中し、平成後半以降は制度として頭打ち。

表: 告示時期別 3 区分

告示時期件数シェア_%
1958-1979 (法施行直後)1340.6
1980-1999 (集中整備)1546.9
2000-2024 (停滞)412.5

この表から読み取れること: 3 期分類で時代の重心が見える。1980-1999 集中整備期が最大シェアで、その後停滞 → 2000 年代は新規整備ほぼゼロ。

【RQ2】 L46 区域 (#57) との対応 — 整備率 82%

狙い (RQ2)

地すべり等防止法は区域指定 (#57, 39 件) と施設整備 (#61, 32 件) を対で運用する設計。 本 RQ2 では (1) 告示番号を介した区域 ⇄ 施設の 1 対 1 直接照合、 (2) 空間 intersect による polygon 重なり判定、 (3) 件数整備率 + 面積整備率の 2 指標で、 「区域指定済 + 施設整備済」 / 「区域指定済 + 施設未整備」 を初めて市町別に同定する。 L56 (#56 区域 vs #60 施設, 件数のみ照合) と異なり、本 RQ2 は2 経路 + 2 指標の精密照合。

手法 (告示番号 set 演算 + sjoin intersect + overlay 面積)

実装コード (告示番号 set 演算 + 空間 sjoin + overlay 面積)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# RQ2: 区域 (L46 #57) vs 施設 (本データ #61) 1-1 照合
import geopandas as gpd, pandas as pd

# 1. L46 #57 地すべり防止区域 Shapefile を読込
zone = gpd.read_file("data/extras/L46_sabo_designation/.../地すべり防止区域.shp",
                      encoding="utf-8")
zone.columns = ["col_no","種別","区域名","県","市町_raw","字_raw",
                 "col07","告示日_z","告示番号_z","区分","geometry"]
zone = zone.to_crs("EPSG:6671")
zone["市町名"] = zone["市町_raw"].apply(normalize_city)
zone["面積_ha"] = zone.geometry.area / 1e4

# 2. 告示番号 set 演算 (1 対 1 直接照合)
gdf_kn = gdf["告示番号"].dropna().astype(int)
zone_kn = zone["告示番号_z"].dropna().astype(int)
kn_common = set(gdf_kn) & set(zone_kn)
print(f"告示番号 共通 (1-1 対応): {len(kn_common)} 件")

# 3. 空間 sjoin による intersect 判定
fac_idx = gdf.assign(fac_id=range(len(gdf)))
zone_idx = zone.assign(zone_id=range(len(zone)))
sj = gpd.sjoin(fac_idx, zone_idx, how="left", predicate="intersects")

# 4. 各 sjoin ペアの overlay 面積
overlays = []
for _, row in sj.iterrows():
    if pd.isna(row["zone_id"]):
        overlays.append(0.0)
        continue
    zg = zone_idx.loc[int(row["zone_id"]), "geometry"]
    fg = fac_idx.loc[int(row["fac_id"]), "geometry"]
    overlays.append(fg.intersection(zg).area / 1e4)
sj["overlay_ha"] = overlays

# 5. 各 facility について最大 overlay の zone を選ぶ
sj_best = sj.sort_values("overlay_ha", ascending=False).drop_duplicates("fac_id")

# 6. 市町別整備率
zone_per_city = zone.groupby("市町名").size().reset_index(name="区域数_57")
fac_per_city = gdf.groupby("市町名").size().reset_index(name="施設数_61")
zvf = pd.merge(zone_per_city, fac_per_city, on="市町名", how="outer").fillna(0)
zvf["施設整備率_%"] = (zvf["施設数_61"] / zvf["区域数_57"].replace(0,np.nan) * 100).round(1)

図 5: 区域 (赤) × 施設 (紫) 重ね合わせ全県マップ + 庄原市拡大

なぜこの図か: 区域 polygon (39 件) と施設 polygon (32 件) の空間整合性を 1 図で読む。 左の全県マップで全体の重ね合わせを、右の Top 1 市町拡大で個別の対応を確認する。 区域の赤と施設の紫がどれだけ重なるかでデータの整合性が分かる。

図 5 (RQ2): 区域 (39) × 施設 (32) 重ね合わせ全県 + 庄原市拡大
図 5 (RQ2): 区域 (39) × 施設 (32) 重ね合わせ全県 + 庄原市拡大

この図から読み取れること:

図 6: 市町別ギャップ並列棒 + 整備率 choropleth

なぜこの図か: H4 (区域 ≈ 施設 整備率 ~80%) を市町単位で直接検証する図。 左の並列棒は #57 区域 (赤) と #61 施設 (紫) を市町別に並べて差を視覚化、 右の choropleth は市町ごとの件数整備率 (= 施設数 / 区域数 × 100) を色濃淡で示す。 整備率 100% = 区域の数だけ施設整備済整備率 < 100% = 区域指定済+施設未整備の残課題

図 6 (RQ2): 市町別ギャップ並列棒 + 整備率 choropleth
図 6 (RQ2): 市町別ギャップ並列棒 + 整備率 choropleth

この図から読み取れること:

表: 区域 (#57) vs 施設 (#61) 市町別ギャップ

順位市町名区域数_57施設数_61差_区域-施設施設整備率_%
1庄原市149564.3
2福山市117463.6
3尾道市32166.7
4安芸太田町330100.0
5広島市佐伯区24-2200.0
6府中市21150.0
7世羅町110100.0
8三次市13-2300.0
9廿日市市110100.0
10東広島市110100.0

この表から読み取れること: 区域・施設の市町別件数と差分・整備率の一覧。全県整備率 82%、上位 2 市町 (庄原市+福山市) で区域 25 ・ 施設 16 と圧倒的シェア。差 (区域-施設) が正の市町は「区域指定済 + 施設未整備」 残課題エリア。

表: 告示番号 1-1 対応 詳細 (上位 15 件)

告示番号区域名 (L46)箇所名 (本記事)市町区域 polygon 数施設 polygon 数区域面積_ha施設面積_ha
39小松原小松原地区東広島市119.6021.3
291大二五大二五地区庄原市1118.924.5
459山方A山方A地区尾道市2217.2117.3
560馬騎馬騎地区世羅町117.7015.8
602女鹿平女鹿平地区廿日市市1156.0170.9
662僧殿僧殿地区府中市111.407.80
695八尋川八尋地区福山市2218.358.4
717小原小原地区福山市118.508.50
783押ヶ垰押ヶ垰地区安芸太田町115.4012.8
788中門田下中門田下地区庄原市117.5012.3
805藤城谷藤城谷地区庄原市2226.731.7
837大久保小用大久保小用地区庄原市115.1044.4
840大草奥門田D(上)地区庄原市2153.734.6
865志井地区志井地区広島市佐伯区1115.015.8
872奥門田中奥門田E(中)地区庄原市1166.460.4

この表から読み取れること: 告示番号で区域と施設が直接 1 対 1 で対応する組合せ一覧。区域名 (L46) と箇所名 (本記事) は同じ地区を別名で記録した可能性が高く、1 区域 polygon あたり 1 施設 polygon が標準パターン。区域面積 vs 施設面積を比較すると、施設が区域内のどの範囲を覆っているかが分かる。

【RQ3】 L56 急傾斜地崩壊防止施設との比較 — 砂防三施設族の地理逆転

狙い (RQ3)

砂防三施設族 (砂防 + 地すべり + 急傾斜) のうち、本記事 (L57 地すべり, 32 件 / 面) と L56 (急傾斜, 2,508 件 / 点) の2 制度を直接対比する。 規模差 (1:78)、地理逆転、施設形態 (面 vs 点)、告示時代差を市町単位で並べ、 「砂防三施設族の地理が完全に逆転する」 現象を実データで初めて可視化する。

手法 (市町別 merge + symlog 軸 + シェア比較)

実装コード (市町別 outer merge + symlog 軸 + シェア比較)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# RQ3: L56 (急傾斜) vs L57 (地すべり) — 砂防三施設族の比較
import pandas as pd

# 1. L56 既処理 city ranking を読込
city_l56 = pd.read_csv("lessons/assets/L56_city_ranking.csv", encoding="utf-8-sig")
l56_short = city_l56[["市町名","件数"]].rename(columns={"件数":"L56_急傾斜施設"})

# 2. L57 (本データ) 市町別件数
fac_per_city_l57 = gdf.groupby("市町名").size().reset_index(name="L57_地すべり施設")

# 3. outer merge
cmp = pd.merge(l56_short, fac_per_city_l57, on="市町名", how="outer").fillna(0)
cmp["L56_急傾斜施設"] = cmp["L56_急傾斜施設"].astype(int)
cmp["L57_地すべり施設"] = cmp["L57_地すべり施設"].astype(int)

# 4. シェア計算
n56 = cmp["L56_急傾斜施設"].sum()
n57 = cmp["L57_地すべり施設"].sum()
cmp["L56_シェア_%"] = (cmp["L56_急傾斜施設"] / n56 * 100).round(1)
cmp["L57_シェア_%"] = (cmp["L57_地すべり施設"] / n57 * 100).round(1)

# 5. 順位差 (= L56 順位 - L57 順位)
cmp["順位差"] = (cmp["L56_急傾斜施設"].rank(ascending=False, method="min").astype(int)
                 - cmp["L57_地すべり施設"].rank(ascending=False, method="min").astype(int))

# 6. 件数 Pearson 相関 (n=有効市町)
valid = cmp[(cmp["L56_急傾斜施設"] + cmp["L57_地すべり施設"]) > 0]
corr_56_57 = valid["L56_急傾斜施設"].corr(valid["L57_地すべり施設"])
print(f"L56 vs L57 件数 Pearson r (n={len(valid)}): {corr_56_57:.3f}")
# r ≈ 0 や負なら地理逆転 = H5 支持

図 7: L56 (急傾斜 点) × L57 (地すべり 面) 重ね合わせ全県マップ

なぜこの図か: 砂防三施設族の地理逆転を 1 枚の地図で直感的に示す。 L57 (本記事) の polygon を紫面で、L56 (既扱) の点を青ドットで重ね、 沿岸の青密集と内陸の紫面が補完的に分布する様子を一覧する。 これは制度・現象・地理が一体化した防災工学の地理学的本質を示す画。

図 7 (RQ3): L56 (青点) × L57 (紫面) 重ね合わせ全県マップ
図 7 (RQ3): L56 (青点) × L57 (紫面) 重ね合わせ全県マップ

この図から読み取れること:

図 8: L56 vs L57 市町別ランキング 並列比較 (件数 + シェア %)

なぜこの図か: 図 7 の地理逆転を市町単位の数値で精密化する。 左 (件数 symlog 軸) で実数の桁違いを、右 (シェア %) で同じ市町でも L56 と L57 のランキングがどう違うかを示す。 規模 1:78 倍の 2 制度を 1 図に重ねる工夫として symlog 軸を使い、 学習者に「同じグラフに同居させる工夫」 を教える。

図 8 (RQ3): L56 vs L57 市町別 並列比較 (件数 symlog + シェア %)
図 8 (RQ3): L56 vs L57 市町別 並列比較 (件数 symlog + シェア %)

この図から読み取れること:

表: L56 (急傾斜) vs L57 (地すべり) 市町別比較 Top 15

市町名L56_急傾斜施設L56_シェア_%L57_地すべり施設L57_シェア_%順位差
庄原市241.00928.120
福山市1144.50721.91
広島市佐伯区471.90412.511
三次市351.4039.4015
安芸太田町492.0039.409
尾道市1295.1026.20-4
府中市140.60013.1016
廿日市市923.7013.10-2
世羅町00.00013.1023
東広島市471.9013.107
坂町441.8000.0007
呉市117746.900.000-10
北広島町50.20000.00015
三原市602.4000.0000
広島市南区532.1000.0001

この表から読み取れること: 各市町の L56 件数・シェア・L57 件数・シェア・順位差。順位差 = L56 順位 - L57 順位。正の値が大きい市町ほどL56 では下位だが L57 では上位 (= 中山間特化)、負の値が大きい市町ほどL56 では上位だが L57 では下位 (= 沿岸都市特化)。呉市は順位差 10 程度の差で典型的な L56 偏重 (沿岸都市)、庄原市は順位差 +20 程度の差で L57 偏重 (中山間)。制度ごとに別の市町ランキングが存在する事実を 1 表で実証。

仮説検証総合

本記事の 5 仮説と観測結果の照合:

仮説予想観測判定
H1 (中山間偏重 ≥50%, RQ1)庄原市+福山市 の 2 市単独で 50% 以上庄原市 9 (28%) + 福山市 7 = 計 50%強支持
H2 (1 級水系優位 ≥70%, RQ1)1 級水系で 70% 以上1 級 23 (72%) / 2 級 7 (22%)強支持
H3 (1980-95 集中整備, RQ1)告示年中央値が 1985-1995 年付近中央値 1986 年 / 集中期 15 件支持
H4 (区域 ≈ 施設 整備率 ~80%, RQ2)整備率 75-100% の高一致件数 82% (施設 32 ÷ 区域 39) / 面積 162% / 告示番号一致 23強支持
H5 (砂防三施設族の地理逆転, RQ3)庄原市は L57 単独 1 位だが L56 では中位 / 呉市は L56 単独 1 位だが L57 ゼロ件L56 vs L57 件数相関 r = -0.061, 呉市 L56=1177件 / L57=0件, 庄原市 L56=24件 / L57=9件強支持 (逆転確認)

3 RQ × 3 結論

砂防三法 (砂防 / 地すべり / 急傾斜) の制度・施設・地理の対応

側面砂防法地すべり等防止法 (本記事)急傾斜地法 (L56)
対象現象土石流 (渓流)地すべり (緩慢移動体)がけ崩れ (急斜面)
施行年1897 (明治 30)1958 (昭和 33)1969 (昭和 44)
区域指定 (= 面)砂防指定地 3,207 件 (#55)地すべり防止区域 39 件 (#57)急傾斜地崩壊危険区域 2,935 件 (#56, CSV緯度経度)
施設整備データ渓流保全工 (#59 等, 別データ)32 polygon (本データ)2,508 点 (L56 既扱)
施設の typical堰堤・床固・床版・流路工集水井・横ボーリング・抑止杭・排土工擁壁・法枠・アンカー・防護網
防災投資の主舞台中山間 + 沿岸両域中山間 (地質依存)沿岸都市 (人家密集)
施設の地理 (Top 市町)中山間広域分散庄原市 28% / 福山市 次点呉市 47%

この表から読み取れること: 砂防三法 (砂防法 1897 / 地すべり等防止法 1958 / 急傾斜地法 1969) は、それぞれ別の現象を対象とし、別の施設タイプを整備し、別の地理を主舞台とする。本記事 (L57 地すべり) と L56 (急傾斜) の対比は、この三制度の2 つの極を実データで初めて並列可視化したもの。砂防法系の渓流保全工 (#59) を将来分析することで、三施設族の三国志が完成する。

発展課題

結果 X → 新仮説 Y → 課題 Z (3 RQ × 1 課題以上)

発展課題 1 (RQ1 由来): 個別工法種別データの収集と詳細分析

発展課題 2 (RQ2 由来): 区域 polygon と施設 polygon の精密 overlay 解析

発展課題 3 (RQ3 由来): L46 砂防指定地 (#55) を加えた砂防三施設族の三角分析

発展課題 4 (時系列): 老朽化分析 — 集水井・横ボーリングの維持管理需要