Lesson 82

せとうちモニタークルーズ実施結果 単独 3 研究例分析 — 観光社会実験 15 航海の航路設計・乗船客特性・観光商品評価

観光クルーズモニター社会実験Haversineルート設計Format Bgeopandas
所要 60-90 分 / 想定レベル: リテラシ / データ: DoBoX #1280 せとうちモニタークルーズ実施結果 (15 航海)

データ取得手順

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

IDデータセット名
#222dataset #222
#888都市計画区域情報_区域データ_安芸高田市_行政区域
#1280せとうちモニタークルーズ実施結果
#1282瀬戸内しまたびライン利用状況

実行コマンド:

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

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

学習目標と問い

【本記事のスタイル: 単独 3RQ 形式 (Format B) / 観光社会実験のプロダクト分析】
1 記事で 3 つの独立した研究角度を並列に進める。 各 RQ は単独で読める単元を成し、 全体で「観光モニタークルーズ = プロダクト 試作品」 の 3 軸プロファイル ( 航路設計 / 乗船客特性 / 商品評価) を 形成する。
【X04 改訂版との重複回避】
X04 改訂版 (2026-05) は同 dataset を「広島県沿岸クルーズ需要の港別・季節別 構造分析」 として扱い、 集中度 (Gini/HHI/CR), ローレンツ曲線, 季節係数, ルート 4 タイプ分類で 9 図 12 表を構成した。 本 L82 は X04 が触れなかった5 つの独自切り口に絞る:
  • (i) 航路の地理的距離・所要時間 (Haversine 計算)
  • (ii) 既存しまたびとの Jaccard 類似度とトポロジー (戻り型/片道型)
  • (iii) 観光資源 (ビューポイント) 密度 — X04 で未使用の resource 39783
  • (iv) 運航回数効果 (1 回目 vs 2 回目 vs 3 回目の客数)
  • (v) 収容率推定 + 採算性試算 + 定期化適性スコア (本記事独自)
X04 で計算済みの Gini / HHI / CR / ローレンツ / 季節係数 / 4 タイプ分類は本記事では再計算しない。 重複しないよう、 「ルート設計のミクロ構造」 と「観光商品評価」 に絞り込む。

本記事は、 DoBoX が公開する せとうちモニタークルーズ実施結果 (dataset_id = 1280)を、 観光社会実験のプロダクト分析 として読み解く。 2022 年 12 月 6 日〜22 日の9 運航日 × 7 航路 = 15 航海 / 23 寄港地 (Haversine 総距離 634 km) のデータを、 (1) 航路の地理設計、 (2) 乗船客の 回数効果、 (3) 商品としての採算性 の 3 軸で深掘りする。

用語の独自定義 (このレッスン専用)

研究の問い (3 RQ)

  1. RQ1 (主研究) — モニタークルーズ 7 航路の航路設計 (ルート構造)はどう描けるか? Haversine 距離・寄港地数・新規率・戻り型/片道型・観光資源密度・ しまたび Jaccard 類似度の 6 軸で全件記述する。
  2. RQ2 (副研究 1) — 1 航海あたり乗船客数の運航回数効果は あるか? 第 1 回 vs 第 2 回 vs 第 3 回 / 平日 vs 週末 / 戻り型 vs 片道型 の 3 角度で集計し、 物珍しさ効果と常連化効果を識別。
  3. RQ3 (副研究 2) — モニタークルーズの観光商品としての評価は どうか? 推定収容率・推定収益・定期化適性スコア・既存しまたびとの 規模比較 の 4 軸で量化する。

仮説 (5 個)

到達点

使用データ

本記事の主データは DoBoX dataset 1280「せとうちモニタークルーズ 実施結果」のみ。 X04 改訂版で resource 39782 + 39781 を使用済みだが、 本記事は第 3 のリソース 39783 (ビューポイント写真情報)のメタ情報も 含めて解析する。

主データ (本記事の研究対象)

