Lesson 31

観測情報 9 件統合分析 — 県の防災観測網 (rain/water/dam/tide/wind) の幾何構造

観測GISネットワークgeopandask-NN防災
所要 40 分 / 想定レベル: リテラシ / データ: DoBoX 観測情報 9 dataset (1274, 1275, 1276, 1437-1442)

データ取得手順

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

IDデータセット名
#222dataset #222
#444dataset #444
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#999dataset #999
#1274観測情報_観測所一覧
#1275観測情報_雨量日集計
#1276観測情報_雨量年集計
#1437観測情報_水位日集計
#1438観測情報_水位年集計
#1439観測情報_ダム日集計
#1440観測情報_ダム年集計
#1441観測情報_潮位日集計
#1442観測情報_風向風速日集計

実行コマンド:

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

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

学習目標と問い

カバー宣言: 本記事は DoBoX のシリーズ 「観測情報_*」9 件 (dataset_id = 1274, 1275, 1276, 1437, 1438, 1439, 1440, 1441, 1442) を統合し、 広島県内における防災観測網幾何構造を分析する研究記事です。

シリーズ構造判定: (b) パターン

このシリーズの 9 件は、L17/L24 のような「市町別の同一データ N 市町分」 ではなく、「マスタ 1 件 + 5 観測種類 × {日集計, 年集計} 8 件」 の 2 層構造です。本記事はマスタを主軸に、各時系列 dataset を構造として併置します。

独自用語の定義 (本記事内で固定)

用語定義
観測網広島県内に設置された 5 観測種類 (雨量・水位・ダム・潮位・風) の観測点の総体。 本記事では観測所マスタ (dsid=1274) に登録された 623 点 を観測網の現在の実体とする。
観測点 (観測所)緯度経度を持つ 1 個の物理計測サイト。1 つの観測所が複数の観測種類を持つ場合は、 マスタ上は「データ種別」ごとに別行として登録される (例: 「広島港」が潮位と風で 2 行)。
カバレッジ県土の任意点から、最も近い観測点までの距離。本記事では 1.5 km grid を県土全域に張って計測する。
観測空白カバレッジが 4.0 km 以上 の grid 点。本記事ではこの基準で空白を可視化する。 当初 8 km と仮置きしたが、実測で観測網が想定より遥かに密 (最大 10 km / 中央値 2 km) だったため、 「明らかな空白」と呼べる 4 km に下方修正した。仮説の修正自体が観測網理解の重要な一歩。
先行指標河川氾濫閾値 (はん濫注意・避難判断・はん濫危険) を保有する水位観測。 これらは「水位がこの値を超えたら警報を出す」運用ノードであり、災害発生に先行する情報を提供する。
所管二元性観測網が「県管理 (砂防課・河川課・河川課ダムG・農業基盤課・港湾漁港整備課)」と 「国管理 (国土交通省・国ダム・気象台・海上保安庁)」の2 主体で運用されている構造。

研究の問い (RQ)

広島県内の防災観測網は、観測種類別に何拠点配置され、地理的にどの流域・どの地域を カバーしているか? その配置パターンから、県の災害監視思想はどう読み取れるか?

  1. 5 観測種類 (雨量/水位/ダム/潮位/風) は何拠点ずつ、どの所管に配置され、地理的にどう分布するか?
  2. 観測点間距離から見た観測網の空間粒度空白地帯は?
  3. 水系・市町別の観測点密度はどれだけ偏っているか?
  4. 河川氾濫閾値を保有する観測所は、「先行指標」として機能できる場所にあるか?

仮説 H1〜H6

到達点

9 dataset_id を「マスタ 1 + 5 種類 × 2 粒度 = 9」の 2 層構造として読み解き、 634 観測所の地理分布・水系分布・閾値構造を統合した結果、 県の観測網が「降水と河川を最優先」「沿岸と山地を補完」という設計思想で 組まれていることを実データで裏付ける。

