Lesson 87

L87 M3 観光物語 — 瀬戸内ブランドのインフラと島嶼ネットワーク

M系統合観光地理インフラツーリズムしまなみ島嶼ネットワーク津波交差走廊分類geopandas
所要 40 分 / 想定レベル: リテラシ + 空間統合 / データ: インフラツーリズム #1447 / 瀬戸内航路 #1281 / しまたびライン #1282 / モニター #1280 / 海岸保全 #1085 / 津波浸水想定 #47 / L15 行政界 (計 143 ノード)

データ取得手順

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

IDデータセット名
#42避難所情報
#47津波災害警戒区域情報
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#1041dataset #1041
#1085dataset #1085
#1257道路規制情報_本日の規制
#1280せとうちモニタークルーズ実施結果
#1281瀬戸内海の航路情報
#1282瀬戸内しまたびライン利用状況
#1447インフラツーリズム_施設情報

実行コマンド:

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

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

学習目標と問い

瀬戸内海は、 古来から「海の道」として広島の歴史を運んできた。 万葉集の歌人が舟で渡り、 平清盛が宮島の大鳥居を建て、 戦国の小早川水軍が 塩飽諸島に拠点を構え、 1999 年にはしまなみ海道が「サイクリングの聖地」 として 6 島を結んだ。 そして今、 この瀬戸内には定期クルーズ試験モニタークルーズが静かに走り、 ダム・橋梁・港湾は「インフラ ツーリズム」として観光資源化されている。