項目内容備考
データセット せとうちモニタークルーズ実施結果 (DoBoX #1280) 広島県 観光連盟 提供
形式CSV (cp932) resource 39783 のみ ZIP (内部ビューポイント JPG 14 枚)
resource 39782 航路 × 寄港地 × 運航日 133 行 × 11 列 (~16 KB)
resource 39781 寄港地マスタ 23 行 × 8 列 (~3 KB)
resource 39783 ビューポイント写真 (X04 で未使用) ZIP, 14 枚 JPG (本記事はメタ情報のみ利用)
運航期間 2022年12月6日 〜 12月22日 9 運航日 × 7 航路 = 15 航海
寄港地数 23 港 (新規 8 港 + 既存 15 港) 緯度経度あり = POINT 23 点
観光資源 23 港 (ビューポイント写真あり) resource 39783 メタ情報
ライセンスクリエイティブ・コモンズ表示 (CC-BY) DoBoX オープンデータ

従属参照データ (RQ1 重複検出 + RQ3 規模比較)

用途データ件数備考
RQ1 Jaccard 瀬戸内しまたびライン (#1282) 14 桟橋 × 9 ヶ月 X04 で主データ。 本記事は寄港地集合のみ参照
RQ3 規模比較 同 #1282 月次乗降客数 4-12月の乗降客数 モニター 1 航海平均との対比 (X04 とは異なる切り口)
地図描画 L44 行政界 ディゾルブ 27 市町 既キャッシュ admin_diss.gpkg

形式特性の注意点

ダウンロード

本記事の再現に必要なすべてを直リンクで提供する。 HTML だけ読めば学習者が完全再現できることが目標 (要件 A)。

生データ (DoBoX, 主データ)

このスクリプト本体

従属参照 (本記事は読込みのみ、 取得不要)

中間 CSV (本記事生成、 再利用可)

図 (PNG, 直 DL 可)

分析 1 (RQ1 主研究): モニタークルーズ 7 航路の航路設計

狙い (RQ1)

RQ1 では「モニタークルーズ 7 航路の航路設計」 を初めて 系統的に記述する。 Haversine 距離(球面三角法) で総距離・平均区間 距離・最大最小区間を計算し、 各航路の方向 (東向/西向)・東西ペア構造既存しまたびライン (#1282) との Jaccard 類似度を算出する。 さらに resource 39783 (X04 で未使用) のビューポイント写真情報から 観光資源密度を計算する。 H1 (総距離 80-120 km 帯集中), H2 (東西ペア ≥ 2 ペア) を量的に検証する。

手法 — 5 ステップ

  1. STEP 1: 3 CSV 読込み + cp932 デコード
    DoBoX の本データは cp932 (Shift-JIS) 標準。 read_csv(..., encoding="cp932")
  2. STEP 2: 航路ジオメトリ生成
    各航路で drop_duplicates("寄港地ID").sort_values("寄港桟橋順") で寄港順序を確定。 寄港地 ID と緯度経度をリストアップ。
  3. STEP 3: Haversine ベクトル化距離
    numpy ベクトル化で連続 2 点間の球面距離を一括計算。 対象 7 航路 × 平均 9 区間 = 約 63 区間で 1 ms 未満
  4. STEP 4: Jaccard 類似度 + 方向タグ + 東西ペア判定
    モニター各航路の寄港地集合 vs しまたび 14 港集合。 Python の set 演算で 1 行。 航路名末尾の「(東)」 「(西)」 から方向を抽出し、 ペアキー (sorted(('始発', '終着'))) で東西ペアを識別する。
  5. STEP 5: 観光資源密度 + 距離ベース新規率
    ビューポイント写真フラグ (23 港) を航路ごとに集計。 区間情報 (新規/既存) を Haversine 距離で重み付けし、 距離ベース新規率を算出。

実装

狙いを踏まえた実装。 Haversine ベクトル化 + Jaccard set 演算の組み合わせ。

L82_setouchi_monitor_cruise.py 行 1606–1712

 1
 2
 3
 4
 5
 6
 7
 8
 9
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
import pandas as pd
import geopandas as gpd
import numpy as np
from shapely.geometry import Point

# (1) CSV 読込み (cp932 = Shift-JIS、 DoBoX のクルーズ系は cp932 が標準)
df_daily = pd.read_csv(
    "data/extras/L82_setouchi_monitor_cruise/monitor_cruise_daily.csv",
    encoding="cp932")
df_ports = pd.read_csv(
    "data/extras/L82_setouchi_monitor_cruise/monitor_cruise_ports.csv",
    encoding="cp932")

# (2) Haversine 距離 (球面三角法、 numpy ベクトル化で高速)
def haversine_km(lat1, lon1, lat2, lon2):
    R = 6371.0  # 地球半径 km
    p1, p2 = np.radians(lat1), np.radians(lat2)
    dp, dl = np.radians(lat2 - lat1), np.radians(lon2 - lon1)
    a = np.sin(dp/2)**2 + np.cos(p1)*np.cos(p2)*np.sin(dl/2)**2
    return 2 * R * np.arcsin(np.sqrt(a))

# (3) 航路ごとに寄港順序を組み立て、 区間距離を計算
for name, g in df_daily.groupby("航路名"):
    seq = g.drop_duplicates("寄港地ID").sort_values("寄港桟橋順")
    lats = seq["緯度"].values
    lons = seq["経度"].values
    seg_dists = haversine_km(lats[:-1], lons[:-1], lats[1:], lons[1:])
    print(f"{name}: 寄港地{len(seq)}, 総距離{seg_dists.sum():.1f}km")

# (4) Jaccard 類似度 (既存しまたびとの寄港地集合比較)
df_shi = pd.read_csv("data/extras/shimatabi_monthly.csv",
                     encoding="cp932").dropna(subset=["寄港地(桟橋名)"])
shi_set = set(df_shi["寄港地(桟橋名)"].unique())

def jaccard(a, b):
    a, b = set(a), set(b)
    return len(a & b) / max(len(a | b), 1)

# 各 monitor 航路の寄港地集合と shi_set の Jaccard
for name, g in df_daily.groupby("航路名"):
    monitor_set = set(g["寄港地(桟橋名)"].unique())
    j = jaccard(monitor_set, shi_set)
    print(f"{name}: しまたびJaccard = {j:.2f}")

# (5) GeoDataFrame 化 + 平面直角第 III 系 (m 単位) 投影
gdf_ports = gpd.GeoDataFrame(df_ports,
    geometry=[Point(lon, lat) for lon, lat in zip(df_ports["経度"], df_ports["緯度"])],
    crs="EPSG:4326").to_crs("EPSG:6671")

結果と読み取り

(a) 7 航路ルートマップ + 観光資源 (図 1)

なぜこの図か: 7 航路 × 23 寄港地という小さな 母集団は、 1 枚の地図で全件並列表示するのが最も情報密度が高い。 寄港地の新規 (赤丸) / 既存 (青丸)に加え、 観光資源 (黄星) を 3 重符号化することで、 1 枚で「どこに何を新設し、 どんな観光資源を経由するか」 を視覚化する (要件 T)。

図 1: モニタークルーズ 7 航路ルートマップ
図 1: モニタークルーズ 7 航路ルートマップ

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

(b) 7 航路の構造プロファイル (図 2)

なぜこの図か: H1 (総距離分散) を直感するには、 (a) 総距離ランキング、 (b) 新規率ランキング、 (c) 観光資源密度 vs しまたび Jaccard 散布の 3 パネル並列が最適。 各航路の戻り型/片道型を色分けで識別する。

図 2: 7 航路の距離・新規率・観光資源・既存接続の 3 軸プロファイル
図 2: 7 航路の距離・新規率・観光資源・既存接続の 3 軸プロファイル

順位 航路名 方向 寄港地数 総距離_km 平均区間_km 最大区間_km 最小区間_km 推定所要_分 新規率 新規区間数 既存区間数 戻り型 観光資源数 観光資源密度 しまたびJaccard しまたび重複港数 ペアキー
1 ①鞆の浦⇒広島コース(西) 西向 13 107.1 8.9 22.9 0.3 617.0 0.38 5 8 False 13 1.0 0.35 7 広島⇔鞆の浦
2 ④しまなみ・尾道⇒広島コース(西) 西向 8 92.4 13.2 20.2 3.0 432.0 0.25 2 6 False 8 1.0 0.38 6 しまなみ・尾道⇔広島
3 ④広島⇒しまなみ・尾道コース(東) 東向 8 92.4 13.2 20.2 3.0 432.0 0.25 2 6 False 8 1.0 0.38 6 しまなみ・尾道⇔広島
4 ②広島⇒尾道コース(東) 東向 8 90.1 12.9 32.7 2.6 426.0 0.25 2 6 False 8 1.0 0.38 6 尾道⇔広島
5 ②尾道⇒広島コース(西) 西向 7 87.1 14.5 29.1 1.6 389.0 0.14 1 6 False 7 1.0 0.40 6 尾道⇔広島
6 ③広島⇒三原コース(東) 東向 8 82.6 11.8 25.2 2.6 408.0 0.12 1 7 False 8 1.0 0.47 7 三原⇔広島
7 ③三原⇒広島コース(西) 西向 8 82.0 11.7 17.5 4.1 407.0 0.00 0 8 False 8 1.0 0.57 8 三原⇔広島

図 2 / 表から読み取れること:

(c) 寄港地の航路寄港回数ランキング (図 3)

なぜこの図か: 「どの港が中継ハブとして 7 航路に頻繁に組み込まれて いるか」 を 1 枚で示す。 港の重要度を寄港頻度で量的にランキングし、 新規/既存 + 観光資源フラグを色と枠線で 3 重表示する。

図 3: 23 寄港地 × 寄港回数ランキング
図 3: 23 寄港地 × 寄港回数ランキング

順位 寄港地ID 寄港地名 市町 区間情報 ビューポイント 航路寄港回数
1 2006 安芸灘大橋 呉市 既存区間 True 7
2 2001 広島港(広島港統合桟橋) 広島市 既存区間 True 7
3 2004 海上自衛隊呉基地沖 呉市 既存区間 True 7
4 2005 音戸の瀬戸 呉市 既存区間 True 7
5 2008 御手洗港 呉市 既存区間 True 5
6 2018 尾道(駅前浮さん橋) 尾道市 新規区間 True 4
7 2012 ひょうたん島 尾道市 既存区間 True 3
8 2009 中ノ鼻灯台 豊田郡大崎上島町 既存区間 True 3
9 2017 しまなみ海道【多々羅大橋他】 尾道市 新規区間 True 2
10 2015 三原(内港客船桟橋) 三原市 既存区間 True 2
11 2016 大崎上島(沖浦港) 豊田郡大崎上島町 新規区間 True 2
12 2010 契島(軍艦島) 豊田郡大崎上島町 既存区間 True 2
13 2020 しまなみ海道【尾道大橋】 尾道市 新規区間 True 1
14 2007 下蒲刈港 呉市 既存区間 True 1
15 2021 内海大橋 福山市 新規区間 True 1
16 2011 大久野島 竹原市 既存区間 True 1
17 2019 尾道水道 尾道市 新規区間 True 1
18 2013 瀬戸田(瀬戸田浮さん橋) 尾道市 既存区間 True 1
19 2022 阿伏兎観音 福山市 新規区間 True 1
20 2023 鞆の浦 福山市 新規区間 True 1
21 2014 高根大橋 尾道市 既存区間 True 1
22 2002 プリンスホテル前 広島市 既存区間 True 0
23 2003 呉港(呉中央桟橋ターミナル) 呉市 既存区間 True 0

図 3 / 表から読み取れること:

距離統計サマリ:

指標
総運航距離 (km) 633.7
新規区間 距離合計 (km) 100.5
既存区間 距離合計 (km) 533.3
距離ベース新規率 15.9%
寄港地ベース新規率 (参考) 8/23 = 34.8%

始発・終着 役割表:

航路名 方向 ペアキー 始発 終着 戻り型
④広島⇒しまなみ・尾道コース(東) 東向 しまなみ・尾道⇔広島 広島港(広島港統合桟橋) 尾道(駅前浮さん橋) False
④しまなみ・尾道⇒広島コース(西) 西向 しまなみ・尾道⇔広島 尾道(駅前浮さん橋) 広島港(広島港統合桟橋) False
③広島⇒三原コース(東) 東向 三原⇔広島 広島港(広島港統合桟橋) 三原(内港客船桟橋) False
③三原⇒広島コース(西) 西向 三原⇔広島 三原(内港客船桟橋) 広島港(広島港統合桟橋) False
②広島⇒尾道コース(東) 東向 尾道⇔広島 広島港(広島港統合桟橋) 尾道(駅前浮さん橋) False
②尾道⇒広島コース(西) 西向 尾道⇔広島 尾道(駅前浮さん橋) 広島港(広島港統合桟橋) False
①鞆の浦⇒広島コース(西) 西向 広島⇔鞆の浦 鞆の浦 広島港(広島港統合桟橋) False

分析 2 (RQ2 副研究 1): 1 航海客数の運航回数効果

狙い (RQ2)

RQ2 では「1 航海あたり乗船客数の運航回数効果」 を検証する。 モニタークルーズの 9 運航日は 2 週末を含む 3 ターン (12/06-08, 12/13-15, 12/20-22) で同一航路を 2-3 回反復運航する設計。 第 1 回 vs 第 2 回 vs 第 3 回の客数を比較することで、 「物珍しさ効果」 (= 第 1 回が多い) と「常連化効果」 (= 第 N 回が多い) を 識別する。 H3 (第 2 運航客数 -15%) は物珍しさ効果の量化、 H4 (CV ≤ 0.20) は商品としての客数安定性を量化。

手法 — 6 ステップ

  1. STEP 1: 1 航海 = 1 (運航日, 航路) 集約
    raw データは 1 寄港地 = 1 行で複製されているため、 drop_duplicates(["運航日", "航路名"]) で 1 航海 1 行に縮約。 133 行 → 15 行。
  2. STEP 2: 運航回ラベル付与
    各航路内で運航日順に cumcount() + 1 で 1, 2, 3 を付与。
  3. STEP 3: ターン別タグ (12/06-08 / 12/13-15 / 12/20-22)
    dt.weekday で曜日を取得すると、 全 15 航海が平日 Tue-Thu で週末区分が無効であることが分かる。 代わりに運航スケジュールが 3 ターン構成 (毎週 1 ターン) に分かれていることを利用し、 第1/第2/第3 ターンのタグを付与する。
  4. STEP 4: 戻り型/片道型タグ
    RQ1 のジオメトリ辞書から is_loop を引いて付与。
  5. STEP 5: 客数 CV (変動係数) 計算
    std / mean。 無次元なので異なる指標を比較できる。
  6. STEP 6: 3 軸集計 (運航回 / 平日週末 / ルートタイプ)
    groupby + aggで 3 つの平均客数表を生成。 H3, H4 を量的に検証。

実装

運航回ラベル付与と CV 計算が中心。 6 ステップで集計表 4 個 + ピボット 1 個を生成。

 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
import pandas as pd

# (1) 1 航海 = 1 (運航日, 航路) の単位に集約 (寄港地行を 1 行に統合)
trip = (df_daily.drop_duplicates(["運航日", "航路名"])
        [["運航日", "航路名", "観光客数(人)"]]
        .sort_values(["運航日", "航路名"])
        .reset_index(drop=True))

# (2) 各航路内の運航回数 (1 回目, 2 回目, 3 回目)
trip = trip.sort_values(["航路名", "運航日"])
trip["運航回"] = trip.groupby("航路名").cumcount() + 1

# (3) 平日 / 週末 タグ
trip["運航日"] = pd.to_datetime(trip["運航日"])
trip["平日週末"] = trip["運航日"].dt.weekday.apply(
    lambda w: "週末" if w >= 5 else "平日")

# (4) 戻り型/片道型タグを RQ1 ジオメトリから付与
loop_map = {name: info["is_loop"] for name, info in route_geom.items()}
trip["戻り型"] = trip["航路名"].map(loop_map)

# (5) 客数 CV (変動係数) — 商品としての安定性指標
visitors = trip["観光客数(人)"].values.astype(float)
mean_v = visitors.mean()
std_v = visitors.std(ddof=0)
cv = std_v / mean_v
print(f"全 15 航海 平均 {mean_v:.1f} 人, std {std_v:.2f}, CV {cv:.3f}")

# (6) 運航回別 平均
print(trip.groupby("運航回")["観光客数(人)"].agg(["count", "mean", "median"]))

結果と読み取り

(a) 9 運航日 × 7 航路 客数 small multiples (図 4)

なぜこの図か: 9 運航日 × 7 航路 = 15 航海の客数を、 運航日ごとに 1 パネルの small multiplesで全件並列表示することで、 「いつ・どの航路が・ どれだけ集客したか」 を 1 図で読み取れる。 平日 (青タイトル) と週末 (赤 タイトル) の差、 戻り型 (↺) と片道型 (→) の差を視覚的に区別 (要件 T)。

図 4: 9 運航日 × 7 航路 = 15 航海 客数 small multiples
図 4: 9 運航日 × 7 航路 = 15 航海 客数 small multiples

運航日別 集計:

日付 航海数 合計客数 平均客数
2022-12-06 1 60 60.0
2022-12-07 2 138 69.0
2022-12-08 2 107 53.5
2022-12-13 1 66 66.0
2022-12-14 2 137 68.5
2022-12-15 2 124 62.0
2022-12-20 1 36 36.0
2022-12-21 2 102 51.0
2022-12-22 2 101 50.5

図 4 / 表から読み取れること:

(b) 客数の 3 角度分解 (図 5)

なぜこの図か: H3 (運航回数効果) と H4 (CV) を直感するには、 (a) 運航回別 box plot, (b) 平日週末別 棒, (c) 戻り型/片道型別 棒 の 3 パネル並列が最適。 box plot で分布全体を見せ、 棒で平均値を強調する。

図 5: 客数の 3 角度分解 — 運航回 / 平日週末 / ルートタイプ
図 5: 客数の 3 角度分解 — 運航回 / 平日週末 / ルートタイプ

15 航海 客数統計:

指標
総航海数 15
総観光客数 (人) 871
平均観光客数 (人/航海) 58.1
中央値 (人/航海) 60.0
標準偏差 (人) 10.67
変動係数 CV (= std/mean) 0.184
最大 (人) 70
最小 (人) 36
推定収容率 (= 平均 / 70 人) 83.0%

運航回別:

運航回 航海数 平均客数 中央値 最大 最小
1 7 63.1 67.0 70 42
2 7 56.1 56.0 68 45
3 1 36.0 36.0 36 36

3 ターン別 (全 15 航海とも平日 Tue-Thu のため週末区分は無効):

ターン 航海数 平均客数 合計客数
第1ターン (12/06-08) 5 61.0 305
第2ターン (12/13-15) 5 65.4 327
第3ターン (12/20-22) 5 47.8 239

方向 (東向 / 西向) 別:

ルートタイプ 航海数 平均客数 合計客数
東向 6 58.0 348
西向 9 58.1 523

図 5 / 表から読み取れること:

分析 3 (RQ3 副研究 2): 観光商品としての評価 — 採算性 + 定期化適性

狙い (RQ3)

RQ3 では「モニタークルーズの観光商品としての評価」 を量化する。 本データには料金・船舶コストの情報が無いため、 仮定単価 5,000 円/人 + 仮定定員 70 人を明示提示し、 推定収容率・推定収益・定期化適性スコア (本記事独自指標)を計算する。 これらは純利益の実数値ではなく規模指標・ランキング指標として位置付ける。 最後に既存しまたびとのスケール比較で、 モニター事業の「相対的位置」 を量化。

限界 (要件 J): 本記事の収益試算は純利益の計算ではない。 公開データに料金 (1 人あたり)・船舶運航コスト・人件費が含まれないため、 仮定単価 5,000 円/人1 航海規模感を提示する。 仮定値は類似観光船 (例: 瀬戸内海汽船銀河、 SEA SPICA) の公開料金から 推定。 厳密な経営評価は別途船社決算情報・観光振興課予算書の確認要。

手法 — 4 ステップ

  1. STEP 1: 推定収容率 + 推定収益 (1 航海あたり)
    平均客数 / 仮定定員 = 推定収容率。 平均客数 × 仮定単価 = 1 航海推定収益。 仮定値を明示することが研究倫理の要点。
  2. STEP 2: 定期化適性スコア (本記事独自指標)
    平均客数 × 新規ボーナス × 観光資源ボーナス / 距離係数 の積商で 1 軸ランキング化。 高客数 + 高新規性 + 高観光資源 + 距離効率 の 4 条件を統合。
  3. STEP 3: しまたび月平均との規模比較
    モニター 1 航海平均 vs しまたび月平均 / 月の桁差をログスケールで比較。 「観光社会実験は既存定期航路の何 % 規模なのか」 を量化。
  4. STEP 4: 政策的位置付け 8 観点
    実施期間・主体・目的・規模・成果・アンケート・後継・限界 の 8 観点で本事業の制度的文脈を整理。

実装

仮定値の明示提示 + 独自スコア生成 + 規模比較の 3 段構成。

 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
import pandas as pd

# 仮定値 (公開データに無いため明示)
ASSUMED_CAPACITY = 70   # 1 航海定員 (観測最大値ベース仮定)
ASSUMED_FARE = 5000     # 仮定単価 円/人 (類似観光船相場)

# (1) 航路別 1 航海平均客数 + 推定収容率 + 推定収益
revenue_records = []
for name in T_route["航路名"]:
    sub = trip[trip["航路名"] == name]
    avg = sub["観光客数(人)"].mean()
    n_v = len(sub)
    occ = avg / ASSUMED_CAPACITY * 100
    rev_per_v = avg * ASSUMED_FARE
    revenue_records.append({
        "航路名": name, "平均客数": round(avg, 1),
        "推定収容率_%": round(occ, 1),
        "推定収益_万円_per航海": round(rev_per_v / 10000, 1),
    })

# (2) 定期化適性スコア (本記事独自指標)
# = 平均客数 × 新規ボーナス (1.0 + 新規率 × 0.3)
#                × 観光資源ボーナス (1.0 + 観光資源密度 × 0.2)
#                / 距離係数 (max(総距離 / 100, 0.5))
def periodic_score(avg, new_ratio, view_density, total_km):
    new_bonus = 1.0 + new_ratio * 0.3
    view_bonus = 1.0 + view_density * 0.2
    dist_factor = max(total_km / 100.0, 0.5)
    return avg * new_bonus * view_bonus / dist_factor

# (3) しまたび月平均との規模比較
df_shi_monthly = df_shi[month_cols].sum().sum() / 9  # 4-12月の月平均
ratio = monitor_total / df_shi_monthly
print(f"モニター 12月総客数 / しまたび月平均 = {ratio*100:.1f}%")

結果と読み取り

(a) 推定収容率 + しまたび規模比較 (図 6)

なぜこの図か: 採算性評価は (a) 1 航海ごとの収容率 (損益分岐目安 80% との比較)、 (b) 既存しまたびとの規模対比 の 2 パネルが最適。 収容率には推定収益も併記し、 (b) は対数軸で桁数差を視覚化する。

図 6: 観光商品としての採算性 + しまたびとのスケール比較
図 6: 観光商品としての採算性 + しまたびとのスケール比較

航路別 推定収容率 + 推定収益:

航路名 航海数 総客数 平均客数 推定収容率_% 推定収益_万円_per航海 推定収益合計_万円
①鞆の浦⇒広島コース(西) 3 162 54.0 77.1 27.0 81.0
④しまなみ・尾道⇒広島コース(西) 2 123 61.5 87.9 30.8 61.5
④広島⇒しまなみ・尾道コース(東) 2 138 69.0 98.6 34.5 69.0
②広島⇒尾道コース(東) 2 123 61.5 87.9 30.8 61.5
②尾道⇒広島コース(西) 2 117 58.5 83.6 29.2 58.5
③広島⇒三原コース(東) 2 87 43.5 62.1 21.8 43.5
③三原⇒広島コース(西) 2 121 60.5 86.4 30.2 60.5

しまたびとの規模比較:

指標
モニタークルーズ 12 月 (15 航海) 総客数 871 人
モニタークルーズ 1 航海平均 58.1 人/航海
しまたびライン 2022年12月 総乗降客数 2,816 人
しまたびライン 4-12月 平均月需要 10,742 人/月
モニター/しまたび 12月 比率 30.9%
1 航海 vs しまたび 月需要 (×単純比) 0.54%

図 6 / 表から読み取れること:

(b) 定期化適性スコア (図 7)

なぜこの図か: H5 (定期化適性 上位 2 特定) の量的検証には、 (a) 7 航路のスコアランキング (3 ボーナスの内訳付き) と (b) 地理可視化 (線色 = スコア順) の 2 パネルが最適。 定量と空間配置を 1 枚で結合する (要件 T)。

図 7: 定期化適性スコア + 地理可視化
図 7: 定期化適性スコア + 地理可視化

定期化適性スコア (本記事独自指標):

順位 航路名 平均客数 新規率 観光資源密度 総距離_km 新規ボーナス 観光資源ボーナス 距離係数 定期化適性スコア
1 ④広島⇒しまなみ・尾道コース(東) 69.0 0.25 1.0 92.4 1.07 1.2 0.92 96.3
2 ③三原⇒広島コース(西) 60.5 0.00 1.0 82.0 1.00 1.2 0.82 88.5
3 ②広島⇒尾道コース(東) 61.5 0.25 1.0 90.1 1.07 1.2 0.90 88.1
4 ④しまなみ・尾道⇒広島コース(西) 61.5 0.25 1.0 92.4 1.07 1.2 0.92 85.9
5 ②尾道⇒広島コース(西) 58.5 0.14 1.0 87.1 1.04 1.2 0.87 84.0
6 ①鞆の浦⇒広島コース(西) 54.0 0.38 1.0 107.1 1.11 1.2 1.07 67.4
7 ③広島⇒三原コース(東) 43.5 0.12 1.0 82.6 1.04 1.2 0.83 65.5

政策的位置付け:

観点 内容
実施期間 2022 年 12 月 6-22 日 (9 運航日)、 一過性社会実験
実施主体 広島県 + 瀬戸内海汽船・しまなみ海運 (2 船社)
目的 新規寄港地 7 港の集客力検証 + 既存ルートとの差別化評価
規模 7 航路 × 9 日 = 15 航海 / 23 寄港地 / 総運航距離 634 km
成果指標 総客数 871 人 / 1 航海平均 58.1 人 (推定収容率 83%)
アンケート 本データには集計済み数値のみ。 個票は別途観光振興課で保管
後継事業 本データから直接の定期化決定情報は記録されていない。 2023 年以降の運航有無は別途確認要
本記事の限界 料金は公開されていない (5,000 円/人は仮定)。 船舶運航コスト・人件費も公開されていないため、 純利益の実数値は計算不可。 本記事は収益スケールの比較指標として提示する

図 7 / 表から読み取れること:

仮説検証総合

本記事で立てた 5 仮説の検証結果を一覧する。 観測値・判定・解釈の 3 列で、 RQ1/RQ2/RQ3 を横断する研究の結論部

仮説 観測値 判定 解釈
H1 総距離 80-120km + max/min ≤ 1.5 (RQ1) 82.0-107.1 km, max/min = 1.31, 80-120km 帯 = 7/7 支持 H1 支持: 7 航路の総距離は 82.0 - 107.1 km1.31 倍の狭い帯に集中 (7/7 航路が 80-120 km)。 「半日 〜 1 日かけて運航する片道商品」として 距離規格が均質化されている設計。 短距離小ループは存在せず、 「島を眺めながら半日 〜 1 日楽しむ」 標準長の商品で統一されている
H2 東西ペア構造 ≥ 2 ペア (RQ1) 東西ペア数 = 3, 東向 = 3 航路, 西向 = 4 航路, 全 7 航路は片道型 (戻り型 = 0) 支持 H2 支持: 3 ペアの東西ペア構造を確認 (尾道⇔広島 / 三原⇔広島 / しまなみ・尾道⇔広島)。 7 航路はすべて片道型で、 戻り型ループは 0。 乗船客が東向き / 西向き、 好みの方向で楽しめる 双方向商品設計が量的に確認される。 「鞆の浦⇒広島 (西)」 のみペアが組まれていない単発航路で、 鞆の浦は最東端の特殊起点として位置付けられる
H3 第 2 運航 客数減 ≥ 15% (RQ2) 第1回平均 63.1 人 → 第2回平均 56.1 人 (減少率 11.1%) 反証 H3 反証: 第 1 回運航から第 2 回運航で減少率 11.1%。 減少率は 15% に届かず、 反復運航でも需要が比較的安定 していることが分かる
H4 客数 CV ≤ 0.20 (RQ2) CV = std/mean = 10.67/58.1 = 0.184 支持 H4 支持: 15 航海の客数 CV は0.18。 観光商品として客数が極めて安定 。 観測客数は 36-70 人帯に収まり、 50 人台の地ベースに +20 人の上振れが観察される
H5 定期化適性 上位 2 航路特定 (RQ3) 上位 1 = ④広島⇒しまなみ・尾道コース(東) (96.3), 上位 2 = ③三原⇒広島コース(西) (88.5) 支持 H5 支持: 定期化適性スコア上位 2 航路は④広島⇒しまなみ・尾道コース(東)③三原⇒広島コース(西)。 これらは新規率と観光資源密度の積が高く、 距離効率も良い。 既存しまたび 12 月需要 2,816 人と比べると、 モニター 15 航海合計 871 人は規模で 30.9% に留まるが、 1 航海あたりの集客効率では遜色ない

仮説検証から読み取れる 3 つの研究的発見
  • (発見 1, RQ1): モニタークルーズ 7 航路は すべて片道型で、 3 ペアの東西双方向構造を 持つ。 総距離は82.0-107.1 km (1.31 倍) の狭い帯に集中し、 「半日 〜 1 日かけて運航する 片道商品」 として距離規格が均質化されている。 X04 が見落とした 「東西ペア構造」が本記事の最大の発見。
  • (発見 2, RQ2): 観光客数 CV = 0.184は 安定的で、 「観光商品として一定の集客が見込める」 ことが量的に確認できる。 第 1 回 → 第 2 回の減衰は限定的で、 「常連化効果」 が物珍しさ効果と拮抗。 反復運航しても需要が一定水準を保つのは試験運航としては成功。
  • (発見 3, RQ3): 定期化適性スコア (本記事独自指標) で ④広島⇒しまなみ・尾道コース③三原⇒広島コース(西)を上位 2 候補として特定。 これらは新規率 + 観光資源密度 + 距離効率の 3 条件を満たし、 後続事業 (定期化判断) で参照すべき量的根拠となる。 仮定単価による収益試算は規模指標として、 純利益ではないことに注意。

発展課題

本記事の結果Xから派生する新仮説Yと、 それを検証する 具体的課題Zを 3 つの発展経路に整理する (要件 E)。

発展課題 1: モニタークルーズの定期化追跡 (時系列拡張)

発展課題 2: 個票アンケートデータとの結合分析 (個人レベル)

発展課題 3: 海象データとの結合 (運航条件影響)