X06 との重複回避: X06 (雨量地理 small multiples) は14 日豪雨期間の雨量時系列値を空間×時間で 描き、特定イベントの降水動態を扱う記事です。本記事 L31 は観測網の構造そのもの (何拠点・どこ・どの所管・どの閾値) を扱い、時系列値の数値分析は意図的に行いません。 時系列ファイルは列構造の同型性カバー観測所の確認のみに使用します。

使用データ

本記事が使用する 9 dataset_id の一覧と役割。中央 1 件がマスタ、残り 8 件が時系列。

dsid役割観測種類粒度形式サイズ(KB)DoBoX
1274masterCSV154.6#1274
1275timeseries雨量dailyCSV1737.2#1275
1276timeseries雨量yearlyCSV623.2#1276
1437timeseries水位dailyCSV426.8#1437
1438timeseries水位yearlyCSV132.5#1438
1439timeseriesダムdailyCSV254.7#1439
1440timeseriesダムyearlyCSV77.4#1440
1441timeseries潮位dailyCSV116.0#1441
1442timeseries風向風速dailyCSV205.1#1442

シリーズ構造判定の根拠

判定: (b) 9 種類の異なる観測データ。理由は以下の表の通り、 9 件は明らかに「マスタ 1 + 5 種類 × 2 粒度」の機能分化型であり、 「9 市町分の同一データ」ではない。

マスタ 1274 が地理キー (緯度経度・水系・河川・市町・氾濫閾値) を持ち、
時系列 8 件 はそれぞれ観測所×時刻の wide 表。観測所名で結合可能

マスタ vs 時系列ファイル のカバレッジ

マスタの観測所と、各時系列ファイルが提供する観測所列を観測所名で照合。 基本的にマスタ⊇時系列だが、潮位・風など一部に非対称あり。詳細は分析 4 で図示。

kind kind_label n_master n_ts n_common_by_name n_only_master n_only_ts
rain 雨量 390 3 0 385 3
water 水位 181 178 178 1 0
dam ダム 18 18 18 0 0
tide 潮位 13 13 13 0 0
wind 風向風速 21 21 21 0 0

ダウンロード

生データ (DoBoX 直リンク)

中間データ (本記事生成 CSV)

図 (本記事生成 PNG)

再現用 Python スクリプト

L31_observation_network.py を取得して プロジェクトルートで py -X utf8 lessons/L31_observation_network.py を実行。 データが無ければ自動取得します。

分析 1: 9 dataset の構造を可視化

狙い

9 件の dataset がどう機能分化しているのかを 1 枚の絵で示す。 これは「カバー宣言」の構造図であり、後続の全分析の論理的下敷きとなる。

手法 (簡潔に)

各 dataset の (役割, 観測種類, 粒度) を抽出し、2 軸マトリクスに 配置する。 役割: master / timeseries。 粒度: master / daily / yearly。 さらにカード形式で件数 + dsid を視覚化する。

実装

L31_observation_network.py 行 1332–1374

 1
 2
 3
 4
 5
 6
 7
 8
 9
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
# 9 件: (dsid, 略称, 役割, kind, granularity, file)
SERIES = [
    (1274, "観測所一覧",      "master",     None,    None,     "stations_master.csv"),
    (1275, "雨量_日集計",     "timeseries", "rain",  "daily",  "rain_daily_sample.csv"),
    (1276, "雨量_年集計",     "timeseries", "rain",  "yearly", "rain_year_sample.csv"),
    (1437, "水位_日集計",     "timeseries", "water", "daily",  "water_daily_sample.csv"),
    (1438, "水位_年集計",     "timeseries", "water", "yearly", "water_year_sample.csv"),
    (1439, "ダム_日集計",     "timeseries", "dam",   "daily",  "dam_daily_sample.csv"),
    (1440, "ダム_年集計",     "timeseries", "dam",   "yearly", "dam_year_sample.csv"),
    (1441, "潮位_日集計",     "timeseries", "tide",  "daily",  "tide_daily_sample.csv"),
    (1442, "風向風速_日集計", "timeseries", "wind",  "daily",  "wind_daily_sample.csv"),
]
# 役割 × 粒度 のマトリクスに配置
matrix = pd.DataFrame(index=KIND_ORDER + ["master"], columns=["daily", "yearly", "master"])
for r in series_df.itertuples():
    if r.role == "master":
        matrix.loc["master", "master"] = r.dsid
    else:
        matrix.loc[r.kind, r.granularity] = r.dsid