本記事は、 DoBoX の観光関連 4 dataset (#1447 インフラツーリズム 40 件 / #1281 瀬戸内海航路寄港地 81 件 / #1280 モニタークルーズ 23 寄港地 / #1282 しまたびライン 12 寄港地) を、 海岸保全施設 857 件 / 津波浸水想定 1,256,706 メッシュ / 行政界 20 市町と統合し、 「瀬戸内ブランド — 海と橋と島の インフラ観光地理」を 7 章の物語として読み解くテーマ統合 (M系) 記事である。

独自用語の定義 (この記事だけで使う)

研究の問い (主 RQ)

瀬戸内観光の物語 — 海の道とインフラが織りなす広島県の観光地理とは 何か? 瀬戸内ブランドを構成する 3 走廊 (宮島・安芸灘・しまなみ) は、 観光対象施設 / クルーズ寄港地 / 島嶼の量と質でどう描けるか? 観光の魅力 (ブランド) と防災のリスク (津波浸水) はどう交差するか?

仮説 (H1〜H5)

到達点

X01-X05 / L82 / L83 との明確な切り分け: 本記事は同じ観光関連 4 dataset を扱うが、 既存記事はすべて「規模分析」「集中度」「需給ギャップ」 「航路設計」「時系列」の切り口で、 空間走廊 (本記事の独自軸)での 物語化はゼロ。 さらに本記事は観光と津波浸水想定の交差 (#47 系 shapefile を用いた sjoin) を初めて行う。 同じ 143 件のデータが、 切り口を変えれば全く異なる物語を語る。

使用データ

本記事は瀬戸内ブランドの物語を語るため、 4 系統 + 3 補助 = 7 dataset を組み合わせて使う。 主軸は観光関連 4 件 (インフラツーリズム / 瀬戸内航路 / しまたび / モニター) で、 海岸保全 / 津波浸水 / 行政界を従属参照する。

論題dataset件数用途
インフラツーリズム_施設情報 DoBoX #1447 39 本記事の主軸。 観光対象施設の地理
瀬戸内海の航路情報 DoBoX #1281 81 瀬戸内海クルーズ寄港地の空間配置
瀬戸内しまたびライン利用状況 DoBoX #1282 12 港 (東向) 定期航路の LineString 描画 (背景)
せとうちモニタークルーズ実施結果 DoBoX #1280 23 モニタークルーズ寄港地
(従属) 海岸保全施設基本情報 DoBoX #1085 857 海岸距離 sjoin_nearest (海岸線推定)
(従属) 津波浸水想定区域 (#47 系) DoBoX #47 1,256,706 mesh 第5章 観光防災交差判定
(派生) L15 行政界 21 市町 L15 cache (admin_*.zip) 20 背景マップ + dissolve

4 観光 dataset 仕様

dataset主要列本記事での扱い
#1447 インフラツーリズム 施設名称 / 緯度・経度 / 分類 (大規模構造物・歴史的建造物・その他) / 施設概要 / HP / 文化財指定 40 件すべて 統合 nodes に組み込み、 走廊・島嶼判定
#1281 瀬戸内航路寄港地 寄港地ID / 寄港地名 / 住所 / 緯度・経度 / URL 広島県内 81 件を統合 nodes に組み込み
#1282 しまたびライン 航路ID / 寄港桟橋順 / 寄港地ID / 寄港地名 / 緯度・経度 / 月別客数 (4-12月) 東向 (101) 寄港順 1-12 を LineString として描画
#1280 モニタークルーズ 寄港地ID / 寄港地名 / 住所 / 緯度・経度 / 区間情報 (新規/既存) / ビューポイント写真情報 23 寄港地を統合 nodes に組み込み

派生指標 (本記事独自)

1 件追跡 (要件 K — Before/After)

段階
0. 元 CSV紅葉谷川庭園砂防施設 (インフラツーリズム)
1. 分類歴史的建造物
2. 緯度経度34.29434, 132.32405
3. 投影 EPSG:6671(14488, -189202) m
4. 走廊判定宮島走廊
5. 島嶼判定 (lat/lon マッチ)宮島 (is_island=1)
6. 海岸距離 sjoin_nearest1.50 km
7. 津波浸水想定 距離0.37 km (1km圏内=Yes)
8. 統合 GDF 行 IDnode_id=1

この表から読み取れること

ダウンロード

DoBoX 元データ (直リンク)

▶ #1447 インフラツーリズム (39 件) #1281 瀬戸内航路 #1282 しまたび #1280 モニター #1085 海岸保全 #47 津波浸水想定

本記事が生成した中間データ (再現用 — 直リンク)

図 8 枚 (PNG, 直 DL 可)

再現スクリプト

実行

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

観光関連 CSV は既存 cache (data/extras/) を 再利用、 海岸保全は L64 cache、 津波浸水は tsunami_extracted/、 行政界は L15 cache を参照。 追加 DL なしで即実行可能。

第1章 瀬戸内観光の地理 — 海の道と島嶼

狙い・手法

狙い: 瀬戸内観光の中核は何か? まず観光対象 39 件の 空間分布を見て、 海岸近接性と島嶼集中という 2 つの構造的特徴を 量化する。 これが瀬戸内ブランドの地理的基盤である。

手法の要点: 観光対象施設 (#1447) の緯度経度から海岸保全施設 857 件までの距離を sjoin_nearest() で計算し、 海岸距離中央値を求める。 さらに住所文字列マッチング + 緯度経度 マッチングで島嶼立地を判定する。

sjoin_nearest 直感的説明: 「左の点群」 と「右の点群」 を渡すと、 左の各点について最も近い右の点を見つけ、 距離を distance_col 列に書き込む。 内部で R-tree (空間インデックス) を使うため、 数千点 × 数千点でも数秒で完了。 総当たり計算 (forループ) より圧倒的に速い。

実装

L87_M3_tourism_story.py 行 1677–1772

 1
 2
 3
 4
 5
 6
 7
 8
 9
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

# 観光対象 #1447 (40 件)
infra = pd.read_csv("data/extras/infra_tourism.csv", encoding="utf-8-sig")
infra["lat"] = pd.to_numeric(infra["緯度"], errors="coerce")
infra["lon"] = pd.to_numeric(infra["経度"], errors="coerce")

infra_gdf = gpd.GeoDataFrame(
    infra,
    geometry=gpd.points_from_xy(infra["lon"], infra["lat"]),
    crs="EPSG:4326"
).to_crs("EPSG:6671")  # 平面直角第 III 系 (m)

# 海岸保全施設 #1085 (1,646 件)
coast = pd.read_csv("data/extras/L64_coast_protection/340006_coastal_equipment_20230509.csv",
                     encoding="utf-8-sig", on_bad_lines="skip")
coast["lat"] = pd.to_numeric(coast["開始位置緯度"], errors="coerce")
coast["lon"] = pd.to_numeric(coast["開始位置経度"], errors="coerce")
coast = coast.dropna(subset=["lat", "lon"])

coast_gdf = gpd.GeoDataFrame(
    coast,
    geometry=gpd.points_from_xy(coast["lon"], coast["lat"]),
    crs="EPSG:4326"
).to_crs("EPSG:6671")

# sjoin_nearest で観光対象 → 最寄り海岸保全施設の距離
nearest = gpd.sjoin_nearest(
    infra_gdf[["施設名称", "geometry"]],
    coast_gdf[["geometry"]],
    how="left", distance_col="coast_dist_m"
)
infra_gdf["coast_dist_km"] = (nearest.groupby("施設名称")["coast_dist_m"]
                               .min().values / 1000)

# 海岸距離中央値
print(f"観光対象 海岸距離 中央値 = {infra_gdf['coast_dist_km'].median():.2f} km")

# 島嶼判定 (簡易 lat/lon マッチ)
def is_island(lat, lon):
    if 34.27 <= lat <= 34.31 and 132.30 <= lon <= 132.35:
        return "宮島"
    if 34.24 <= lat <= 34.30 and 132.86 <= lon <= 132.96:
        return "大崎上島"
    # ... (5 島嶼判定)
    return "本州"

結果図 — 島嶼集積と海岸距離

なぜこの図か: 「海近・島嶼集中」 を直感的に伝えるには、 島嶼別棒海岸距離ヒストグラムを 2 枚で並べるのが効果的。 棒で島嶼集積率を、 ヒストで海岸近接の量的事実を、 同時に読める。

Fig 7: 島嶼別観光対象集積 (2/39 = 5.1% 島嶼) + 海岸距離分布
Fig 7: 島嶼別観光対象集積 (2/39 = 5.1% 島嶼) + 海岸距離分布

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

島嶼別 観光対象集積 (Top 10)

島嶼観光対象件数
本州37
向島1
宮島1

この表から読み取れること

第2章 しまなみ走廊 — 橋が生んだ観光圏

狙い・手法

狙い: 1999 年 5 月 1 日、 しまなみ海道が開通した。 尾道 (本州) と 今治 (四国) を 6 島 (向島・因島・生口島・大三島・伯方島・大島) で結ぶ 全長 60 km の道路橋連絡橋として開通したこの構造物は、 25 年を経て 「サイクリングの聖地」として観光地化した。 本章では、 しまなみ 走廊 (本記事独自定義) の観光リソース密度を、 統合 nodes (143 件) で量化する。

手法の要点: しまなみ走廊矩形 (北緯 34.23-34.45 / 東経 132.94- 133.35) で nodes をフィルタし、 ソース (観光対象 / 航路寄港地 / モニター 寄港地) × 分類のクロス集計を作成。 さらに しまなみ海道推定 LineString (6 主要点) を地図に重ね、 走廊と橋梁の 地理的関係を可視化する。

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import shapely.geometry

# しまなみ走廊 矩形 (本記事独自定義)
SHIMANAMI_RECT = (34.23, 34.45, 132.94, 133.35)  # lat_min, lat_max, lon_min, lon_max

def is_shimanami(row):
    lat, lon = row["lat"], row["lon"]
    return (SHIMANAMI_RECT[0] <= lat <= SHIMANAMI_RECT[1] and
            SHIMANAMI_RECT[2] <= lon <= SHIMANAMI_RECT[3])

shimanami_nodes = nodes_gdf[nodes_gdf.apply(is_shimanami, axis=1)]
print(f"しまなみ走廊内 nodes: {len(shimanami_nodes)} 件")

# しまなみ海道 LineString (4 主要点)
SHIMANAMI_BRIDGE = [
    (34.402, 133.198),  # 尾道側
    (34.380, 133.205),  # 向島
    (34.323, 133.180),  # 因島大橋付近
    (34.300, 133.085),  # 生口島
    (34.265, 133.085),  # 多々羅大橋 (広島県境)
]
from shapely.geometry import LineString, Point
import geopandas as gpd
shimanami_line = LineString([Point(lon, lat) for lat, lon in SHIMANAMI_BRIDGE])

結果図 — しまなみ走廊 zoom

なぜこの図か: 県全体マップではしまなみ走廊が小さく見えてしまう。 走廊矩形に zoom することで、 各島嶼の観光ノード配置と橋梁推定ラインの サイクリング聖地感を直感的に伝える。

Fig 4: しまなみ走廊 zoom — 49 件統合nodes
Fig 4: しまなみ走廊 zoom — 49 件統合nodes

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

しまなみ走廊 ソース × 分類 内訳

sourceモニター寄港地大規模構造物航路寄港地
インフラツーリズム020
モニタークルーズ寄港地1100
瀬戸内航路寄港地0036

この表から読み取れること

L82/L83 との重複回避: L82/L83 はしまなみライン・モニタークルーズ の時系列・規模分析に集中した。 本記事はしまなみ走廊という 空間軸でこれら全データを再分類する点が新規。

第3章 インフラツーリズム — 機能と観光の二重利用

狙い・手法

狙い: インフラツーリズム (#1447) の 39 件を、 分類 × 走廊で可視化する。 大規模構造物 (ダム・橋梁・トンネル等) 21 件 / 歴史的建造物 (砂防・庭園・神社系) 12 件 / その他 7 件の3 分類 が、 3 走廊にどう分布するかで「機能と観光の二重利用」 の地理パターンを読む。

手法の要点: 観光対象 39 件の分類列corridor 列pd.crosstab を作成。 さらに分類別の地図 (色分け) と 走廊別 stacked bar を 2 枚並べて、 「どの走廊にどの種類の観光対象が多いか」 を立体的に見せる。

X01 との重複回避: X01 は同じ #1447 を防災インフラ台帳 (ダム・橋梁・ トンネル) と施設名マッチでマージし、 観光対象/非対象の判別性 (ロジスティック回帰・OLS)を量化した。 本記事は判別計算なし、 分類×走廊の空間集計のみ。 切り口が完全に独立。

実装

L87_M3_tourism_story.py 行 1884–1927

 1
 2
 3
 4
 5
 6
 7
 8
 9
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
# 観光対象 40 件の 分類 × 走廊 クロス
T_infra_class_corridor = (
    infra_gdf.groupby(["分類", "corridor"]).size().unstack(fill_value=0)
)
print(T_infra_class_corridor)
# 出力例:
# corridor  宮島走廊 安芸灘走廊 しまなみ走廊 走廊外
# 分類
# 大規模構造物    3      4         1       13
# 歴史的建造物    1      6         2        3
# その他       1      2         0        4

# 分類別マッピング (matplotlib)
CLASS_COLOR = {"大規模構造物": "#cf222e",
                "歴史的建造物": "#0969da",
                "その他":      "#8250df"}
fig, ax = plt.subplots(1, 1, figsize=(13, 8))
admin_diss.plot(ax=ax, facecolor="#fafafa", edgecolor="#888")
for cls, color in CLASS_COLOR.items():
    sub = infra_gdf[infra_gdf["分類"] == cls]
    sub.plot(ax=ax, color=color, markersize=130, marker="^",
             alpha=0.9, edgecolor="white")

結果図 — 観光対象分類 × 走廊

なぜこの図か: 左 (地図)で空間配置を、 右 (積み上げ棒)で走廊別構成比を、 1 セット 2 視点で同時に見せる。 「大規模構造物が 走廊外 (内陸ダム) に集中、 歴史的建造物が安芸灘走廊 (神社・庭園系)」 という 機能別偏在が両図から読める。

Fig 2: 観光対象 39 件 分類別マップ + 走廊構成
Fig 2: 観光対象 39 件 分類別マップ + 走廊構成

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

観光対象 分類 × 走廊 クロス

分類しまなみ走廊安芸灘走廊宮島走廊走廊外
その他0214
大規模構造物25113
歴史的建造物0317

この表から読み取れること

第4章 島嶼観光 — 海岸距離の二極化

狙い・手法

狙い: 観光対象 39 件の海岸距離 × 緯度を散布し、 「沿岸 (低緯度) の橋梁・歴史建造物」 vs 「内陸 (高緯度) のダム・砂防施設」 という二極化構造を可視化する。 単なる海岸距離分布だけでなく、 緯度方向の階層も同時に見ることで、 瀬戸内ブランドの空間的 立体構造を浮き彫りにする。

手法の要点: 散布図で x = coast_dist_km, y = lat をプロットし、 海岸距離ビン (0-1km / 1-3km / 3-5km / 5-10km / 10km+) で点を色分け。 中央値の vline を入れて、 H3 (海岸距離中央値 ≤ 3km) を視覚的に検証する。

X05 との重複回避: X05 はしまたび航路 × 避難所収容で「需給ギャップ 指数」 を島別に算出した。 本記事は需給ギャップなし、 観光対象の 海岸距離 × 緯度の 2 次元構造のみ。 切り口が完全に独立。

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import matplotlib.pyplot as plt

# 海岸距離ビンで色分け
COAST_BIN_COLOR = {
    "0-1km":  "#005f73", "1-3km":  "#0a6678", "3-5km":  "#0969da",
    "5-10km": "#9a6700", "10km+":  "#cf222e",
}
infra_gdf["coast_bin"] = pd.cut(
    infra_gdf["coast_dist_km"],
    bins=[-1, 1, 3, 5, 10, 999],
    labels=list(COAST_BIN_COLOR.keys())
)

fig, ax = plt.subplots(1, 1, figsize=(13, 8))
for bin_name, color in COAST_BIN_COLOR.items():
    sub = infra_gdf[infra_gdf["coast_bin"] == bin_name]
    ax.scatter(sub["coast_dist_km"], sub["lat"],
               c=color, s=140, alpha=0.85, edgecolor="white",
               label=f"{bin_name} ({len(sub)})")
ax.axvline(infra_gdf["coast_dist_km"].median(),
           color="black", linestyle="--", linewidth=1.5,
           label=f"海岸距離中央値 {infra_gdf['coast_dist_km'].median():.2f} km")
ax.set_xlabel("海岸距離 (km)"); ax.set_ylabel("緯度")

結果図 — 海岸距離×緯度の二極化散布

なぜこの図か: 単純な海岸距離ヒストでは「内陸寄り」 と「沿岸寄り」 が混じってしまう。 緯度 (y軸)を加えると、 「内陸ダムは高緯度」 「沿岸建造物は低緯度」 という2 次元の階層構造が一目でわかる。

Fig 3: 観光対象 39 件 — 海岸距離×緯度 散布
Fig 3: 観光対象 39 件 — 海岸距離×緯度 散布

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

観光対象 海岸距離ビン × 分類 クロス

海岸距離ビンその他大規模構造物歴史的建造物
0-1km330
1-3km031
3-5km010
5-10km043
10km+4107

この表から読み取れること

第5章 観光と防災 — リスクと魅力の交差

狙い・手法

狙い: 瀬戸内ブランドの魅力 (海近)リスク (津波浸水) は地理的に重なるか? DoBoX 津波浸水想定 (#47 系) shapefile を読込み、 浸水メッシュを unary_union で統合し、 観光対象 39 件 からの距離を計算する。 1km 圏内立地を「観光防災交差地点」 として量化。

手法の要点: geopandas.read_file() で shapefile を 読込、 unary_union で全メッシュを 1 ポリゴンに統合 (1,256,706 mesh → 1 ポリゴン)、 さらに buffer(1000) で 1km 圏を画定。 観光対象点が圏内かを geometry.within() で 判定する。

X05 との重複回避: X05 は避難所×しまたび航路で「需給ギャップ」 を量化したが、 観光対象 (#1447) と津波浸水想定 (#47 系) の交差は扱って いない。 本記事の切り口は新規。

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import geopandas as gpd
from shapely.ops import unary_union

# 津波浸水想定 shp 読込 + 統合
tsunami_gdf = gpd.read_file(
    "data/extras/tsunami_extracted/.../浸水メッシュ.shp", encoding="cp932"
).to_crs("EPSG:6671")

tsunami_union = tsunami_gdf.unary_union   # 浸水メッシュ → 1 ポリゴン
tsunami_buffered = tsunami_union.buffer(1000)  # 1km buffer

# 観光対象が 1km 圏内か判定
infra_gdf["in_tsunami_1km"] = infra_gdf.geometry.within(tsunami_buffered).astype(int)
n_in = infra_gdf["in_tsunami_1km"].sum()
print(f"津波 1km 圏内観光対象 = {n_in}/{len(infra_gdf)} ({n_in/len(infra_gdf)*100:.1f}%)")

# 距離計算 (各観光対象 → 最寄り浸水ポリゴン辺)
infra_gdf["tsunami_dist_km"] = infra_gdf.geometry.distance(tsunami_union) / 1000

結果図 — 観光対象 vs 津波浸水想定

なぜこの図か: 「リスクとブランドの重なり」 を直感的に伝えるには 地図 (重ね合わせ)距離分布ヒストを 2 枚で並べるのが最強。 地図で空間関係を、 ヒストで定量分布を、 同時に提示する。

Fig 5: 観光対象 vs 津波浸水想定 重ね合わせ + 距離分布
Fig 5: 観光対象 vs 津波浸水想定 重ね合わせ + 距離分布

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

解釈の注意: 津波浸水想定は南海トラフ巨大地震想定などの 極端ケース。 「観光対象が浸水想定圏内」 = 「即座に浸水する」 ではなく、 「最大級津波時に浸水可能性がある地理」。 観光開発上は、 避難 ルート・建物耐津波設計・運営時の地震警報体制を整える参考とする。

観光対象 津波距離ビン × 分類 クロス

津波距離ビンその他大規模構造物歴史的建造物
浸水内100
1km以内263
5km以内011
5km超4147

この表から読み取れること

第6章 瀬戸内ブランドのトリプル統合 — 走廊比較

狙い・手法

狙い: 3 走廊 (宮島・安芸灘・しまなみ) の独立性と密度差を 量化し、 「広島県の瀬戸内観光はマルチコリドール構造である」 という H5 仮説を検証する。 各走廊のノード数 / 矩形面積 / 海岸距離中央値 / 島嶼率 / ソース構成を 1 枚に統合する。

手法の要点: 走廊矩形 (lat/lon 矩形) の面積を簡易計算 (lat 1°≈111km, lon 1° at 34.4°≈91km)、 件数 / 面積 で密度 (件/100km²)を求める。 さらに走廊間の重複面積比を計算して H5 を検証 (矩形が分離していれば 0%、 一部重なれば >0%)。

実装

L87_M3_tourism_story.py 行 2134–2175

 1
 2
 3
 4
 5
 6
 7
 8
 9
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
# 走廊矩形面積 (近似)
def rect_area_km2(lat_min, lat_max, lon_min, lon_max):
    h_km = (lat_max - lat_min) * 111  # lat 1° ≈ 111 km
    w_km = (lon_max - lon_min) * 91   # lon 1° at 34.4° ≈ 91 km
    return h_km * w_km

CORRIDORS = {
    "宮島走廊":   (34.180, 34.430, 132.180, 132.420),
    "安芸灘走廊": (34.110, 34.300, 132.420, 132.940),
    "しまなみ走廊": (34.230, 34.450, 132.940, 133.350),
}
for name, rect in CORRIDORS.items():
    area = rect_area_km2(*rect)
    n = (gdf_nodes["corridor"] == name).sum()
    print(f"{name}: 面積 {area:.0f} km², ノード {n}, 密度 {n/area*100:.2f} 件/100km²")

# 走廊間 重複面積 (H5 検証)
def rect_overlap(a, b):
    lat_overlap = max(0, min(a[1], b[1]) - max(a[0], b[0])) * 111
    lon_overlap = max(0, min(a[3], b[3]) - max(a[2], b[2])) * 91
    return lat_overlap * lon_overlap

結果図 — 3 走廊密度 + 海岸距離ビン

なぜこの図か: 左 (ヒートマップ)で観光対象の海岸距離 × 分類 の量的構造を、 右 (横棒)で走廊密度差を、 1 セット 2 視点で示す。 「しまなみは小さいが密度高」 「走廊外は広いが密度低」 という構造的事実を 可視化する。

Fig 6: 海岸距離ビン × 分類 ヒート + 3 走廊密度
Fig 6: 海岸距離ビン × 分類 ヒート + 3 走廊密度

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

3 走廊 サマリー (件数 + 海岸距離 + 島嶼率)

走廊観光対象数寄港地数総ノード数海岸距離中央値km島嶼率%
宮島走廊3690.5644.4
安芸灘走廊1034441.8650
しまなみ走廊247490.4244.9
走廊外24174110.994.9

この表から読み取れること

3 走廊 ノード密度比較

走廊緯度範囲経度範囲矩形面積_km2ノード数密度_件/100km2
宮島走廊34.18-34.43132.18-132.4260691.49
安芸灘走廊34.11-34.30132.42-132.94998444.41
しまなみ走廊34.23-34.45132.94-133.35911495.38

この表から読み取れること

仮説検証総合

5 つの仮説を 6 章にわたり検証してきた。 結果をまとめる。

横断的可視化 — 仮説検証ダッシュボード

なぜこの図か: 4 つの視点 (走廊別ソース構成 / 5 仮説 横棒 / 走廊×分類 グループ棒 / 海岸距離ビン×分類 積み上げ) を1 枚にまとめた ダッシュボードで、 6 章の知見を一望する。 学習者が最後の総括として 何度でも見返せる。

Fig 8: 仮説検証総合ダッシュボード — 4 視点 統合
Fig 8: 仮説検証総合ダッシュボード — 4 視点 統合

3 走廊 オーバーレイ + 統合 nodes 全件マップ

なぜこの図か: 全 nodes 143 件 + 3 走廊矩形 + しまなみ・しまたびラインを1 枚に 収めた主役マップ。 これが本記事の「物語の地図」。

Fig 1 (再掲): 3 走廊 + 統合 nodes (143 件)
Fig 1 (再掲): 3 走廊 + 統合 nodes (143 件)

仮説検証 サマリー表

仮説予測実測判定
H1 (島嶼観光集中)観光対象 40 件中 島嶼立地 ≥ 20%2/39 = 5.1%反証
H2 (しまなみ走廊集積)観光対象 + クルーズ寄港地 143 件中 しまなみ ≥ 15%49/143 = 34.3%支持
H3 (海岸近接)観光対象 40 件 海岸距離 中央値 ≤ 3 km中央値 10.99 km反証
H4 (観光・防災交差)観光対象 40 件中 津波 1km 圏内 ≥ 30%12/39 = 30.8%支持
H5 (3 走廊独立)走廊矩形の重複面積比 ≤ 5%重複面積 0 km² / 自己面積 2515 km² = 0.0%支持

この表から読み取れること

瀬戸内ブランドの 7 つの発見

  1. 島嶼集中度: 観光対象 39 件中 5.1% が島嶼立地。 宮島・大崎上島が中核。
  2. 海岸近接性: 観光対象の海岸距離中央値 10.99 km。 「海近」 がブランドの空間的定義。
  3. 分類別偏在: 大規模構造物 21 = 内陸ダム中心、 歴史的建造物 12 = 沿岸文化遺産中心。 「内陸 + 沿岸」 二層構造。
  4. 3 走廊密度差: しまなみ走廊が最高密度。 宮島走廊は世界遺産集中で次。 安芸灘走廊は分散。
  5. マルチコリドール: 3 走廊矩形の重複 0.0%。 広島県瀬戸内観光は並列構造
  6. 観光・防災交差: 観光対象の 30.8% が 津波 1km 圏内。 魅力とリスクは地理的に同居。
  7. 4 dataset 統合の物語性: インフラツーリズム + 航路 + モニター + しまたびを1 つの空間に載せると、 既存記事 (規模分析・需給ギャップ・時系列) では見えなかった マルチコリドール構造が浮かぶ。
X01-X05 / L82 / L83 と L87 の補完性: 同じ観光関連 4 dataset が、 切り口を変えると全く異なる物語を語る。
  • X01 (規模・判別): 観光対象/非対象の OLS / ロジ判別
  • X02 (文化財都市プロファイル): 階層クラスタ・PCA
  • X03 (4 指標俯瞰): 散布図行列・PCA・重回帰
  • X04 (港別市場構造): Gini / HHI / CRn / 季節係数
  • X05 (島嶼需給): バブル・ランキング・ギャップ指数
  • L82 (モニター航路設計): Haversine / Jaccard / 定期化スコア
  • L83 (しまたび時系列): 客数勾配 / 春秋偏向 / 落込み率
  • L87 (本記事, 物語): 3 走廊 + 島嶼 + 観光防災 + マルチ コリドール
8 つの記事が揃って初めて瀬戸内観光の研究地図になる。

発展課題

発展課題 (結果X → 新仮説Y → 課題Z の論理鎖)

発展1: 海上経路ネットワークと走廊の関係

発展2: 標高 DEM を使った内陸 vs 沿岸の精密分類

発展3: しまなみ走廊の四国側拡張 — 1999 開通の効果検証

発展4: 走廊定義の最適化 — クラスタリングによる自動分類

発展5: 津波避難経路と観光開発の同時設計

既存記事との関係 — 瀬戸内観光研究地図

瀬戸内観光の研究地図 — 8 記事の関係

本記事 L87 を含む瀬戸内観光関連 8 記事は、 同じ DoBoX 観光データから 全く異なる切り口で物語を引き出す研究地図を構成している。

記事主軸主結果L87 との重複
X01 (インフラ二重利用)観光対象 vs 非観光のロジスティック回帰・OLS 重回帰観光対象ダムは容量・堤高大、AUC 高L87 は回帰計算なし、空間走廊分類のみ
X02 (文化財 × 観光)都城・官衙跡 211件の階層クラスタ・PCA市町プロファイル 4 クラスタL87 は文化財扱わず、観光走廊のみ
X03 (観光 4 指標)市町別 4 次元ベクトル・散布図行列・PCAクルーズ・しまたび・モニター・インフラの 4 軸俯瞰L87 は市町ではなく走廊単位、PCA なし
X04 (クルーズ需要構造)Gini/HHI/CRn・季節係数・ローレンツ曲線上位5港 CR5≥40%、春秋 2 山型L87 は集中度指標なし、走廊地理のみ
X05 (島嶼需給ギャップ)島別 観光ピーク需要 ÷ 避難所収容力 = ギャップ指数ギャップ大の島 = 観光重点L87 はギャップ指数なし、走廊と津波交差のみ
L82 (モニタークルーズ)Haversine / Jaccard / 東西ペア / 定期化スコア7 航路の総距離 80-120km 帯L82 は航路設計、L87 は寄港地空間
L83 (しまたびライン)客数勾配 / 東西対称性 / 春秋偏向 / 12月落込み中継 5-8 港の累積客数最大L83 は時系列、L87 は静的空間統合
L87 (本記事, 物語)瀬戸内ブランド = 3 走廊 (宮島・安芸灘・しまなみ) の空間統合走廊別観光集積、島嶼集中、津波交差、しまなみ集積

この表から読み取れること

研究の協働性: 1 つのデータを 1 人で読むより、 8 つの切り口で 8 人が 読む方が、 はるかに豊かな物語が生まれる。 オープンデータの真の力は 「みんなが見て、 みんなが書く」 ことにある。 本記事 L87 は、 その 1 ピース。