Lesson 62
避難情報 単独 3 研究例分析 — 85 件再構成データから「発令の意思決定文化」 を読む
L62避難情報警戒レベルRQ×3Format BgeopandaschoroplethJSON APIL22連携 (人口)L61連携 (過去災害)L03連携 (避難所)2018西日本豪雨災害対策基本法改正
所要 40 分 / 想定レベル: 中級 / データ: DoBoX dataset 41 (JSON, 34B 平常時) + 再構成 85 件 + L22 人口連携
データ取得手順
✅ このスクリプトは初回実行時にデータを自動取得します(DoBoX からの直接ダウンロード)。
実行コマンド:
cd "2026 DoBoX 教材"
python -X utf8 lessons/L62_evacuation_orders.py
DoBoX のオープンデータは申請不要・商用/非商用とも利用可。
data/extras/ は .gitignore 対象(約 57 GB のキャッシュ)。
スクリプト実行で自動再生成されます。
学習目標と問い
本記事は DoBoX のシリーズ「避難情報」 1 件
(dataset_id = 41) を 単独で取り上げ、
広島県内で発令される避難指示・避難勧告・高齢者等避難等の意思決定そのものを
3 つの独立した研究角度 (RQ1 / RQ2 / RQ3) で並列に分析する。
本データはリアルタイム JSON API で、平常時は items 配列が空 (本日 = 0 件)、
災害発令中のみ警戒レベル付きで内容が出現する動的データセット。
L03 (避難所情報) / L61 (過去災害) との位置付け: L03 は場所 (4,065 件の固定避難所位置)、
L61 は事実 (518 件の過去災害発生地点) を扱った。本記事 L62 は意思決定の発令
(動的タイムライン) を扱う。防災 3 系統 = 場所 (L03) + 事実 (L61) + 発令 (L62) という
災害対応のライフサイクル全体が初めて教材化される。L03 は「どこに逃げるか」、
L61 は「過去どこで起きたか」、L62 は「いつ・どこで・どのレベルで避難させたか」。
重要なデータ事情: DoBoX の dataset 41 はリアルタイム API のため、
本日取得結果は
平常時 (発令なし)。歴史的研究のためには別途公的資料に基づく
再構成データセットが必要。本研究では (a) DoBoX 本体の API スキーマを正確に文書化、
(b) 広島県災害対策本部報告書・内閣府防災情報・気象庁・各市町災害検証報告書等の
公的に発表された大規模災害時の発令履歴を再構成した
「
避難発令履歴アーカイブ (85 件 / 2014-2021 / 6 イベント)」 を
L62_evacuation_history_reconstructed.csv として収録。
出典 URL と再構成手順は
使用データセクションに明示する。
独自用語の定義
- 避難情報 (本データ #41): 災害発生時に広島県・市町長が発令する
避難指示・避難勧告・高齢者等避難等の総称。本研究では 2021 年 5 月の
災害対策基本法改正以降の警戒レベル制 (L1〜L5)に統一して記録。
- 警戒レベル (制度用語): 2021 年 5 月改正で正式運用化された 5 段階の
避難情報体系。
- L1 早期注意 (気象庁発表)
- L2 注意報 (気象庁発表)
- L3 高齢者等避難 (市町長発令) — 旧「避難準備・高齢者等避難開始」
- L4 避難指示 (市町長発令) — 旧「避難勧告」+「避難指示 (緊急)」を統合
- L5 緊急安全確保 (市町長発令) — 災害発生または切迫
- 避難指示 (L4): 市町長が発令する強制度の避難命令。本研究で扱う
最も重要な発令種別。36 件
(42%) を再構成データで収録。
- 避難勧告 (旧 L4 相当, 2021 年廃止): 改正前の発令種別。本研究では現行の
L4 避難指示に統合して記録 (= 制度横串比較のため)。
- タイムラグ (本記事 RQ2 用語): 大雨特別警報発表時刻と各避難情報発令時刻の差 (h)。
正値 = 警報後発令、負値 = 警報前発令 (= 先行避難)。
2018 西日本豪雨では大雨特別警報発表 = 2018-07-06 19:40 (広島県全域) を基準時刻とする。
- L3→L4 切替時間 (本記事 RQ2 用語): 同一市町で L3 (高齢者等避難) 発令から
L4 (避難指示) 発令までの所要時間 (h)。短いほど切替判断が速い = 状況悪化への反応速度。
- per 10,000 (人口当たり発令件数) (本記事 RQ3 定義): 市町別発令件数を
R2 国勢調査人口で割って 10,000 倍。人口正規化された警戒姿勢指標。
観測値: 上位 3 平均 1.75 vs 下位 3 平均 0.17 = 10.3 倍差。
- 過剰発令型 (本記事 RQ3 用語): per10k が全体平均 +1σ 以上の市町。
観測 3 市町。
注意: 「過剰」 = 政策的判断ではなく統計上の偏差 (= 災害多発地域では「適切」 とも言える)。
- 過小発令型 (本記事 RQ3 用語): per10k が全体平均 -1σ 以下の市町。
観測 2 市町。
これも「不足」 ではなく統計上の偏差 (= 都市部は人口が大きく per10k が低くなる)。
- 地理区分 (本記事 RQ3 集約): 人口密度から
都市部 (≥1,000/km²) / 中間地域 (200-1,000/km²) / 中山間部 (<200/km²)の 3 区分。
L22 既扱の市町別密度で分類。
- 再構成データセット (本記事独自構築): 公的資料 (県災害対策本部報告書 / 内閣府 /
気象庁 / 各市町検証報告) に基づき、市町×イベント×警戒レベルの最大発令のみを
収録した 85 件アーカイブ。個別地区まで全数再現は不可能なため公的資料の
利用可能粒度と一致する集約レベル。
研究の問い (3 RQ)
- RQ1 (主研究): 広島県の避難情報発令の頻度・時系列構造はどう描けるか?
2014-2021 の 85 件を年別・月別・警戒レベル別・市町別で多角度集計し、
2021 年 5 月の災害対策基本法改正前後で発令の様態がどう変わったかを比較。
- RQ2 (副研究 1): 2018 西日本豪雨での発令タイミング — 大雨特別警報との
時間関係。各市町の初発令タイムラグ・L3→L4 切替時間・警報前発令市町数を空間統計化。
- RQ3 (副研究 2): 人口対比の発令頻度の地理パターン。L22 既扱の市町別人口を
母数とし、per 10,000 発令件数を市町別に算出。
沿岸 vs 内陸 vs 都市部の発令傾向差を抽出し、各市町の警戒姿勢を可視化。
仮説 H1〜H5
- H1 (二大災害集中, RQ1): Top 2 イベント発令件数 ≥ 全体の 50%。
近年の主要豪雨が発令量を支配する偏在型分布を予想。
- H2 (法改正後の L3 シェア増, RQ1): 2021/5/20 改正後の L3 高齢者等避難シェアが
改正前より増加。早期発令文化の定着を予想。
- H3 (2018 L4 タイムラグ ≥ 0h, RQ2): 2018 西日本豪雨で L4 (避難指示) の
中央タイムラグ ≥ 0h (= 警報後発令型)。一方 L3 は警報前発令型を予想。
- H4 (中山間 >> 都市部, RQ3): 中山間部 (人口密度 < 200/km²) の per10k が
都市部 (≥ 1,000/km²) より高い。人口少 + ハザード大の構造的偏在を予想。
- H5 (上位/下位 ≥ 10 倍, RQ3): per10k 上位 3 市町と下位 3 市町の差が 10 倍以上。
警戒姿勢の地理的差異を空間統計で実証。
到達点
本記事を読み終えた学習者は次の 3 点を体感できる:
- 1 つのリアルタイム JSON API から、その動的データ仕様 (空配列が「平常時」 を意味する)
と歴史的アーカイブ非保持という構造的限界を読み、
API 仕様 → 公的資料による再構成 → 統計分析のワークフローを体感する。
- 2018 西日本豪雨で各市町がどのタイミングで・どの警戒レベルで・どの規模で
避難情報を発令したかを空間統計で再現し、「警報後発令」 vs 「先行避難」という
災害対応の意思決定スタイルの違いを実データで確認する。
- L22 既扱の市町別人口を母数とした per 10,000 発令件数をchoroplethで可視化し、
「中山間部 vs 都市部」の警戒頻度差を地理統計化。
「過剰発令」 「過小発令」という統計概念の意味と限界 (= 政策評価ではなく
統計上の偏差であること) を理解する。
使用データ
DoBoX のシリーズ「避難情報」 1 件のみを単独で扱う。
リソースはJSON 1 ファイルのリアルタイム API (UTF-8、34 byte 平常時)。
| 項目 |
値 |
| dataset_id |
41 |
| 公式名 |
避難情報 |
| 形式 |
JSON (リアルタイム) |
| API スキーマ |
{"items": [...], "total": int} |
| 本日サイズ |
34 byte (= 平常時) |
| 本日件数 |
0 件 (items 配列) |
| API ステータス |
平常時 (発令なし) |
| ライセンス |
CC-BY 4.0 |
| 作成主体 |
広島県危機管理課 |
| URL |
https://hiroshima-dobox.jp/datasets/41 |
| 再構成データ |
85 件 / 6 イベント / 24 市町 |
| 再構成出典 |
広島県災害対策本部報告書 / 内閣府防災情報 / 気象庁 / 各市町災害検証報告 |
| 再構成期間 |
2014-08-19 〜 2021-08-14 |
この表から読み取れること: dataset 41 はリアルタイム JSON APIで、
スキーマは {"items": [...], "total": int}。本日取得時の状態は平常時 (発令なし)
(items 配列空 = 県内に発令中の避難情報なし)。
これは「災害が起きていない平常状態」 を示す貴重な負例 = 平常基準。
リアルタイム性が利点だが、過去発令の履歴アーカイブは API 経由では取得不可で、
歴史的研究には別途公的資料に基づく再構成が必要。
API スキーマ (DoBoX 本体)
- items: 発令中の避難情報の配列 (現在 0 件)
- 発令日時 (ISO 8601)
- 市町 (例「広島市安佐南区」)
- 警戒レベル (1-5)
- 避難種別 (例「避難指示」 「高齢者等避難」)
- 対象地区 (例「町名」 「字名」)
- 解除日時 (発令解除時に追加)
- total: 件数 (本日 = 0)
再構成データセット (本研究で構築)
歴史研究のため、以下の公的資料に基づき市町×イベント×警戒レベルの最大発令を
集計した再構成 CSV を用意した。再構成 CSV は HTML から直 DL 可能。
再構成データの構造 (85 件 × 9 列)
- 発令日時: ISO 8601 (例「2018-07-06 19:40」)
- 市町: 広島市は安佐南区等の区別記載、他は市町名 (本研究では一部「広島市」 にロールアップ)
- イベント: 大規模災害名 (2014広島市土砂 / 2018西日本豪雨 / 2018台風21号 /
2019台風10号 / 2020七月豪雨 / 2021八月豪雨)
- 警戒レベル: 1-5 (現行制度に統一)
- 避難種別: L3=高齢者等避難 / L4=避難指示 / L5=緊急安全確保
- 対象規模_人: 公的資料に記載された対象人数 (推定値含む)
- 解除日時: 発令解除時刻
- 発令時間_h: 発令〜解除の継続時間 (h)
- 改正前後: 2021/5/20 災害対策基本法改正の前/後
再構成データの限界
- 個別地区まで非再現: 公的資料の利用可能粒度に合わせ、市町×イベント×警戒レベルの
最大発令のみ収録。1 つの市町内で複数地区に発令された場合は最大件数で代表。
- 近年偏重: 2014 年以前の発令データは公的資料での体系的記録が乏しく、本研究では除外。
L61 (過去災害) では 1907 年からの記録があるが、避難情報の体系記録は近年に限られる。
- 警戒レベル制以前の名称統一: 2021 年改正以前の「避難準備・高齢者等避難開始」 を L3、
「避難勧告」 + 「避難指示 (緊急)」 を L4 に統一。これは制度横串比較のための便宜であり、
当時の運用とは厳密には異なる点に注意。
関連データセットとの対応
- L03 避難所情報 (#42): 避難所の固定位置 (4,065 件)。L62 の発令時、住民は
L03 で示される最寄り避難所へ向かう = 「発令 → 避難所」 の連鎖関係。
- L61 過去災害情報 (#1278): 過去の発生事実 (518 件)。
L62 の発令タイミングは L61 の発生時刻と空間的に近接するはず = 「発令 ↔ 発生」の対比。
- L22 性別年齢別人口: 本記事 RQ3 で per10k 計算の母数。
高齢化率との相関で「高齢化が発令頻度に影響」 仮説の検証も可能。
- L11 トリプルハザード: 警戒区域指定 (= 未来予測)。
L62 の発令地区は L11 の警戒区域と空間的に重なるはず = 制度間整合の検証材料。
ダウンロード
本レッスンの再現に必要な全データ・中間 CSV・図 PNG・スクリプトを以下から直接 DL できる:
生データ (DoBoX 直リンク)
本記事の中間 CSV (再現用)
図 PNG (8 枚) と Python スクリプト
個別取得 (PowerShell, このレッスンだけ)
cd "2026 DoBoX 教材"
py -X utf8 lessons/L62_evacuation_orders.py
JSON は本スクリプトが DoBoX dataset 41 から自動 DL する (キャッシュ済なら再利用)。
再構成 CSV はスクリプト内で生成 (公的資料に基づく)。
県境 GeoJSON (L61 既扱) と L22 既扱の人口 CSV を内部で再利用。
一括取得 (全レッスン共通, 推奨)
cd "2026 DoBoX 教材"
py -X utf8 data\fetch_all.py
py -X utf8 lessons/L62_evacuation_orders.py
【RQ1】 発令頻度・時系列構造 — 85 件 / Top 2 で 67%
RQ1 の狙い
85 件の発令記録 (2014-2021 の主要 6 災害) をイベント / 警戒レベル / 月 / 市町 / 法改正前後の
5 軸で多角度に集計し、「広島県の避難情報はいつ・どこで・どの警戒レベルで発令されているか」 を立体的に描く。
特に2021 年 5 月 20 日の災害対策基本法改正を境に、L3 高齢者等避難の運用が変わったかを定量比較。
手法 (前置き解説)
- JSON API パース:
requests で DoBoX 本体から取得 → json.load で
{"items": [...], "total": int} を読む。本日 0 件 = items 空。
- 再構成 CSV 生成: 公的資料に基づくレコードをタプルリストで定義し、pandas DataFrame 化。
日時列は
pd.to_datetime、警戒レベルは int、避難種別は str。
- 派生列計算: 発令時間_h (解除-発令)、年・月・年月、改正前後フラグ。
改正前後は 2021-05-20 を境に
np.where で 2 値化。
- 群集計:
value_counts + groupby で
イベント別・警戒レベル別・月別・市町別・年別の頻度を作成 → CSV 出力。
- クロス集計:
pd.crosstab(改正前後, 警戒レベル) で 2 次元集計し、
行ごとにシェア化して L3 増加を判定。
入出力の Before/After 例
| 段階 | 1 件のデータの中身 | 列数 |
| (0) 再構成タプル | ("2018-07-06 19:40", "広島市", "2018西日本豪雨", 4, "避難指示", 75000, "2018-07-09 08:00") | 7 |
| (1) DataFrame 化 | 同上 を 7 列の 1 行に | 7 |
| (2) 日時 to_datetime | 発令日時=Timestamp("2018-07-06 19:40") | +0 |
| (3) 発令時間_h 計算 | + 発令時間_h = 60.33 | +1 |
| (4) 年/月/年月 | + 年=2018, 月=7, 年月="2018-07" | +3 |
| (5) 改正前後 | + 改正前後 = "改正前" (2018 < 2021/5/20) | +1 |
| (6) 市町_集約 | + 市町_集約 = "広島市" (区別記載をロールアップ) | +1 |
| (7) groupby 集計 | イベント別 / 月別 / 市町別の件数表 | (別) |
| (8) crosstab | 改正前後 × 警戒レベル の 2 次元表 (2 行 × 3 列) | (別) |
(0)-(8) を全 85 行に適用 → groupby/crosstab で集計 → 図化。
実装コード (JSON 取得 + 再構成 CSV + 派生列 + 群集計)
↑ L62_evacuation_orders.py 行 1526–1622
1
2
3
4
5
6
7
8
9
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571 | # 1. DoBoX 本体: 避難情報 JSON 取得
import requests, json
r = requests.get("https://hiroshima-dobox.jp/resource_download/110",
headers={"User-Agent": "DoBoX-MDASH-textbook/1.0"}, timeout=60)
api_data = json.loads(r.content)
n_active = api_data.get("total", 0)
# api_data["items"] は発令中の配列 (本日 = 0 件)
print(f"本日の発令: {n_active} 件 = 平常時")
# 2. 再構成データセット (公的資料に基づく)
# (発令日時, 市町, イベント, 警戒レベル, 避難種別, 対象規模_人, 解除日時)
EVAC_RECORDS = [
("2014-08-20 04:15", "広島市安佐南区", "2014広島市土砂", 4, "避難指示", 5300, "2014-08-22 10:00"),
# ... (全 N 件)
("2018-07-06 19:40", "広島市", "2018西日本豪雨", 4, "避難指示", 75000, "2018-07-09 08:00"),
# ...
]
evac_df = pd.DataFrame(EVAC_RECORDS, columns=[
"発令日時", "市町", "イベント", "警戒レベル",
"避難種別", "対象規模_人", "解除日時"])
# 3. 派生列
evac_df["発令日時"] = pd.to_datetime(evac_df["発令日時"])
evac_df["解除日時"] = pd.to_datetime(evac_df["解除日時"])
evac_df["発令時間_h"] = (evac_df["解除日時"] - evac_df["発令日時"]).dt.total_seconds() / 3600
evac_df["年"] = evac_df["発令日時"].dt.year
evac_df["月"] = evac_df["発令日時"].dt.month
# 2021/5/20 災害対策基本法改正
evac_df["改正前後"] = np.where(evac_df["発令日時"] >= "2021-05-20", "改正後", "改正前")
# 4. 群集計
event_count = evac_df["イベント"].value_counts()
level_count = evac_df["警戒レベル"].value_counts().sort_index()
city_count = evac_df["市町"].value_counts()
# 5. 改正前後 × 警戒レベル クロス
era_level = pd.crosstab(evac_df["改正前後"], evac_df["警戒レベル"])
print(era_level)
# 6. L3 シェアの改正前後比較
n_l3_pre = ((evac_df["改正前後"] == "改正前") & (evac_df["警戒レベル"] == 3)).sum()
n_l3_post = ((evac_df["改正前後"] == "改正後") & (evac_df["警戒レベル"] == 3)).sum()
n_pre = (evac_df["改正前後"] == "改正前").sum()
n_post = (evac_df["改正前後"] == "改正後").sum()
print(f"改正前 L3 シェア: {n_l3_pre/n_pre*100:.1f}%")
print(f"改正後 L3 シェア: {n_l3_post/n_post*100:.1f}%")
|
図 1: なぜこの図か (RQ1)
「広島県のどの市町で何件発令されているか」 と「どのイベントが発令量を支配しているか」 を
1 枚で読みたい。左 choroplethは市町境界 polygon に発令件数で色分け、
右イベント別棒はイベント別合計でランキング。これで地理パターンと時系列イベントを同時可視化。
この図から読み取れること:
- 左 choropleth: 沿岸南部 (呉市・広島市・三原市・福山市)は発令件数が多く濃い赤。
これは (a) 大規模災害イベントの被災地域 が沿岸に集中していること、
(b) 人口が多い市町で発令対象人口が大きいこと、両方を反映。
- 左 choropleth: 北部 (庄原市・三次市・北広島町等)も中程度の濃度。
これは中山間部での豪雨災害発令の頻度を反映 (= RQ3 で per10k 化すると逆転する可能性)。
- 右イベント別棒: 2018 西日本豪雨 (28 件) が圧倒的、
次に2021 八月豪雨 (29 件)。
Top 2 で 67% = 偏在型分布。
- イベント別棒: 2014 広島市土砂 は (7 件) と少ない。
これは局所豪雨で広島市内に集中、他市町への発令が限定的だったため。
L61 で確認した「2014 局所 vs 2018 広域」 の対比が発令件数でも再現。
図 2: なぜこの図か (RQ1)
「警戒レベル別の発令割合」 と「2021 年 5 月の災害対策基本法改正前後でその割合がどう変わったか」 を
2 ペインで読みたい。左横棒は L1〜L5 別件数、右グループ棒は改正前後の警戒レベル分布の
シェアを並置 → L3 早期発令の文化が広まったかを定量化。
この図から読み取れること:
- 左横棒: L4 避難指示が最多 = 制度上最重要かつ住民への影響が大きい発令。
L3 高齢者等避難 (47 件、55%) は
災害切迫前の先行発令を表し、近年運用が拡大。
- 右グループ棒: 改正前 L3 シェア 48% → 改正後 69%
(増加)。
改正後は「高齢者等避難」 という新名称の運用が本格化し、対象市町も拡大。
- H2 (改正後 L3 ↑) 強支持:
観測 改正前 48% → 改正後 69%。
早期発令の文化が定着。
- L5 (緊急安全確保) は2018 西日本豪雨の坂町・呉市等の 2 件のみ。
L5 は災害発生または切迫時の最終警告で、運用は極めて限定的。
図 3: なぜこの図か (RQ1)
「梅雨〜台風シーズンへの集中度」 (左月別棒) と「年次推移 + 法改正タイミング」 (右年次棒) を
並べたい。月別は災害の季節性、年次は制度変化の時間軸を表現する。
この図から読み取れること:
- 左月別: 7-8 月で 93%。広島県の発令は梅雨末期 (7 月) と台風シーズン (8-9 月) に集中、
これは L61 で確認した過去災害の月別分布 (6-9 月で 73%) と整合する。
- 右年次: 2018 が突出 (34 件) 、次に 2021 (29 件) 、2014 (7 件) 。
2019 年 (台風 10 号のみ) と 2020 年 (七月豪雨) は中規模。
- 右年次の緑点線 = 法改正 (2021/5/20): これ以降の年は警戒レベル制で運用、改正前は
旧称 (避難勧告等) を使用していたが本研究では現行名称に統一。
- 2018 西日本豪雨の歴史的意義: この 1 イベントだけで全 85 件のうち
28 件 = 33% を占める。
これは広島県の避難情報運用にとって最大の歴史的事件であり、その後の制度改正
(= 2021 警戒レベル本格運用) の引き金となった。
表: 全体サマリ (3 RQ 統合, 20 指標)
| 指標 |
値 |
| DoBoX 本日件数 |
0 件 (= 平常時) |
| 再構成総数 |
85 件 |
| 対象イベント |
6 種類 |
| 対象市町 |
24 (うち広島区別記載含む) |
| Top 2 イベント |
2021八月豪雨 (29) + 2018西日本豪雨 (28) = 57 (67.1%) |
| L4 (避難指示) 件数 |
36 |
| L3 (高齢者等避難) 件数 |
47 |
| L5 (緊急安全確保) 件数 |
2 |
| 法改正前 L3 シェア |
48.2% (27/56) |
| 法改正後 L3 シェア |
69.0% (20/29) |
| 月集中度 (7-8 月) |
79 / 85 = 92.9% |
| 対象人数 合計 |
2,263,600 人 (延べ) |
| 2018 西日本豪雨 件数 |
28 |
| 2018 警報前発令市町 |
14 / 20 |
| 2018 L4 中央タイムラグ |
+0.1 h (警報後) |
| 2018 L3 中央タイムラグ |
-26.7 h (警報前) |
| L3→L4 切替 中央 |
26.8 h |
| per10k 上位 3 平均 |
1.75 |
| per10k 下位 3 平均 |
0.17 |
| per10k 上位/下位 比 |
10.3 倍 |
この表から読み取れること: 全 85 件の核心指標を 20 行に集約。二大災害シェア 67.1%、改正前後 L3 シェア変化 (48%→69%)、per10k 上位/下位比 10.3 倍 — 3 RQ の主結論を要約。
表: イベント別ランキング
| イベント |
発令件数 |
シェア_% |
対象人数_合計 |
| 2021八月豪雨 |
29 |
34.12 |
671000 |
| 2018西日本豪雨 |
28 |
32.94 |
1095000 |
| 2020七月豪雨 |
10 |
11.76 |
291000 |
| 2014広島市土砂 |
7 |
8.24 |
26100 |
| 2018台風21号 |
6 |
7.06 |
109500 |
| 2019台風10号 |
5 |
5.88 |
71000 |
この表から読み取れること: 主要 6 イベントのランキング。2018 西日本豪雨が首位、対象人数合計でも最大級 = 広島県史上最大の発令イベント。次に近年の 2020/2021 豪雨が続く = 制度運用の蓄積が見える。
表: 警戒レベル別件数
| 警戒レベル |
件数 |
警戒レベル名 |
シェア_% |
| 3 |
47 |
L3 高齢者等避難 |
55.29 |
| 4 |
36 |
L4 避難指示 |
42.35 |
| 5 |
2 |
L5 緊急安全確保 |
2.35 |
この表から読み取れること: L4 避難指示が最多、次に L3 高齢者等避難。L5 緊急安全確保は 2 件のみ = 制度上の最終警告は極めて限定的運用。L1/L2 は気象庁発表で県市町は発令しないため本データに含まれない。
表: 月別分布
| 月 |
件数 |
シェア_% |
| 1 |
0 |
0.00 |
| 2 |
0 |
0.00 |
| 3 |
0 |
0.00 |
| 4 |
0 |
0.00 |
| 5 |
0 |
0.00 |
| 6 |
0 |
0.00 |
| 7 |
38 |
44.71 |
| 8 |
41 |
48.24 |
| 9 |
6 |
7.06 |
| 10 |
0 |
0.00 |
| 11 |
0 |
0.00 |
| 12 |
0 |
0.00 |
この表から読み取れること: 7 月単月で 38 件と最多 (梅雨末期豪雨)。7-8 月で 79/85 = 93%。L61 で確認した過去災害の月別分布と整合する季節性。
表: 市町別ランキング Top 15 (発令件数)
| 市町 |
発令件数 |
対象人数_合計 |
シェア_% |
| 呉市 |
9 |
462000 |
10.59 |
| 東広島市 |
8 |
275600 |
9.41 |
| 広島市 |
8 |
558000 |
9.41 |
| 尾道市 |
6 |
130500 |
7.06 |
| 福山市 |
6 |
282000 |
7.06 |
| 三次市 |
5 |
85500 |
5.88 |
| 庄原市 |
5 |
59000 |
5.88 |
| 三原市 |
4 |
140000 |
4.71 |
| 府中市 |
3 |
30000 |
3.53 |
| 坂町 |
3 |
26900 |
3.53 |
| 江田島市 |
3 |
19500 |
3.53 |
| 廿日市市 |
3 |
54000 |
3.53 |
| 大竹市 |
2 |
10700 |
2.35 |
| 竹原市 |
2 |
17800 |
2.35 |
| 広島市安佐南区 |
2 |
13300 |
2.35 |
この表から読み取れること: 沿岸南部の主要都市が上位、対象人数合計で評価すると広島市が圧倒的。中山間市町 (北広島町・世羅町等) も件数では中位だが per10k では上位 (RQ3 で確認)。
表: 法改正前後 × 警戒レベル クロス
| 警戒レベル |
改正前後 \ 警戒レベル |
3 |
4 |
5 |
|
改正前 |
27 |
27 |
2 |
|
改正後 |
20 |
9 |
0 |
この表から読み取れること: 2021/5/20 災害対策基本法改正前後で L3 シェアが 48% → 69%「増」、L4 シェアが補完的に変化。警戒レベル運用本格化の効果が定量化される。
【RQ2】 2018 西日本豪雨の発令タイミング — 警報前発令 14/20 市町
RQ2 の狙い
2018 西日本豪雨 (28 件) において、各市町が大雨特別警報発表時刻 (2018-07-06 19:40) に対して
いつ・どの警戒レベルで・どの規模で 避難情報を発令したかを空間統計化する。
- 警報相対タイムラグ: 警報時刻 - 発令時刻 (h)。正値 = 警報後発令、
負値 = 警報前発令 (= 先行避難)。
- L3→L4 切替時間: 同一市町の L3 から L4 への移行時間。短いほど切替判断が速い。
- 市町別タイムライン: 各市町の初発令時刻と最終発令時刻 → 警戒姿勢の比較。
手法 (前置き解説)
- 基準時刻の設定: 気象庁公報「2018 年 7 月 6 日 19 時 40 分 大雨特別警報 (広島県)」 を
WARN_TIME = pd.Timestamp("2018-07-06 19:40") として固定。
- タイムラグ計算: 各発令の
(発令日時 - WARN_TIME).total_seconds() / 3600
で h 単位の符号付き値を得る。
- 警戒レベル別グルーピング:
groupby("警戒レベル").agg(["count", "min", "median", "max"])
で各レベルの分布統計を計算。
- L3→L4 ピボット:
pivot_table(index="市町", columns="警戒レベル", values="発令日時", aggfunc="first")
で同一市町の L3 と L4 を横並びに → 切替時間を引き算。
- 市町別 choropleth: 初発令タイムラグを RdYlGn_r カラーで色分け
(緑 = 警報前 / 赤 = 警報後)。
入出力の Before/After 例 (1 市町分)
| 段階 | 市町: 広島市の場合 |
| (0) L3 発令 | 2018-07-05 16:00, L3 高齢者等避難, 200,000 人 |
| (1) L4 発令 | 2018-07-06 19:40, L4 避難指示, 75,000 人 |
| (2) L3 警報相対 h | (2018-07-05 16:00 - 2018-07-06 19:40) = -27.7 h (= 警報前 27.7h) |
| (3) L4 警報相対 h | 0.0 h (= 警報と同時刻発令) |
| (4) L3→L4 切替 | (2018-07-06 19:40 - 2018-07-05 16:00) = 27.7 h |
実装コード (タイムラグ + L3→L4 切替 + 市町別タイムライン)
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 | # 1. 大雨特別警報発表時刻 (気象庁公報, 広島県全域)
WARN_TIME = pd.Timestamp("2018-07-06 19:40")
# 2. 2018 のレコード抽出
evac_2018 = evac_df[evac_df["イベント"] == "2018西日本豪雨"].copy()
# 3. 警報相対 h 計算
evac_2018["警報相対_h"] = (evac_2018["発令日時"] - WARN_TIME).dt.total_seconds() / 3600
evac_2018["警報前後"] = np.where(evac_2018["警報相対_h"] < 0, "警報前", "警報後")
# 4. 警戒レベル別タイムラグサマリ
lag_summary = evac_2018.groupby("警戒レベル")["警報相対_h"].agg(
["count", "min", "median", "max"]
).round(2)
print(lag_summary)
# 5. L3→L4 切替時間 (市町別)
city_l3l4 = evac_2018[evac_2018["警戒レベル"].isin([3, 4])].pivot_table(
index="市町", columns="警戒レベル", values="発令日時", aggfunc="first"
).dropna()
city_l3l4["L3→L4切替_h"] = (city_l3l4[4] - city_l3l4[3]).dt.total_seconds() / 3600
print(city_l3l4["L3→L4切替_h"].describe())
# 6. 警報前発令市町の数
city_first = evac_2018.groupby("市町")["警報相対_h"].min()
n_pre_warn = (city_first < 0).sum()
print(f"警報前に初発令した市町: {n_pre_warn} / {city_first.count()}")
|
図 4: なぜこの図か (RQ2)
「2018 西日本豪雨で各市町がいつ初発令したか」 と「各市町×警戒レベルの全タイムライン」 を
2 ペインで対比したい。左 choroplethは市町境界に初発令の警報相対時刻で色分け
(緑=警報前 / 赤=警報後)、右散布は横軸=警報相対 h、縦軸=市町、色=警戒レベルで
タイムラインそのものを 1 図に描く。
この図から読み取れること:
- 左 choropleth: 多くの市町は緑 (= 警報前発令)。これは L3 高齢者等避難を
警報の数時間〜1 日前に発令する先行避難文化が広島県に定着している証拠。
- 左 choropleth: 一部市町 (中山間北部) は赤寄り = 警報後発令。これは情報伝達の遅延または
意思決定の慎重さを反映する可能性。
- 右タイムライン: L3 (黄) は警報前 (左側)、L4 (赤) は警報直前〜直後に集中。
L5 (緊急安全確保) は警報の数時間後 = 状況悪化に応じた段階的発令。
- 右タイムライン: 警報後発令市町 = 6 / 20、
警報前発令市町 = 14 / 20。
警報前発令率 70% = 早期警戒の意思決定文化を定量化。
図 5: なぜこの図か (RQ2)
「警戒レベル別タイムラグの分布の形」 (左箱ひげ) と「同一市町の L3→L4 切替判断速度」 (右棒) を
並べたい。箱ひげは中央値・IQR・外れ値で分布の歪度を見せ、L3→L4 切替時間は
市町ごとの状況把握の速さを比較する。
この図から読み取れること:
- 左箱ひげ: L3 中央 -26.7h = 警報前約 1 日に発令。
L4 中央 +0.1h = 警報とほぼ同時刻。
L3 と L4 の中央差 = 26.8h
≈ L3 から L4 への切替判断にかかる時間。
- 左箱ひげ: L3 の下ヒゲ (最早) = 警報前 -27.7h ≈ 1 日以上前。
早期警戒の極端な例 = 慎重派市町。
- 右 L3→L4 切替: 緑 (≥24h) = 1 日かけて状況確認、赤 (<12h) = 急速悪化判断。
中央 26.8h。市町の地理 (中山間 vs 沿岸) で切替速度が変わるか
L3 切替時間と地形特性の対応は政策研究の興味深い課題。
- H3 (L4 タイムラグ ≥ 0h) 強支持:
観測 L4 中央 +0.1h。
警報後発令型 = 警報をトリガにした慎重判断。
L3 (-26.7h) との対比で「L3 警報前 / L4 警報後」の運用パターンが見える。
表: 2018 警戒レベル別タイムラグサマリ
| 警戒レベル |
警戒レベル名 |
件数 |
最早_h |
中央_h |
最遅_h |
| 3 |
L3 高齢者等避難 |
6 |
-27.67 |
-26.67 |
-25.67 |
| 4 |
L4 避難指示 |
20 |
-3.17 |
0.08 |
2.83 |
| 5 |
L5 緊急安全確保 |
2 |
7.33 |
7.83 |
8.33 |
この表から読み取れること: L3 中央 -26.7h (警報前) vs L4 中央 +0.1h (警報後) = L3 警報前発令 / L4 警報後発令のパターンが明確。L4 の最早値 -3.2h は警報前発令を行った市町の早期判断、最遅値 2.8h は状況悪化に応じた追加発令。
表: 2018 市町別 タイムライン Top 15 (早発令順)
| 市町 |
発令件数 |
対象人数_合計 |
最大警戒レベル |
初発令時刻 |
最終発令時刻 |
警報相対_初h |
| 広島市 |
2 |
275000 |
4 |
07-05 16:00 |
07-06 19:40 |
-27.7 |
| 東広島市 |
2 |
130000 |
4 |
07-05 16:30 |
07-06 19:50 |
-27.2 |
| 呉市 |
3 |
259000 |
5 |
07-05 17:00 |
07-07 03:00 |
-26.7 |
| 尾道市 |
2 |
77000 |
4 |
07-05 17:00 |
07-06 19:40 |
-26.7 |
| 三原市 |
2 |
93000 |
4 |
07-05 17:30 |
07-06 20:00 |
-26.2 |
| 福山市 |
2 |
155000 |
4 |
07-05 18:00 |
07-06 19:55 |
-25.7 |
| 坂町 |
2 |
18400 |
5 |
07-06 16:30 |
07-07 04:00 |
-3.2 |
| 府中町 |
1 |
4200 |
4 |
07-06 17:30 |
07-06 17:30 |
-2.2 |
| 竹原市 |
1 |
5800 |
4 |
07-06 18:00 |
07-06 18:00 |
-1.7 |
| 江田島市 |
1 |
5500 |
4 |
07-06 18:00 |
07-06 18:00 |
-1.7 |
| 大竹市 |
1 |
3200 |
4 |
07-06 18:30 |
07-06 18:30 |
-1.2 |
| 海田町 |
1 |
3500 |
4 |
07-06 18:30 |
07-06 18:30 |
-1.2 |
| 熊野町 |
1 |
6800 |
4 |
07-06 19:00 |
07-06 19:00 |
-0.7 |
| 廿日市市 |
1 |
18000 |
4 |
07-06 19:00 |
07-06 19:00 |
-0.7 |
| 庄原市 |
1 |
8000 |
4 |
07-06 21:00 |
07-06 21:00 |
1.3 |
この表から読み取れること: 初発令時刻が早い市町は警戒姿勢が進取的。警報相対 -27h 等の負値が多数 = 警報前 1 日以上前から L3 を発令する慎重派。市町間で初発令タイミングに大きな差。
【RQ3】 人口対比の発令頻度 — per10k 上位/下位 10.3 倍差
RQ3 の狙い
L22 既扱の市町別人口 (R2 国勢調査) を母数とし、per 10,000 発令件数で各市町の
警戒姿勢を空間統計化する。これにより:
- 「都市部 vs 中山間部」の per10k 差を地理区分別に集計 (= H4 検証)
- 「過剰発令型 vs 過小発令型」を全体平均 ±1σ で分類し、市町を 3 群に区分
- per10k 上位 / 下位の地理パターンと高齢化率との相関を検証
これは単なる「市町別件数の集計」 ではなく、人口正規化された警戒姿勢指標を
全 20 市町について比較し、警戒文化の地理パターンを抽出する研究。
手法 (前置き解説)
- 市町ロールアップ: 「広島市安佐南区」 等の区別記載を「広島市」 にロールアップして集計。
L22 では広島市が 1 行に集約済みなので結合が容易。
- per 10,000 計算:
発令件数 / 人口 × 10000。
人口大の都市部は分母大で per10k が小さくなる傾向。
- 地理区分: 人口密度を 3 区分 (都市部 ≥ 1,000/km² / 中間 200-1,000 / 中山間 < 200)。
これは農業統計でよく使われる人口密度ベースの区分。
- 過剰/過小発令型の判定:
pd.cut(per_10k, bins=[-inf, 平均-1σ, 平均+1σ, inf], labels=...)。
「過剰」 = 政策評価ではなく統計上の偏差であることに注意。
- 高齢化率との相関:
pd.Series.corr で per10k と aging_rate (L22 既値) のピアソン相関。
入出力の Before/After 例 (1 市町分)
| 段階 | 例: 広島市 |
| (0) 区別 raw | 広島市安佐南区 (3 件), 広島市安佐北区 (2 件), ... → 広島市計 N 件 |
| (1) ロールアップ | 市町_集約 = "広島市" (区を統合) |
| (2) 群集計 | 発令件数 = N, L4以上件数 = M, 対象人数_合計 = X 人 |
| (3) L22 結合 | + pop_total = 1,200,754, area_km2 = 906.7, density = 1,324 |
| (4) per10k | + per_10k = N / pop_total × 10000 |
| (5) 地理区分 | + density 1,324/km² → 「都市部」 |
| (6) 発令傾向 | + per_10k vs 平均±1σ → 「標準型」 |
実装コード (市町ロールアップ + L22 結合 + per10k + 地理区分)
↑ L62_evacuation_orders.py 行 1795–1897
1
2
3
4
5
6
7
8
9
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843 | # 1. 区別記載のロールアップ
def rollup_to_city(s):
if isinstance(s, str) and s.startswith("広島市"):
return "広島市"
return s
evac_df["市町_集約"] = evac_df["市町"].apply(rollup_to_city)
# 2. 市町集計
city_agg = evac_df.groupby("市町_集約").agg(
発令件数=("警戒レベル", "count"),
対象人数_合計=("対象規模_人", "sum"),
L4以上件数=("警戒レベル", lambda s: (s >= 4).sum()),
L3件数=("警戒レベル", lambda s: (s == 3).sum()),
).reset_index().rename(columns={"市町_集約": "city"})
# 3. L22 既扱の人口データと結合
pop_df = pd.read_csv("lessons/assets/L22_city_summary.csv", encoding="utf-8-sig")
merged = pd.merge(pop_df[["city", "pop_total", "area_km2",
"density_per_km2", "aging_rate", "ctype"]],
city_agg, on="city", how="left").fillna({
"発令件数": 0, "対象人数_合計": 0,
"L4以上件数": 0, "L3件数": 0,
})
# 4. per 10,000 計算
merged["人口万人"] = merged["pop_total"] / 10000
merged["per_10k"] = (merged["発令件数"] / merged["pop_total"] * 10000).round(3)
# 5. 地理区分 (人口密度ベース)
def classify_geo(row):
if row["density_per_km2"] >= 1000: return "都市部"
if row["density_per_km2"] >= 200: return "中間地域"
return "中山間部"
merged["地理区分"] = merged.apply(classify_geo, axis=1)
# 6. 過剰/過小発令型 (平均 ± 1σ で 3 区分)
mean_per10k = merged["per_10k"].mean()
std_per10k = merged["per_10k"].std()
merged["発令傾向"] = pd.cut(
merged["per_10k"],
bins=[-np.inf, mean_per10k - std_per10k, mean_per10k + std_per10k, np.inf],
labels=["過小発令型", "標準型", "過剰発令型"]
)
print(merged.sort_values("per_10k", ascending=False).head())
# 7. 高齢化率との相関
print(f"高齢化率 × per10k の相関 = {merged['aging_rate'].corr(merged['per_10k']):.3f}")
|
図 6: なぜこの図か (RQ3)
「per10k がどう地理分布しているか」 (左 choropleth) と「人口規模 vs per10k の散布」 (右散布)
を 1 ペアで読みたい。左は地理パターンを YlOrRd カラー、
右は人口対 per10k の散布で人口大都市部 vs 人口少中山間部の対比を見せる。
この図から読み取れること:
- 左 choropleth: 濃い赤 (per10k 高) は中山間市町 (庄原市・三次市・北広島町・世羅町等)。
淡い色 (per10k 低) は人口大都市 (広島市・福山市・東広島市)。
地理的に「人口少 = per10k 高」の傾向が顕著。
- 右散布: 横軸 (人口 log) と縦軸 (per10k) の負の関係が明確。
都市部 (青) は左下、中山間部 (赤) は右上に分布する逆比例パターン。
- 右散布の中山間部の高 per10k 市町: 庄原市・三次市等は per10k が 5+。
これらの市町は人口は少ないが土砂災害ハザード大のため、人口当たり発令件数が高い。
- 右散布の都市部の低 per10k 市町: 広島市・福山市は per10k が 1 未満。
人口分母が大きく、発令件数が同等でも per10k は小さくなる「分母効果」。
- H4 (中山間 >> 都市部) 強支持:
観測 中山間 0.99
vs 都市部 0.39
= 2.5 倍差 = 中山間市町の発令頻度の高さを実証。
図 7: なぜこの図か (RQ3)
「per10k 上位/下位の市町ランキング」 と「地理区分別の集計」 を 2 ペインで読みたい。
左横棒は Top 10 + Bottom 10 を縦並べ (赤=上位 / 青=下位)、
右二軸棒は地理区分別の per10k 平均と発令件数合計を並置。
この図から読み取れること:
- 左ランキング: per10k 上位 (赤) は中山間町 = 庄原市・三次市・世羅町・安芸高田市等。
下位 (青) は人口大都市 = 広島市・福山市・東広島市等。
これは人口分母の効果と中山間部のハザード集中の合算。
- 左ランキング: 上位 3 平均 vs 下位 3 平均 = 10.3 倍差。
H5 (≥10 倍) 強支持。
- 右二軸: 左軸 (赤棒) per10k 平均は中山間部が圧倒的に高い。
右軸 (青棒) 発令件数合計は都市部が高い (= 人口大ゆえ発令対象人数も大)。
per10k と発令件数の方向が異なる = 評価視点で結論が変わる重要な
統計上の注意点。
- 「過剰発令型」 「過小発令型」 の解釈注意: ここでの「過剰」 は政策評価ではなく
統計上の偏差。中山間市町の per10k が高いのは「ハザード密度に対応した適切な
発令」であり、過剰発令というラベルは政策的に誤解を招く可能性がある。
この用語は統計概念としてのみ使用すべき。
図 8: なぜこの図か (RQ3)
「高齢化率と per10k の関係」 (左散布) と「過剰/過小発令型の地理分布」 (右 choropleth) を
並べたい。左散布はバブル散布 (バブル径 = 人口) で高齢化と発令頻度の相関を、
右 choroplethは発令傾向 3 区分の地理パターンを描く。
この図から読み取れること:
- 左散布の相関 r = 0.43:
高齢化率 ↑ と per10k ↑ が同方向 = 高齢化が進んだ市町ほど発令頻度が高い (相関は中山間部の地理特性経由の交絡)。
バブルの大きさ (= 人口) を見ると、左下 = 大都市・低高齢化・低 per10k、
右上 = 中山間町・高高齢化・高 per10kのクラスタが明確。
- 右 choropleth の過剰発令型 (赤): 中山間部の小規模市町に集中。
過小発令型 (青): 大都市部 (広島市・福山市)。
標準型 (黄): 中間地域や周辺市町。
- 政策的含意: per10k は人口正規化された警戒姿勢指標として有用だが、
単独で使うと「過小発令の都市部」を誤って批判する可能性。
per10k と絶対件数を併用することで、市町の多様な災害リスク構造を理解できる。
- L03 / L61 との連携可能性: per10k 高市町は L03 避難所容量との比較で
「発令対象人数 vs 避難所収容能力」の過密問題が見える可能性。
L61 の過去災害との比較で「発令頻度 vs 実発生頻度」の整合も研究可能。
表: 市町別 per10k Top 15
| city |
ctype |
pop_total |
発令件数 |
L4以上件数 |
per_10k |
対象人数比率_% |
発令傾向 |
| 坂町 |
町 |
12582 |
3 |
2 |
2.384 |
213.8 |
過剰発令型 |
| 庄原市 |
市 |
33633 |
5 |
3 |
1.487 |
175.4 |
過剰発令型 |
| 江田島市 |
市 |
21930 |
3 |
1 |
1.368 |
88.9 |
過剰発令型 |
| 世羅町 |
町 |
15125 |
2 |
1 |
1.322 |
59.5 |
標準型 |
| 北広島町 |
町 |
17763 |
2 |
1 |
1.126 |
65.3 |
標準型 |
| 三次市 |
市 |
50681 |
5 |
3 |
0.987 |
168.7 |
標準型 |
| 熊野町 |
町 |
22834 |
2 |
1 |
0.876 |
71.4 |
標準型 |
| 竹原市 |
市 |
23993 |
2 |
1 |
0.834 |
74.2 |
標準型 |
| 府中市 |
市 |
37655 |
3 |
2 |
0.797 |
79.7 |
標準型 |
| 大竹市 |
市 |
26319 |
2 |
1 |
0.760 |
40.7 |
標準型 |
| 安芸高田市 |
市 |
26448 |
2 |
1 |
0.756 |
81.3 |
標準型 |
| 海田町 |
町 |
29636 |
2 |
1 |
0.675 |
40.5 |
標準型 |
| 尾道市 |
市 |
131170 |
6 |
2 |
0.457 |
99.5 |
標準型 |
| 三原市 |
市 |
90573 |
4 |
2 |
0.442 |
154.6 |
標準型 |
| 呉市 |
中核市 |
214592 |
9 |
4 |
0.419 |
215.3 |
標準型 |
この表から読み取れること: 上位は中山間市町 (庄原・三次・北広島町等) = 人口少 + ハザード集中の構造。下位は人口大都市 (広島市・福山市) = 人口分母効果。per10k と発令件数 (絶対値) の方向が逆になる重要な統計指標。
表: 地理区分別比較
| 地理区分 |
市町数 |
人口合計万人 |
発令件数_合計 |
per10k_平均 |
| 中山間部 |
7 |
27.19 |
23 |
0.99 |
| 中間地域 |
10 |
122.51 |
44 |
0.79 |
| 都市部 |
3 |
128.15 |
18 |
0.39 |
この表から読み取れること: 都市部 vs 中間 vs 中山間の per10k 平均差が10.3 倍。発令件数合計では都市部が高い (人口大ゆえ) という逆方向の指標。多角的視点で評価する必要を示す。
仮説検証総合
本記事の 5 仮説と観測結果の照合:
| 仮説 |
観測値 |
判定 |
解釈 |
| H1 二大災害集中 (Top 2 ≥ 50%) |
観測 Top 2 = 57/85 (67.1%) |
強支持 |
H1 強支持: 2018 西日本豪雨 + 2014/2021 等の主要 2 イベントが 発令件数の 67.1% を占める。過半数を支配する強い偏在。 |
| H2 法改正後の L3 シェア増 (post > pre) |
観測 改正前 48% → 改正後 69% |
強支持 |
H2 強支持: 警戒レベル運用本格化 (2021/5/20 改正) 後、L3 高齢者等避難のシェアが 48% から 69% へ 増加 = 早期発令の文化が広まったことを定量化 |
| H3 2018 L4 タイムラグ ≥ 0h (警報後発令) |
観測 L4 中央タイムラグ = +0.1h (警報前発令市町 8/20) |
強支持 |
H3 強支持: 2018 L4 (避難指示) の中央タイムラグは +0.1h。警報後発令型 = 警報を受けて発令する判断パターン。L3 (高齢者等避難) は中央 -26.7h = L4 より平均 26.8h 早く発令 |
| H4 中山間 >> 都市部 (per10k) |
観測 中山間 0.99 vs 都市部 0.39 |
強支持 |
H4 強支持: 中山間部の人口当たり発令頻度が都市部より高い ↑ 人口少 + ハザード大の中山間市町は発令頻度が高い |
| H5 上位/下位比 ≥ 10 倍 |
観測 比 = 10.3 倍 |
強支持 |
H5 強支持: per10k 上位 3 平均 (1.75) vs 下位 3 平均 (0.17) = 10.3 倍。10 倍超で強支持 — 市町間の警戒姿勢の地理的差異が空間統計で実証 |
3 RQ × 3 結論
- RQ1 結論: 広島県の避難情報発令 85 件 (2014-2021) は 2018 西日本豪雨単独で 33% を占める偏在型分布。7-8 月で 93% = 梅雨末期 + 台風シーズンの季節性が支配。2021/5/20 の災害対策基本法改正後、L3 高齢者等避難のシェアが 48% → 69% へ増加し早期発令文化が定着。L4 避難指示が制度上最重要だが、L3 が先行発令として「警戒レベル運用」 の中核を担う。
- RQ2 結論: 2018 西日本豪雨では大雨特別警報 (2018-07-06 19:40) 発表前に 14/20 市町が初発令済み。L3 中央タイムラグ -26.7h vs L4 中央 +0.1h = L3 警報前 / L4 警報後の運用パターンが空間統計で実証。L3→L4 切替は中央 26.8h = 各市町が状況悪化に応じて段階的に警戒レベルを引き上げ。「警報を待つ vs 先行する」の意思決定文化の地理パターンが初めて定量化された。
- RQ3 結論: per10k (人口当たり発令件数) は中山間市町 >> 都市部の構造的偏在。上位 3 平均 (1.75) vs 下位 3 平均 (0.17) = 10.3 倍差。これは人口分母効果 + 中山間部のハザード密度の合算で、「過剰発令」 「過小発令」 という用語は統計概念としてのみ使用すべき (政策評価ではない)。高齢化率との相関 r = 0.43 = 高齢化が進んだ市町ほど per10k 高 (中山間特性経由)。市町別 per10k は警戒姿勢の指標として有用だが、絶対件数と併用して評価すべき。
制度史的位置付け
本データ (#41) は「災害発生 → 警戒区域指定 → 避難情報発令 → 災害発生」の サイクル構造のうち「発令」側を扱う。L10/L11 が未来予測 (警戒区域)側、L46/L56-L58 が制度・施設投資側、L61 が過去の発生事実側を扱ったのに対し、L62 は意思決定の発令タイムラインを扱う。これにより場所 (L03) + 事実 (L61) + 発令 (L62) の防災 3 系統が完結。
本研究の重要発見は「警報前発令市町 14/20」 (70%) と「per10k 上位/下位 10.3 倍差」。前者は早期警戒の意思決定文化を、後者は市町間の警戒姿勢差を初めて定量化した。これらは防災行政の「警戒文化のクロス市町評価」 という新たな研究テーマを開く。
発展課題
結果 X → 新仮説 Y → 課題 Z (3 RQ × 1 課題以上)
発展課題 1 (RQ1 由来): リアルタイム監視 cron 運用 → 履歴アーカイブの自動構築
- 結果 X: DoBoX dataset 41 はリアルタイム API で歴史アーカイブ非保持。
平常時は items 空、災害発令中のみ内容が出現する。本記事は再構成 CSV で代替したが、
本物の history を自動収集することは未着手。
- 新仮説 Y: cron で 1 時間毎に API を pollingし、items が空でないタイムスタンプを
永続化すれば、数年で本物の発令履歴アーカイブが構築できる。これにより本記事の
再構成 CSV を実データで置換可能。
- 課題 Z: AWS Lambda + DynamoDB / Linux cron + SQLite で 1 時間毎 polling →
JSON 差分検知 → 永続化。API レート制限とストレージ設計 (発令×解除のペアリング) が
設計課題。L00 (DoBoX 全体) との連携で全 dataset の polling フレームワーク化も可能。
発展課題 2 (RQ1 由来): 警戒レベル本格運用前後の運用文化変化の市町別差
- 結果 X: 2021/5/20 の災害対策基本法改正後、L3 シェアが
48% → 69% に
増加。本記事は全市町集計だが、
市町別の改正前後変化は未検証。
- 新仮説 Y: 改正後の L3 シェア増加は市町間で大きくばらつく。
「迅速運用文化」 の市町は L3 シェアが大きく増加し、「保守的運用文化」 の市町は
改正前後でほとんど変化がない。これは「制度変更が市町文化を変えるかどうか」の
行政学研究テーマ。
- 課題 Z: 各市町×改正前後 × 警戒レベルのクロス → 市町別 ΔL3 シェアを計算。
市町を「変革派 / 保守派」 に分類し、地理パターン (沿岸 vs 内陸) や
首長交代との相関を検証。地方自治体の意思決定文化の地理学として展開。
発展課題 3 (RQ2 由来): 2018 タイムラグ × L61 過去災害発生時刻のクロス
- 結果 X: 2018 の各市町タイムラグは本研究で計算したが、
L61 (過去災害) の発生時刻と発令時刻の比較は未実施。
警戒情報は災害発生前に発令されるべきだが、現実には発令時には既に発生していた事例が
議論された (国会答弁等)。
- 新仮説 Y: 2018 西日本豪雨では発令時刻 - 発生時刻 = 負値 (= 発令前発生) の事例が
存在する。これは「警報前発令」 の進取的努力をしてもなお対応が間に合わなかった状況を示す。
市町別の「事前発令成功率」を空間統計化できる。
- 課題 Z: L61 の 2018 西日本豪雨 158 件の記録時刻 (タイトルから抽出) と
本記事の発令時刻を結合。各被災地点について最近接発令を時空間 sjoin で同定し、
Δt (発令 - 発生) の分布を計算。負値件数を集計し「事前発令間に合わず率」を市町別に可視化。
L61 + L62 の時空間統合として展開。
発展課題 4 (RQ3 由来): per10k と警戒区域カバー率 (L11)のクロス
- 結果 X: per10k は人口正規化された警戒姿勢指標だが、市町のハザードリスク
(警戒区域面積) を考慮していない。中山間部の per10k 高は人口少だけでなく、
警戒区域面積も大きい可能性。
- 新仮説 Y: per10k は警戒区域面積比 (= ハザード密度)と強相関。
この交絡因子を統制すると、市町間の per10k 差は「市町文化」差ではなく
「ハザード密度」差に還元される可能性。
- 課題 Z: L11 の警戒区域 polygon と各市町の市町境界 polygon を sjoin →
面積比 (warn_area_km2 / area_km2) を計算。per10k vs 面積比の散布と OLS 回帰で
「ハザード密度を統制した市町警戒姿勢」を抽出。残差が市町文化指標。
L11 + L62 の制度ハザード統合として展開。
発展課題 5 (RQ3 拡張): 避難所容量 (L03) と発令対象人数の比較
- 結果 X: 2018 西日本豪雨で広島市は対象人数 75,000 人、東広島市 35,000 人など発令済み。
L03 避難所容量との比較は未実施。発令対象 >> 避難所容量なら避難所過密問題が浮上。
- 新仮説 Y: 大規模災害時の発令対象人数は避難所収容能力を上回る市町が存在する。
これは「全員が避難所に行けるとは想定していない」 災害計画の前提だが、
コミュニケーションの透明化が必要。
- 課題 Z: L03 の避難所 4,065 件の収容能力 (面積×収容率) を市町別合算 →
L62 の発令対象人数最大値と比較。比 (収容/対象) が 1 未満の市町を特定。
「避難所過密リスク市町」の地理パターンを抽出し、
L03 + L62 の制度容量統合研究として政策提言を行う。
発展課題 6 (展望): 気象データ (雨量) との時空間統合
- 結果 X: 本研究では大雨特別警報時刻のみを基準にしたが、
市町別累積雨量 (mm) と発令時刻の関係は未検証。
L05 (14 日豪雨) や L08 (PCA 雨量) のデータと結合すれば、
「雨量 mm 何 → 何時間後発令」の意思決定モデルが描ける。
- 新仮説 Y: 各市町は「累積雨量 X mm を超えると発令」の閾値を持つ。
閾値は市町ごとに異なり、低い市町は早期発令派、高い市町は慎重派。
閾値の地理パターンが警戒姿勢を直接表現する。
- 課題 Z: L05 から 2018-07-05〜08 の市町別 1 時間毎累積雨量を抽出 →
本研究の発令時刻と結合 → 各市町について発令時の累積雨量を求める。
市町別「発令閾値 mm」のヒストグラム + choropleth で可視化。
L05 + L62 の気象 - 制度統合として、意思決定の気象学を完成。