図と読み取り

なぜこの図か: 9 つの dataset_id を「マスタと時系列」「日と年」のどちらかに分類することで、 シリーズの本来の構造 (機能分化型) が一望できる。表のままだと粒度の有無が読み取りにくい。

9 dataset_id の構造マトリクス (役割 × 粒度)
9 dataset_id の構造マトリクス (役割 × 粒度)
9 dataset カードビュー — 1 マスタ + 5 種類 × {日, 年}
9 dataset カードビュー — 1 マスタ + 5 種類 × {日, 年}

読み取り:

表と読み取り

dsid abbr role kind granularity file size_kb
1274 観測所一覧 master None None stations_master.csv 154.6
1275 雨量_日集計 timeseries rain daily rain_daily_sample.csv 1737.2
1276 雨量_年集計 timeseries rain yearly rain_year_sample.csv 623.2
1437 水位_日集計 timeseries water daily water_daily_sample.csv 426.8
1438 水位_年集計 timeseries water yearly water_year_sample.csv 132.5
1439 ダム_日集計 timeseries dam daily dam_daily_sample.csv 254.7
1440 ダム_年集計 timeseries dam yearly dam_year_sample.csv 77.4
1441 潮位_日集計 timeseries tide daily tide_daily_sample.csv 116.0
1442 風向風速_日集計 timeseries wind daily wind_daily_sample.csv 205.1

読み取り:

分析 2: 観測種類別の件数と所管

狙い

5 観測種類が何点ずつ配置され、誰が所管するかの全体像を確定する。 これが H1 (種別不均衡) と H2 (所管二元性) の検証の中核。

手法

マスタ (623 行) を「データ種別」(1=雨量/4=水位/7=ダム/12=潮位/13=風) と 「データ所管」 (砂防課・国土交通省など 9 種) でクロス集計。 所管は「県/国/その他」の 3 グループに集約する (定義は冒頭表を参照)。

実装

L31_observation_network.py 行 1391–1419

 1
 2
 3
 4
 5
 6
 7
 8
 9
1400
1401
1402
# データ種別 → 観測種類名
KIND_ID2NAME = {1: "rain", 4: "water", 7: "dam", 12: "tide", 13: "wind"}
master["kind"] = master["データ種別"].map(KIND_ID2NAME)

# 所管グループ
ORIGIN_GROUP = {"砂防課":"県", "河川課":"県", "国土交通省":"国", ...}
master["origin"] = master["データ所管"].map(ORIGIN_GROUP).fillna("その他")

# クロス集計
pv_kind_origin = pd.pivot_table(
    master, index="kind", columns="origin", values="観測所名",
    aggfunc="count", fill_value=0)

図と読み取り

なぜこの図か: 棒グラフ + スタックは「絶対数 + 構成比」を 1 セクションで示せる。 件数バー単独では所管の二元性が見えず、所管比単独では絶対数が見えない。

観測種類別件数 (左) と種別×所管スタック (右)
観測種類別件数 (左) と種別×所管スタック (右)

読み取り:

表と読み取り

kind kind_label n_stations pct
rain 雨量 390 62.60
water 水位 181 29.05
dam ダム 18 2.89
tide 潮位 13 2.09
wind 風向風速 21 3.37
origin データ所管 n
河川課 137
砂防課 132
国土交通省 109
河川課ダムG 57
気象台 53
国ダム 35
港湾漁港整備課 13
農業基盤課 9
海上保安庁・港湾漁港整備課 1

読み取り:

分析 3: 県全域マップで観測網を観る

狙い

件数だけでは観測網の地理偏在は見えない。同じ 401 点の雨量でも、 都市集中型と均等分散型では運用思想が違う。マップで 1 枚に重ねた俯瞰と、 種別ごとに分離した small multiples の 2 段で確認する。

手法

マスタの緯度経度を Shapely Point に変換し、EPSG:4326 → EPSG:6671 (平面直角 III) に投影。 広島県全域 polygon (L15 の dsid=922 を流用) を背景に重ねる。 種別ごとに色分けし、small multiples で 5 種を別パネルにも展開する。

実装

L31_observation_network.py 行 1446–1474

 1
 2
 3
 4
 5
 6
 7
 8
 9
1455
1456
1457
master_gdf = gpd.GeoDataFrame(
    master, geometry=gpd.points_from_xy(master["経度"], master["緯度"]),
    crs="EPSG:4326").to_crs("EPSG:6671")

g_admin_pref = load_zip_first_geo(ADMIN_DIR / "admin_922_広島県.zip").to_crs("EPSG:6671")
pref_diss = g_admin_pref.dissolve()  # 県境 1 ポリゴンに集約

fig, ax = plt.subplots(figsize=(11, 8))
pref_diss.boundary.plot(ax=ax, color="#222", linewidth=1.2)
for k in KIND_ORDER:
    sub = master_gdf[master_gdf["kind"] == k]
    sub.plot(ax=ax, color=KIND_COLOR[k], markersize=18, alpha=0.78)

図と読み取り

なぜこの図か: 観測網は地理的実体なので、地図化が最も直感的。 重ね地図で全体感、small multiples で個別パターンを見る。

県全域 観測網マップ (5 種カラー散布)
県全域 観測網マップ (5 種カラー散布)
種別 small multiples マップ — 種別ごとの偏在
種別 small multiples マップ — 種別ごとの偏在

読み取り:

分析 4: 水系・市町別の密度

狙い

「どこにどれだけ観測点があるか」を水系・市町の 2 視点で集計し、 H3 (主要 3 水系集中) を検証する。同時に観測網の偏りを可視化する。

手法

マスタを水系名・市町村名でグループ化し、種別を列としてピボット。 上位 12 水系 / 上位 15 市町を横棒スタックで比較。

実装

L31_observation_network.py 行 1489–1504

1489
1490
1491
1492
1493
pv_water = pd.pivot_table(
    master_gdf, index="水系名", columns="kind",
    values="観測所名", aggfunc="count", fill_value=0)
pv_water["合計"] = pv_water.sum(axis=1)
pv_water = pv_water.sort_values("合計", ascending=False)

図と読み取り

なぜこの図か: 水系密度と市町密度は、観測網が「自然単位 (水系) の地理」「行政単位 (市町) の地理」のどちらに沿って配置されているかを示す。 両方を並べることで「水系優先 vs 行政優先」の軸を読み取れる。

水系別観測網密度 (上位 12 水系)
水系別観測網密度 (上位 12 水系)

読み取り (水系):

市町別観測網密度 (上位 15 市町)
市町別観測網密度 (上位 15 市町)

読み取り (市町):

表と読み取り (水系 上位 10)

kind rain water dam tide wind 合計
水系名
江の川 74 39 3 0 4 120
太田川 72 35 1 0 3 111
芦田川 33 46 6 0 2 87
未分類 77 0 0 0 0 77
その他 52 2 0 0 4 58
沼田川 17 13 2 0 1 33
小瀬川 13 8 2 0 1 24
黒瀬川 9 7 0 0 1 17
八幡川 8 6 2 0 0 16
中国その他 0 0 0 13 2 15

読み取り: 太田川・江の川・芦田川の 3 水系の「雨量:水位 比」を比較する (下表)。 H3 で予想した「雨量:水位 ≈ 2:1〜3:1」を概ね支持する。

水系 雨量 水位 雨量:水位
太田川 72 35 2.06
江の川 74 39 1.90
芦田川 33 46 0.72

表と読み取り (市町 上位 10)

kind rain water dam tide wind 合計
市町村名
未分類 77 0 0 0 0 77
福山市 18 36 1 2 1 58
三次市 22 19 1 0 1 43
庄原市 27 9 1 0 2 39
呉市 27 5 1 3 2 38
東広島市 20 12 2 0 1 35
広島市安佐北区 16 16 0 0 1 33
廿日市市 25 5 1 0 1 32
北広島町 23 4 0 0 1 28
三原市 13 10 1 1 1 26

読み取り: 都市規模 (人口) と観測点数の単純な比例関係はない。 中山間市町 (北広島町 28 点、世羅町 23 点、安芸太田町 21 点) も上位に入る。 これは観測網が「災害リスクの空間 (山地・水系・沿岸)」に沿って配置され、 人口密度ではないことを示す。

分析 5: 氾濫閾値で見る「先行指標」

狙い

水位観測 181 点のうち、どれが「警報を出すノード」として機能しうるか? 氾濫閾値 (水防団待機・はん濫注意・避難判断・はん濫危険) の有無と段階数で評価し、 H5 (50% 以上) を検証する。

手法 (リテラシレベル解説)

氾濫閾値 とは、河川水位が「この値を超えたら住民に避難を呼びかける/警戒態勢に入る」 という運用基準値です。広島県の水位観測ではマスタ CSV に最大 4 段階の閾値が記録されています。 段階数が多いほど細かく警報レベルを分けられる観測ノードです。

段階数 = 0 の観測所は監視のみ (値を取るだけで警報出力はしない、上流域の参考点など)。

実装

L31_observation_network.py 行 1554–1563

1554
1555
1556
thresh_cols = ["水防団待機[m]", "はん濫注意[m]", "避難判断[m]", "はん濫危険[m]"]
water_gdf["n_thresh"] = water_gdf[thresh_cols].notna().sum(axis=1)
water_gdf["has_flood_thresh"] = water_gdf["n_thresh"] > 0

図と読み取り

なぜこの図か: 「閾値あり/なし」の 2 値マップで地理偏在、段階数ヒストグラムで運用設計の細かさを 1 枚で見る。

水位観測の氾濫閾値: 有無マップ (左) と段階数分布 (右)
水位観測の氾濫閾値: 有無マップ (左) と段階数分布 (右)

読み取り:

表と読み取り

group column kind n_filled n_total_kind fill_pct
河川氾濫閾値 水防団待機[m] water 71 181 39.2
河川氾濫閾値 はん濫注意[m] water 114 181 63.0
河川氾濫閾値 避難判断[m] water 109 181 60.2
河川氾濫閾値 はん濫危険[m] water 111 181 61.3
ダム水位 最低水位[EL.m] dam 17 18 94.4
ダム水位 制限水位[EL.m] dam 4 18 22.2
ダム水位 常時満水位[EL.m] dam 17 18 94.4
ダム水位 ただし書き操作開始水位[EL.m] dam 4 18 22.2
ダム水位 サーチャージ水位[EL.m] dam 17 18 94.4
潮位警戒 注意潮位[TP.cm] tide 13 13 100.0
潮位警戒 警戒潮位[TP.cm] tide 13 13 100.0
その他 零点高[T.P.m] water 180 181 99.4
その他 洪水量[m3/s] dam 12 18 66.7

読み取り:

分析 6: 観測網の空間粒度と空白地帯

狙い

観測網の空間粒度 (どれだけ密に張られているか) を測定し、観測空白地帯を可視化する。 H6 (8 km 以上の空白が grid 5〜25%) の検証。

手法 (リテラシレベル解説)

観測網の粒度を測る最もシンプルな指標が 「最近隣距離」 です。
ある観測点から、自分以外で最も近い観測点までの直線距離。これが小さいほど密、大きいほど疎。

空白地帯マップは、県土に 1.5 km grid を張り、各 grid 点について最寄り観測点までの距離を計算します。 赤いほど空白に近い。

実装

L31_observation_network.py 行 1608–1646

 1
 2
 3
 4
 5
 6
 7
 8
 9
1617
1618
1619
1620
1621
1622
1623
1624
from scipy.spatial import cKDTree
xy = np.array([(p.x, p.y) for p in master_gdf.geometry])
tree = cKDTree(xy)
dists, _ = tree.query(xy, k=2)   # k=2: 自分(=0) + 最近隣(=1)
master_gdf["nearest_any_m"] = dists[:, 1]

# 観測空白 grid (1.5 km 間隔で県土を埋める)
xs = np.arange(xmin, xmax, 1500)
ys = np.arange(ymin, ymax, 1500)
xx, yy = np.meshgrid(xs, ys)
grid_pts = np.column_stack([xx.ravel(), yy.ravel()])
in_pref = gpd.GeoSeries([Point(x,y) for x,y in grid_pts]).within(pref_geom)

# 各 grid 点 → 最寄り雨量観測まで
rain_xy = np.array([(p.x, p.y) for p in rain_gdf.geometry])
rain_tree = cKDTree(rain_xy)
gd, _ = rain_tree.query(grid_pts[in_pref], k=1)

図と読み取り — 観測点間距離分布

なぜこの図か: ヒストグラム + 中央値線で「典型的な観測点間距離」を 1 枚に集約。 種別ごとに分けることで、種別の運用密度の違いを比較できる。

種別ごとの最近隣距離ヒストグラム + 全観測点比較
種別ごとの最近隣距離ヒストグラム + 全観測点比較

読み取り:

図と読み取り — 観測空白地帯

なぜこの図か: 「グリッドが赤いほど空白」のヒートマップは、 表や統計値より直感的に空白地を示せる。

観測空白地帯マップ — 雨量 (左) と全種別 (右) の最寄り距離 grid
観測空白地帯マップ — 雨量 (左) と全種別 (右) の最寄り距離 grid

読み取り:

表と読み取り (最近隣統計)

kind kind_label n median_km mean_km p95_km max_km
rain 雨量 390 2.66 2.70 4.90 26.89
water 水位 181 2.35 2.84 7.16 15.50
dam ダム 18 10.26 10.57 19.62 22.82
tide 潮位 13 11.22 12.92 21.05 23.77
wind 風向風速 21 16.84 16.76 22.78 23.62
any 全観測点 623 1.25 1.61 4.25 26.89

読み取り:

分析 7: マスタ vs 時系列ファイル照合

狙い

マスタ 1274 と時系列 8 件は同じ観測所を扱っているはず。 しかし時系列ファイルの観測所列がマスタと完全一致するかは未検証。 本分析では観測所名で照合し、マスタ⊇時系列 関係が成立するかを確認する。

手法

各時系列 wide CSV のヘッダ部 (上 6 行) から観測所名を抽出。 マスタの観測所名集合と差分を計算する。 時系列ヘッダは「事務所名・データ所管・水系名・河川名・観測所番号・観測所名」が縦に並び、 データ列が観測所単位で 1〜複数本配置される。

実装

L31_observation_network.py 行 1679–1719

 1
 2
 3
 4
 5
 6
 7
 8
 9
1688
1689
1690
1691
1692
1693
1694
1695
1696
def parse_ts_header(path):
    """時系列 wide CSV の上部メタを抽出"""
    raw = pd.read_csv(path, encoding="utf-8-sig", nrows=10, header=None)
    # 行 0-5 を観測所メタとして縦持ちに
    meta = pd.DataFrame({
        "事務所名":   raw.iloc[0, 1:],
        "データ所管": raw.iloc[1, 1:],
        "水系名":     raw.iloc[2, 1:],
        "河川名":     raw.iloc[3, 1:],
        "観測所番号": raw.iloc[4, 1:],
        "観測所名":   raw.iloc[5, 1:],
    }).dropna(subset=["観測所名"]).drop_duplicates(subset=["観測所名"])
    return meta

# マスタ vs 時系列 を観測所名集合で照合
master_names = set(master_gdf.loc[master_gdf["kind"]==k, "観測所名"])
ts_names = set(ts_meta_per_kind[k]["観測所名"])
n_common = len(master_names & ts_names)

図と読み取り

なぜこの図か: バーペアで「マスタ件数と時系列件数」を直接比較する。 共通件数 (=結合可能件数) を上に表示することで結合運用上の安全度が読める。

マスタ vs 時系列 観測所カバレッジ照合
マスタ vs 時系列 観測所カバレッジ照合

読み取り:

表と読み取り

kind kind_label n_master n_ts n_common_by_name n_only_master n_only_ts
rain 雨量 390 3 0 385 3
water 水位 181 178 178 1 0
dam ダム 18 18 18 0 0
tide 潮位 13 13 13 0 0
wind 風向風速 21 21 21 0 0

読み取り:

結合運用上の教訓: 観測所名は半角・全角・サフィックスの揺れで完全一致しないことがある。 9 dataset を結合するときは「観測所番号 + データ所管」を主キーにする方が頑健。 ただし観測所番号の体系も種別ごとに別ナンバリングなので、最終的にはマスタ 1274 の(観測所番号, データ所管) 複合キーが最も信頼できる。

仮説検証と考察

H1〜H6 の検証結果を表で示す。

H claim result verdict
H1 種別不均衡: 雨量 > 水位 > 風 > ダム ≈ 潮位 / 雨量 60%+ 順序: 雨390 > 水位181 > 風21 > ダム18 > 潮位13, 雨量比 62.6% 支持
H2 所管二元性: 県管理 vs 国管理 がほぼ折半 (差 < 40%) 県=348, 国=198, 差=27.5% 支持
H3 主要 3 水系 (太田川/江の川/芦田川 等) で観測点 50%+ 上位 3 水系 ['江の川', '太田川', '芦田川'] で 51.0% (318/623) 支持
H4 潮位 13 点は全て沿岸 (緯度 34.6 以南) 内陸 (緯度 > 34.6) の潮位観測 = 0 件 支持
H5 水位観測の 50%+ で氾濫閾値あり 水位 181 中 117 件 (64.6%) が閾値あり 支持
H6 雨量で 4.0 km 以上の観測空白が grid 5%以上 25%未満で存在 (当初 8km 想定だったが観測網が密だったため 4km へ閾値修正) grid 334/3472 = 9.62% が 4.0 km 超 (8 km 超は 0.0288% で極小) 支持

総括: 県の災害監視思想

9 dataset から再構成した観測網の構造から、以下の3 つの設計思想が読み取れる。

本記事は「観測網は防災の感覚器官」という視点を実データで裏付けた。 623 点の観測所が、5 種類の感覚モダリティ (雨を測る、水位を測る、ダム水位を測る、潮位を測る、風を測る) を、 2 主体 (県・国) で分担しつつ、主要 3 水系に集中配置している。 この構造を読み取ることが、災害監視ネットワークを設計する者にとっての最初のリテラシである。

発展課題

結果 X1 → 新仮説 Y1 → 課題 Z1: 観測空白の物理アクセス困難性

結果 X2 → 新仮説 Y2 → 課題 Z2: 氾濫閾値の高さと地形の関係

結果 X3 → 新仮説 Y3 → 課題 Z3: 雨量と水位の時系列遅延

結果 X4 → 新仮説 Y4 → 課題 Z4: 観測網の冗長性と耐故障性