データ取得手順
⚠️ このスクリプトは自動取得に対応していません。以下のデータセットを DoBoX から手動でダウンロードし、data/extras/ 以下に保存してください。
| ID | データセット名 |
| #666 | dataset #666 |
| #888 | 都市計画区域情報_区域データ_安芸高田市_行政区域 |
| #999 | dataset #999 |
| #1280 | せとうちモニタークルーズ実施結果 |
| #1282 | 瀬戸内しまたびライン利用状況 |
実行コマンド:
cd "2026 DoBoX 教材"
python -X utf8 lessons/X04_cruise_intervention_timeseries.py
DoBoX のオープンデータは申請不要・商用/非商用とも利用可。
data/extras/ は .gitignore 対象(約 57 GB のキャッシュ)。
スクリプト実行で自動再生成されます。
学習目標と問い
【本記事は 2026-05 改訂版】
旧 X04 (2026-05 以前) は 2022 年 12 月のせとうちモニタークルーズ実証実験を
「介入パルス」 とみなし、しまたびライン 8 ヶ月のベースラインに対する
DID 風前後比較で
「介入効果」 を推論しよう としていた。
しかし以下の方法論的問題があり、研究としての妥当性が確保できなかった:
- (1) 介入イベント n = 1 で因果推論不可 (反復観測なし)。
- (2) ベースライン傾き |a₁| が小さく、|差|/|a₁| が 約 200 倍 (19919%) に発散して
効果サイズの解釈が成立しない。
- (3) コロナ禍・季節・天候・経済環境の交絡が一切統制されていない。
- (4) DID 風と称しながら 平行トレンド前提が検証不可能。
本改訂では因果推論を装う構成を
全面廃案にし、同一データセット 2 件
(#1282 + #1280) を用いた
記述統計 + 市場構造分析に転換する。
3 つの研究角度 (RQ1/RQ2/RQ3) を Format B で並列に立てる。
【本記事のスタイル: 単独 3RQ 形式 (Format B) / 記述統計 + 市場構造分析】
1 記事の中で 3 つの独立した研究角度を並列に進める。
各 RQ は単独で読める単元を成し、全体として広島県沿岸クルーズ需要の
3 軸プロファイルを形成する。
本記事は、DoBoX が公開する 瀬戸内クルーズ関連 2 データセットを
記述統計 + 市場構造分析の枠組みで読み解く。
- #1282 瀬戸内しまたびライン利用状況 — 2022 年 4-12 月の月次乗降客数。
2 航路 × 14 桟橋 × 9 ヶ月。
- #1280 せとうちモニタークルーズ実施結果 — 2022 年 12 月の実証実験。
7 航路 × 9 運航日 = 15 航海, 23 寄港地。
このレッスンで答えたい問い (3 軸の RQ)
| RQ | 位置付け | 問い | 使うデータ |
| RQ1 | 主研究 |
広島県沿岸クルーズ需要は 14 港にどう配分されているか?
集中度はどの程度か? 主要港 vs 周辺港 の役割分化は? |
#1282 (港 × 月) |
| RQ2 | 副研究 1 |
需要の季節性は春秋 2 山型か? 港別差はあるか? |
#1282 (港 × 月 季節係数) |
| RQ3 | 副研究 2 |
モニタークルーズ実施結果のルート設計を記述する。
新規/既存区間の混合、寄港数、運航日分布は?
因果推論はしない (n = 1)。 |
#1280 (航路 × 寄港地 × 運航日) |
立てた仮説 (H1〜H5)
- H1 (RQ1): 14 港の需要は均等配分ではなく、CR5 ≥ 40%, Gini ≥ 0.10
程度の集中度がある。
- H2 (RQ1): 主要港 (上位 3) は航路の 始発・終着港、
周辺港は 島嶼経由地という役割分化がある。
- H3 (RQ2): 月別需要は 春秋 2 山型で、5 月と 11 月にピーク。
12 月の谷はピークの 1/4 以下。
- H4 (RQ2): 港別の季節係数は同じ春でも振幅が異なる。
季節振幅 (= 最大係数 − 最小係数) は港間で 1.5 倍以上の差がある。
- H5 (RQ3): モニタークルーズ 7 航路は 区間混合比に応じて 4 タイプに
分類できる (完全既存・既存主体・新規主体・完全新規)。空間設計は既存ライン
(広島-三原) を 東に延伸する形になっている。
用語の独自定義 (このレッスン専用)
- 「クルーズ需要 (cruise demand)」: 本記事では DoBoX #1282 が記録する
「桟橋ごとの月別乗降客数」 を需要の代理指標とする。実態は 船に乗った観光客数であり、
需要 (=潜在的に乗りたかった人数) とは厳密には異なるが、ここでは便宜上 需要 ≈ 乗降客数
と扱う。
- 「集中度 (concentration)」: 全需要が少数の港に偏っている度合い。本記事では
3 つの指標で測る:
- Gini 係数 = 0 (完全均等) 〜 1 (1 港独占)。本記事は港別需要の累積分布から計算。
- HHI (Herfindahl-Hirschman 指数) = Σ (各港のシェア)²。
0 (分散) 〜 1 (独占)。米司法省は HHI ≥ 0.18 を「高集中」とする。
- CRn (Concentration Ratio) = 上位 n 港のシェア合計。CR3, CR5, CR10 を併記。
- 「主要港 (major port)」: 本記事独自の分類。「年間需要 上位 5 位以内」 ∪
「航路の始発または終着港」 を満たすもの。
- 「周辺港 (peripheral port)」: 主要港でないもの。航路上の 経由のみ。
- 「季節係数 (seasonal index)」: 港 m 月の値 ÷ 港の年平均。
1.0 = 港の年平均、1.5 = 年平均の 1.5 倍、0.3 = 年平均の 0.3 倍。
港間の絶対値の違いを正規化することで、季節パターンの形のみを比較できる。
- 「季節振幅 (seasonal amplitude)」: 港の季節係数の (最大値 − 最小値)。
大きい = 季節依存が強い、小さい = 通年で安定。
- 「モニタークルーズ (monitor cruise)」: 広島県が 2022 年 12 月に実施した
実証実験。新規ルート 4 + 既存ルート 3 の 7 航路を 9 日間運航。
本記事では 記述分析のみ。1 回限りの実験のため 因果推論は行わない。
- 「ルートタイプ (route type)」: 各航路の新規寄港地比率に応じた本記事独自の
4 分類。完全既存 (新規率 0%) / 既存主体 (0% 超 50% 未満) / 新規主体 (50% 以上 100% 未満)
/ 完全新規 (100%)。
- 「始発/終着港」: 航路の 寄港桟橋順 = 1 または最大の港。乗船・下船が
集中するため、需要量も他港より多い傾向。
到達点
3 つの RQ を順に追体験することで、学習者は次の 3 つの分析手法を身につける:
(1) 集中度指標 3 種 (Gini / HHI / CRn) の使い分け、
(2) 季節係数による港別パターン正規化と振幅比較、
(3) ルート構成データの記述分析 (区間混合比 + ルートタイプ分類)。
広島県沿岸クルーズ市場が 「主要港 5+ 港 + 周辺港 9 港」 × 「春秋 2 山 + 冬の谷」 ×
「東に延伸する実験ルート」の 3 構造でできていることを 1 つの一貫したデータ物語として
把握する。
使用データ
改訂理由 (再掲): 旧 X04 は n=1 の介入効果分析を試みていたが、
方法論的に成立しないため 記述統計に転換。同じ 2 データセットを
3 つの記述研究角度 (RQ1/RQ2/RQ3) で読み直す。
本レッスンは DoBoX オープンデータ 2 件を使う:
| DoBoX ID | データ名 | 本記事での役割 | 形式 | サイズ |
| #1282 |
瀬戸内しまたびライン利用状況 (resource 39787) |
RQ1 / RQ2 の主データ — 港 × 月 の乗降客数 |
CSV (cp932) | 24 行 × 17 列 (3 KB) |
| #1280 |
せとうちモニタークルーズ実施結果 (resource 39782) |
RQ3 の主データ — 航路 × 寄港地 × 運航日 |
CSV (cp932) | 133 行 × 11 列 (16 KB) |
| #1280 (補) |
モニタークルーズ寄港地マスタ (resource 39781) |
23 寄港地の住所・緯度経度・区間情報 |
CSV (cp932) | 23 行 × 8 列 (3 KB) |
サイズの整理 (要件L: 表示と次元の混同を防ぐ):
| 段階 | 行数 | 列数 | 説明 |
| 原データ shimatabi_monthly.csv | 24 | 17 |
2 航路 × 14 桟橋 = 24 行 (頭末に NaN 行あり, 除去後)。月列 9 個 (4-12月)。 |
| 原データ cruise_monitor_daily.csv | 133 | 11 |
7 航路 × 平均 8 寄港地 × 平均 2 運航日 = 133 行。1 行 = 1 (運航日, 寄港地)。 |
| 長表 long_df (本記事生成) | 216 | 7 |
(航路, 港, 月) のタプルごとに 1 行。 |
| 港×月 集約 port_month | 126 | 3 |
東/西航路を合算し (港, 月, 乗降客数) に圧縮。RQ1/RQ2 の主表。 |
| 港別年間 port_yearly | 14 | 5 |
14 港 × (順位, 港名, 年間客数, シェア, 累積)。 |
| 港×月 季節係数 (pivot) | 14 港 | 9 月 |
係数 = 港m / 港年平均。1.0 = 港の年平均水準。 |
| モニタールート route_records | 7 航路 | 11 |
各航路の寄港数・新規率・運航日数・観光客数集計。 |
| モニター航海 trip | 15 航海 | 3 |
1 行 = 1 (運航日, 航路) = 1 航海 (= 観光客数 1 値)。 |
※ 「14 港」 と 「7 航路」 と 「23 寄港地」 は別物。
14 港 = しまたび東/西航路の港 (2022 年定常運航)、
23 寄港地 = モニタークルーズの寄港地 (2022 年 12 月実証, 14 港の一部 + 新規 9 港)、
7 航路 = モニタークルーズで運航された航路。
データ実態の重要事項:
DoBoX のデータセットページには複数の resource が登録されており、
本記事で使う時系列 CSV は resource_id 39787 (#1282) と resource_id 39782 (#1280)。
データセット ID で検索した場合の 先頭リソースは別のファイル (港マスタ・SHP)なので注意。
本記事のスクリプトは resource_id を直接指定して取得する。
ダウンロード (再現用データ・中間データ・図)
原データ (DoBoX)
個別取得 (PowerShell, このレッスンだけ):
cd "2026 DoBoX 教材"
iwr "https://hiroshima-dobox.jp/resource_download/39787" -OutFile "data/extras/shimatabi_monthly.csv"
iwr "https://hiroshima-dobox.jp/resource_download/39782" -OutFile "data/extras/cruise_monitor_daily.csv"
iwr "https://hiroshima-dobox.jp/resource_download/39781" -OutFile "data/extras/cruise_monitor_ports.csv"
本レッスンの .py スクリプトは、データが無ければ ensure_dataset() で自動取得してから処理を始める。
本レッスン生成の中間 CSV (HTML から直 DL)
図 PNG (HTML から直 DL)
再現スクリプト
X04_cruise_intervention_timeseries.py を以下で実行:
cd "2026 DoBoX 教材"
py -X utf8 lessons/X04_cruise_intervention_timeseries.py
【RQ1】 港別需要構造の研究 — 14 港の集中度と役割分化
研究の問い (RQ1)
広島県沿岸クルーズ需要は 14 港にどう配分されているか? 集中度はどの程度で、
主要港と周辺港の役割分化はあるか?
仮説 (再掲)
- H1: 14 港の需要は均等配分ではなく、CR5 ≥ 40%, Gini ≥ 0.10 程度の集中度がある。
- H2: 主要港 (上位 3) は航路の 始発・終着港、周辺港は 島嶼経由地。
手法 (ツール視点・要件J)
(1) 集中度指標 3 種は何のツールか:
- Gini 係数 (0..1):
- 入力: 各個体 (港) のシェアまたは絶対値の数列
- 出力: 1 個のスカラ (0=完全均等, 1=1 個に独占)
- 動作のイメージ: ローレンツ曲線 (累積港数比 vs 累積需要比) と
完全均等線 (y=x) の 間の面積を 2 倍したもの。
- 結果の読み方: Gini = 0.05 なら均等寄り, 0.30 なら穏やかな集中,
0.50 以上で高集中。
- 限界: 港数が少ない (n=14) と推定誤差が大きい。本記事では参考指標として併用。
- HHI (Herfindahl-Hirschman 指数) (0..1 または 0..10000):
- 入力: 各個体のシェア (合計 1)
- 出力: Σ シェア²。1/n (=均等) 〜 1 (=独占)。
- 動作のイメージ: シェアの 2 乗を足すだけ。シェアの大きい個体が 2 乗で効くため、
少数の支配的個体に敏感。
- 結果の読み方: 米司法省は HHI < 0.15 を「低集中」, 0.15-0.25 を「中集中」,
≥ 0.25 を「高集中」 とする。
- 限界: 上位だけ似ていて下位が大きく違う場合でも値は同じになる
(=分布の 形は見えない)。
- CRn (Concentration Ratio):
- 入力: シェアの降順列
- 出力: 上位 n 個のシェア合計
- 動作のイメージ: 単純に上位 n を足すだけ。
- 結果の読み方: CR3 ≥ 50% で「上位 3 港が市場の半分を占有」。
n の選び方で「どの粒度の集中」 を測るか調整できる。
- 限界: n の選び方に主観が入る。本記事では CR3 / CR5 / CR10 を併記。
(2) 「ローレンツ曲線」 とは何のツールか:
- 入力: 個体の値 (本記事は港の年間客数)。降順または昇順に並べる。
- 出力: 2 次元曲線。横軸 = 累積港数比 (=下位から見たときの何 % まで), 縦軸 = 累積需要比。
- 動作のイメージ: 横軸を「下位から数えた港の % 累積」、縦軸を「下位から数えた
需要の % 累積」 でプロット。完全均等なら直線 (y=x)、不均等なら下に膨らむ凸曲線。
- 結果の読み方: 曲線が y=x から下に離れるほど不均等。
その「離れた面積 × 2」が Gini 係数。
(3) 港の役割分類 (主要 vs 周辺) の作り方:
- 入力: 港別年間需要 + 各航路の寄港地リスト + 寄港桟橋順
- 出力: 港ごとに「主要港 / 周辺港」 のラベル
- 定義: 「年間需要 上位 5 位以内」 ∪ 「航路の始発または終着」 = 主要港、それ以外 = 周辺港。
2 条件は OR。これにより「年間需要は中位だが始発・終着の戦略港」 もすくえる。
- 結果の読み方: 主要港数が 少ないほど集中。広島県の沿岸クルーズが
「拠点港 + 多数の経由港」 型なら、主要港数 ≤ 5 になる。
なぜこの分析か (要件H): クルーズ需要が どう配分されているかを
1 軸 (絶対値) だけで見ると順位は分かるが分布の 偏り具合が分からない。
集中度指標 3 種 + ローレンツ曲線 + 役割分類の 4 視点で重ねれば、
「上位 3 港が約 26%」「下位 5 港で約 19%」「主要 5 港 + 周辺 9 港」 のような
多面的プロファイルが描ける。
実装
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 | import numpy as np, pandas as pd
# 港 × 月 を 港別年間 に集約
port_yearly = (port_month.groupby("港", as_index=False)["乗降客数"].sum()
.sort_values("乗降客数", ascending=False).reset_index(drop=True))
total = port_yearly["乗降客数"].sum()
port_yearly["シェア"] = port_yearly["乗降客数"] / total
# Gini 係数 (sorted ascending)
def gini_coefficient(x):
x = np.sort(np.asarray(x, dtype=float))
n = len(x)
if n == 0 or x.sum() == 0: return 0.0
return (2 * np.arange(1, n+1).dot(x) / (n * x.sum())) - (n+1)/n
gini = gini_coefficient(port_yearly["乗降客数"].values)
# HHI = Σ シェア²
hhi = (port_yearly["シェア"] ** 2).sum()
# CRn = 上位 n のシェア合計
cr3, cr5, cr10 = port_yearly["シェア"].head(3).sum(), port_yearly["シェア"].head(5).sum(), port_yearly["シェア"].head(10).sum()
# ローレンツ曲線 (昇順累積)
sorted_demand = np.sort(port_yearly["乗降客数"].values)
cum_demand = np.concatenate([[0], np.cumsum(sorted_demand)])
cum_demand_pct = cum_demand / cum_demand[-1]
rank_pct = np.arange(0, len(sorted_demand) + 1) / len(sorted_demand)
# 役割分類: 上位 5 位 ∪ 始発・終着
endpoint_ports = set()
for name, g in shimatabi.groupby("航路名"):
g = g.sort_values("寄港桟橋順")
endpoint_ports.add(g.iloc[0]["寄港地(桟橋名)"])
endpoint_ports.add(g.iloc[-1]["寄港地(桟橋名)"])
port_yearly["港クラス"] = np.where(
(port_yearly["順位"] <= 5) | (port_yearly["港"].isin(endpoint_ports)),
"主要港", "周辺港")
|
1 港の Before/After 追跡 — 「ひょうたん島」 (要件K)
例として年間需要 1 位の 「ひょうたん島」を切り出し、生データ → 集計 → ランクの流れを 1 件で追跡する:
| 段階 | このデータで何が起きるか | サイズ |
| 1. 生データ (港 × 月, 東/西別) |
ひょうたん島 行 (東向き 1 行 + 西向き 1 行) × 月列 9 個 = 18 値 |
2 行 × 9 列 |
| 2. 港 × 月 集約 (東 + 西 を合算) |
9 ヶ月の値: 971, 1560, 987, 630, 838, 755, 1168, 1356, 254 |
長さ 9 の数値列 |
| 3. 年間集計 (Σ 月) |
合計 = 8,519 人 | 1 個の数値 |
| 4. シェア計算 |
8.81% (= 8,519 / 96,685) | 1 個の数値 |
| 5. 順位 |
14 港中の 1 位 | 1 個の整数 |
| 6. 役割判定 |
始発終着 = No かつ 上位 5 = Yes → 主要港 |
1 個のラベル |
この表から読み取れること:
- 2 行 × 9 列 → 1 個のラベル と情報がだんだん圧縮される。
「ひょうたん島」 は東/西両方向の航路で寄港されている (= 連結性が高い)。
- シェアの絶対値 (8.81%) は 14 港の平均 7.1% (= 1/14)を上回るので、
定義上 1 位港。
- 役割判定で「主要港」 が確定。これが H2 (主要港 = 始発終着) の支持証拠の 1 つ。
重要なデータ品質情報 (このセクションを読む前提):
本データ (#1282) は 同じ航海の通過客数を全寄港地に同値で記録する方式で作られている。
たとえば東向き航路の 5 月 752 人/月という値は、3 番目の呉港から 11 番目の瀬戸田まで
9 寄港地すべてで同じ 752として記録される。乗船 / 下船が偏在する始発・終着港 (広島港・三原)
だけが他より低い値になる (= 端で乗降が発生し中継ではほぼ通過のみ)。
そのため、本記事の「港別年間需要」 は厳密には 「その港を通過した船客数 ≠ その港で実際に
乗降した人数」 である。本記事では便宜上 需要 ≈ 乗降客数 (=通過客数)として扱うが、
中継港の数値は 船のキャパ × 月数に強く拘束されることに注意。
集中度指標は港の 「サービス影響範囲」の指標と読むのが妥当で、純粋な「需要量」 ではない。
結果 (図と読み取り)
この図から読み取れること:
- 上位 1-7 位は同値で 8,519 人に集まっている。これは前述のデータ仕様 (通過客数の同値展開)
による典型的な現象。中継港群は航路で連結されているため需要量が連動する。
- 上位 1 位 = ひょうたん島 (年間 8,519 人, シェア 8.8%)。
下位 1 位 = 契島(軍艦島) (年間 4,071 人, シェア 4.2%)。
1 位 / 14 位 比 = 2.09 倍。
- 主要港 (赤バー) は 7 港、周辺港 (青バー) は 7 港。
主要港の総シェア = 56.9%。
- 主要港の中でも、始発・終着港 (広島港・三原)は数値が低い。これは航路の出入口で
乗船する人 / 下船する人だけがカウントされ、通過しないため。
一方、中継港 (呉, 大久野島など) は 同じ船が通過するので数値が同じになる
(= 元データの記録方式の特性)。
- 仮説 H2 への中間判定: 上位 3 のうち 0 港が始発/終着 → 部分支持 — 中継港のほうが上位に来る
結果 (表と読み取り)
表 1-1: 港別年間乗降客数 (降順) と シェア
| 順位 |
港 |
乗降客数 |
シェア |
累積シェア |
| 1 |
ひょうたん島 |
8519 |
0.0881 |
0.0881 |
| 2 |
呉港(呉中央桟橋ターミナル) |
8519 |
0.0881 |
0.1762 |
| 3 |
海上自衛隊呉基地沖 |
8519 |
0.0881 |
0.2643 |
| 4 |
瀬戸田(瀬戸田浮さん橋) |
8519 |
0.0881 |
0.3524 |
| 5 |
安芸灘大橋 |
8519 |
0.0881 |
0.4406 |
| 6 |
大久野島 |
8519 |
0.0881 |
0.5287 |
| 7 |
音戸の瀬戸 |
8519 |
0.0881 |
0.6168 |
| 8 |
プリンスホテル前 |
7555 |
0.0781 |
0.6949 |
| 9 |
三原(内港客船桟橋) |
7516 |
0.0777 |
0.7727 |
| 10 |
広島港(広島港統合桟橋) |
4943 |
0.0511 |
0.8238 |
| 11 |
御手洗港 |
4448 |
0.0460 |
0.8698 |
| 12 |
中ノ鼻灯台 |
4448 |
0.0460 |
0.9158 |
| 13 |
下蒲刈港 |
4071 |
0.0421 |
0.9579 |
| 14 |
契島(軍艦島) |
4071 |
0.0421 |
1.0000 |
この表から読み取れること:
- 累積シェアを見ると、上位 5 港で 44.1%、上位 10 港で 82.4%を占める。
下位 4 港の合計シェアは 17.6%。
- 1 位から 7 位までは差が小さい (=中継港が連動して同値で記録される) ため、
絶対値の上位は 港の重要度というより通過した船のキャパシティ × 月数。
- シェア < 5% の港は 4 港 (≒ 始発終着 + 一部経由)。
表 1-2: 集中度指標 3 種 (Gini / HHI / CRn)
| 指標 |
値 |
0..1 解釈 |
判定 |
| Gini 係数 |
0.1431 |
0=完全均等, 1=1 港独占 |
穏やかな集中 |
| HHI (Herfindahl-Hirschman 指数, 1 ベース) |
0.0769 |
0=分散, 0.18 以上で高集中 (米 DOJ 基準) |
低集中 (HHI < 0.15) |
| HHI (10000 ベース) |
769.0000 |
10000=独占, ≥1800 で高集中 (HHI 同等) |
— |
| CR3 (上位 3 港シェア) |
26.4000 |
上位 3 港が占める割合 (%) |
穏やか分散 |
| CR5 (上位 5 港シェア) |
44.1000 |
上位 5 港が占める割合 (%) |
穏やか分散 |
| CR10 (上位 10 港シェア) |
82.4000 |
上位 10 港が占める割合 (%) |
— |
この表から読み取れること:
- Gini = 0.143: 14 港中 1/14 = 0.071 = 完全均等。観察値 = 0.143 は
穏やかな集中。
- HHI = 0.077 (769/10000): 米 DOJ の閾値 0.18 (1800/10000) を
下回り低集中。
- CR5 = 44.1%: 上位 5 港が 44% を占有。
完全均等なら 5/14 = 35.7% なので +8.3ポイント偏在。
- 仮説 H1 (CR5 ≥ 40%, Gini ≥ 0.10): CR5 = 44.1%, Gini = 0.143 → 支持。
基準値を満たす。
表 1-3: 港の役割分類 — 主要港 vs 周辺港
| 順位 |
港 |
乗降客数 |
シェア |
累積シェア |
出現航路数 |
平均寄港順 |
中央寄港順 |
始発終着 |
港クラス |
| 1 |
ひょうたん島 |
8519 |
0.0881 |
0.0881 |
2 |
6.5 |
6.5 |
経由 |
主要港 |
| 2 |
呉港(呉中央桟橋ターミナル) |
8519 |
0.0881 |
0.1762 |
2 |
6.5 |
6.5 |
経由 |
主要港 |
| 3 |
海上自衛隊呉基地沖 |
8519 |
0.0881 |
0.2643 |
2 |
6.5 |
6.5 |
経由 |
主要港 |
| 4 |
瀬戸田(瀬戸田浮さん橋) |
8519 |
0.0881 |
0.3524 |
2 |
6.5 |
6.5 |
経由 |
主要港 |
| 5 |
安芸灘大橋 |
8519 |
0.0881 |
0.4406 |
2 |
6.5 |
6.5 |
経由 |
主要港 |
| 6 |
大久野島 |
8519 |
0.0881 |
0.5287 |
2 |
6.5 |
6.5 |
経由 |
周辺港 |
| 7 |
音戸の瀬戸 |
8519 |
0.0881 |
0.6168 |
2 |
6.5 |
6.5 |
経由 |
周辺港 |
| 8 |
プリンスホテル前 |
7555 |
0.0781 |
0.6949 |
2 |
6.5 |
6.5 |
経由 |
周辺港 |
| 9 |
三原(内港客船桟橋) |
7516 |
0.0777 |
0.7727 |
2 |
6.5 |
6.5 |
始発/終着 |
主要港 |
| 10 |
広島港(広島港統合桟橋) |
4943 |
0.0511 |
0.8238 |
2 |
6.5 |
6.5 |
始発/終着 |
主要港 |
| 11 |
御手洗港 |
4448 |
0.0460 |
0.8698 |
1 |
6.0 |
6.0 |
経由 |
周辺港 |
| 12 |
中ノ鼻灯台 |
4448 |
0.0460 |
0.9158 |
1 |
5.0 |
5.0 |
経由 |
周辺港 |
| 13 |
下蒲刈港 |
4071 |
0.0421 |
0.9579 |
1 |
7.0 |
7.0 |
経由 |
周辺港 |
| 14 |
契島(軍艦島) |
4071 |
0.0421 |
1.0000 |
1 |
8.0 |
8.0 |
経由 |
周辺港 |
この表から読み取れること:
- 主要港 = 7 港 (上位 5 位 ∪ 始発/終着)、周辺港 = 7 港。
主要港シェア合計 = 56.9%。
- 始発/終着港 (2 港) は数値こそ低いが、戦略的役割を担う
(乗船・下船の集中点)。これらを「ランクだけ」 で周辺扱いすると重要度を見落とす。
- 平均寄港順を見ると、主要港のうち広島港・三原は順位 1 または 12、
呉港など中継主要港は順位 3-10 に分布。これが 「拠点 - 中継 - 端」の
港階層構造を示す。
表 1-4: ローレンツ曲線の点列 (昇順累積)
| 累積港数比 |
累積需要比 |
| 0.0000 |
0.0000 |
| 0.0714 |
0.0421 |
| 0.1429 |
0.0842 |
| 0.2143 |
0.1302 |
| 0.2857 |
0.1762 |
| 0.3571 |
0.2273 |
| 0.4286 |
0.3051 |
| 0.5000 |
0.3832 |
| 0.5714 |
0.4713 |
| 0.6429 |
0.5594 |
| 0.7143 |
0.6476 |
| 0.7857 |
0.7357 |
| 0.8571 |
0.8238 |
| 0.9286 |
0.9119 |
| 1.0000 |
1.0000 |
この表から読み取れること:
- 累積港数比 50% (= 7 港) の時点で、累積需要比は 38.3%。
完全均等なら 50% なので、11.7ポイント下に膨らんでいる。
- 累積港数比 30% (≒ 下位 4 港) で累積需要比 = 17.6%
→ 下位 30% の港が市場の 18% しか占めない。
- 曲線が 緩やかに膨らむ形なので「軽度の集中」 とラベルできる。完全競争に近い形。
結果 (図 2 と読み取り)
この図から読み取れること:
- 赤の実測曲線は破線の完全均等線 (y=x) より下に膨らんでいるが、その距離は小さい。
Gini = 0.143はこの「膨らみ面積 × 2」を意味する。
- 下位 50% の港は需要全体の 38.3% しか占有していない
(完全均等なら 50%)。逆に上位 50% は 61.7%。
- 曲線の 傾きの変化を見ると、累積港数比 0.5 付近 (= 7 港目) で勾配が急に立ち上がる。
これは中位港から上位港にかけて 需要量がジャンプすることを示し、
港階層構造の証拠 (中位 = 経由港、上位 = 主要中継港) になる。
- 市場集中の典型的目安: Gini < 0.20 = 競争的、0.20-0.50 = 中集中、> 0.50 = 寡占。
本記事の Gini = 0.143 は 競争的。
広島県沿岸クルーズ市場は 「均等に近いが軽度の集中」と特徴づけられる。
結果 (図 3 と読み取り) — 要件 T (地理可視化)
なぜこの図か (要件H): バー (図1) では順位は見えるが 地理的位置は分からない。
緯度経度に円を配置し、円の サイズで需要、色で役割を表現すると、
「広島-呉-三原を結ぶ細長い航路 + 島嶼経由地」 という空間構造が一目で読める。
この図から読み取れること:
- 主要港 (赤) の地理分布は 東西軸上に並ぶ:
広島港 (西端) → 呉中央桟橋 → 大久野島 (中央) → 瀬戸田 → 三原 (東端) という線形配置。
- 周辺港 (青) は航路上の中継地で、いずれも円が小さい。これらは絶対値で見ると
主要港より少し低い程度だが、地理的に 島嶼の連絡点に位置する。
- 2 本の航路 (東向き / 西向き) は同じ港列を逆順に通るため、点線がほぼ重なる。
ただし広島港・三原 (始発/終着) では片方の航路でしか乗降しないため数値が低くなる。
- 仮説 H2 (主要港 = 始発・終着) は地図でも視覚的に補強される: 広島港・三原が
航路の 「鼻と尻尾」に位置し、円が他主要港より小さい (= 始発終着の数値特性)。
【RQ2】 季節性の研究 — 春秋 2 山型と港別振幅
研究の問い (RQ2)
需要の季節性は 春秋 2 山型か? 港別差はあるか?
仮説 (再掲)
- H3: 月別需要は春秋 2 山型 (5 月・11 月ピーク)、12 月谷はピークの 1/4 以下。
- H4: 港別の季節係数は同じ春でも振幅が異なる。
季節振幅 (max-min) は港間で 1.5 倍以上の差。
手法 (ツール視点・要件J)
(1) 「月別総需要」 とは何のツールか:
- 入力: 港 × 月 の長表 (= 港m の値)
- 出力: 月ごとの全港合算値 (9 ヶ月分のスカラ列)
- 動作のイメージ: pandas の
groupby("月")["値"].sum() で 1 行。
全港の月需要を縦に足す。
- 結果の読み方: 棒/折れ線で月の山谷が見える。ピーク月 / 谷月と ピーク/谷比が
季節性の強さを示す指標。
- 限界: 全港合算では 港ごとの差が消える (=次に港別係数で補う)。
(2) 「季節係数 (seasonal index)」 とは何のツールか:
- 入力: 港 × 月 の値
- 出力: 港 × 月 の係数。係数 = 港m の値 / 港の年平均。
- 動作のイメージ: 各港の値をその港の年平均で割るだけ。
1.0 = 港の年平均水準、1.5 = 1.5 倍、0.3 = 3 割水準。
- 結果の読み方: 港の絶対値が違っても 季節パターンの形だけが比較できる。
主要港と周辺港で「同じ春でも形が違うか」 を判定する。
- 限界: 港の年平均が 0 の場合は計算できない (本記事は全港 > 0)。
月数が少ないと係数の安定性も落ちる (本記事は 9 ヶ月で十分)。
(3) 「季節振幅 (seasonal amplitude)」 とは何のツールか:
- 入力: 港の季節係数 (9 月分のベクトル)
- 出力: 振幅 = (最大係数 - 最小係数), 比率 = (最大 / 最小), 標準偏差。
- 動作のイメージ: 港 m のベクトルから max と min を取り、引き算と除算。
- 結果の読み方: 振幅が大きい = 年内変動が強い (季節依存型)。
振幅が小さい = 通年で安定 (恒常需要型)。
なぜこの分析か (要件H): 月別総需要 (図4) は 全体の山谷を見せる。
ヒートマップ (図5) は 港 × 月の細部を見せる。季節係数 (図6 左) は
港の絶対量を消したパターン形状を見せる。振幅バー (図6 右) は 港間比較を見せる。
この 4 段階で「季節性の全体 → 細部 → 形 → 港間差」 という階層的把握ができる。
実装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | # 月別総需要 = 全港合算
month_total = port_month.groupby("月", as_index=False)["乗降客数"].sum().sort_values("月")
# 港 × 月 ピボット
pivot = port_month.pivot(index="港", columns="月", values="乗降客数")
# 季節係数 = 港m / 港年平均 (港ごとに正規化)
season_index = pivot.div(pivot.mean(axis=1), axis=0)
# 港別 季節振幅 (max - min, max/min, std)
season_amp = pd.DataFrame({
"港": season_index.index,
"最大月": season_index.idxmax(axis=1),
"最大係数": season_index.max(axis=1),
"最小月": season_index.idxmin(axis=1),
"最小係数": season_index.min(axis=1),
"振幅": season_index.max(axis=1) - season_index.min(axis=1),
"比率": season_index.max(axis=1) / season_index.min(axis=1),
})
|
結果 (図 4 と読み取り)
この図から読み取れること:
- ピーク月 = 5月 (17,665 人)、谷月 = 12月
(2,816 人)。比 = 6.27 倍。
- 春 (4-5 月) と秋 (10-11 月) は 年平均 (10743 人) を超える月が多く、
夏 (6-8 月) と冬 (12 月) は年平均を下回る → 春秋 2 山型 + 夏冬 2 谷。
- 5 月の突出が顕著 (17,665 人 = 月平均の 1.64 倍)。
GW 効果と推定。
- 11 月のピーク (15,265 人) は紅葉シーズン + 気候に起因。
- 12 月の落ち込みは 季節要因として極端 (年平均の 0.26 倍)。
寒さ + 冬休み前の閑散期。
- 仮説 H3 (春秋 2 山, ピーク/谷 ≥ 4): ピーク = 5月, 谷 = 12月,
比 = 6.27 → 支持。
基準を満たす。
結果 (表と読み取り)
表 2-1: 月別総需要 と シェア
| 月 |
乗降客数 |
シェア |
季節 |
| 4 |
11044 |
0.1142 |
春 |
| 5 |
17665 |
0.1827 |
春 |
| 6 |
11223 |
0.1161 |
夏 |
| 7 |
7214 |
0.0746 |
夏 |
| 8 |
9568 |
0.0990 |
夏 |
| 9 |
8565 |
0.0886 |
秋 |
| 10 |
13325 |
0.1378 |
秋 |
| 11 |
15265 |
0.1579 |
秋 |
| 12 |
2816 |
0.0291 |
冬 |
この表から読み取れること:
- 総需要 = 96,685 人 (= 14 港 × 9 ヶ月の合算)。
- 5 月シェア = 18.3%, 11 月 = 15.8%
(合計 34.1%) で 春秋ピークが年需要の 1/3 以上を占める。
- 12 月シェア = 2.9%。9 ヶ月平均 11.1% (=1/9) の 0.26 倍。
結果 (図 5 と読み取り)
この図から読み取れること:
- セルの色 = 月の絶対値。港は年間需要降順 (= 上から順に主要港・周辺港の混在)。
- 横方向の色変化 (= 同じ港の月変動) はどの港でも似たパターン: 5 月最濃 → 7-8 月薄
→ 11 月再濃 → 12 月最薄。
- 縦方向の色変化 (= 同じ月の港差) は、主要中継港 (呉, 大久野島など) が同値、
始発/終着港 (広島港・三原) が低値、という 2 段階構造。
- このヒートマップは 絶対値ベースなので「主要港の月変動が大きく見える」 が、
実は港の絶対量に圧倒されている。形だけ見るには次の図 6 (係数化) が必要。
表 2-2: 港 × 月 季節係数 (= 港m / 港年平均)
| 月 |
港 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
|
ひょうたん島 |
1.026 |
1.648 |
1.043 |
0.666 |
0.885 |
0.798 |
1.234 |
1.433 |
0.268 |
|
呉港(呉中央桟橋ターミナル) |
1.026 |
1.648 |
1.043 |
0.666 |
0.885 |
0.798 |
1.234 |
1.433 |
0.268 |
|
海上自衛隊呉基地沖 |
1.026 |
1.648 |
1.043 |
0.666 |
0.885 |
0.798 |
1.234 |
1.433 |
0.268 |
|
瀬戸田(瀬戸田浮さん橋) |
1.026 |
1.648 |
1.043 |
0.666 |
0.885 |
0.798 |
1.234 |
1.433 |
0.268 |
|
安芸灘大橋 |
1.026 |
1.648 |
1.043 |
0.666 |
0.885 |
0.798 |
1.234 |
1.433 |
0.268 |
|
大久野島 |
1.026 |
1.648 |
1.043 |
0.666 |
0.885 |
0.798 |
1.234 |
1.433 |
0.268 |
|
音戸の瀬戸 |
1.026 |
1.648 |
1.043 |
0.666 |
0.885 |
0.798 |
1.234 |
1.433 |
0.268 |
|
プリンスホテル前 |
0.979 |
1.674 |
1.051 |
0.669 |
0.857 |
0.820 |
1.240 |
1.446 |
0.264 |
|
三原(内港客船桟橋) |
0.995 |
1.646 |
1.056 |
0.674 |
0.932 |
0.723 |
1.286 |
1.461 |
0.226 |
|
広島港(広島港統合桟橋) |
1.187 |
1.539 |
1.049 |
0.763 |
0.963 |
0.870 |
1.271 |
1.142 |
0.217 |
|
御手洗港 |
1.070 |
1.635 |
1.182 |
0.726 |
0.894 |
0.844 |
1.170 |
1.261 |
0.219 |
|
中ノ鼻灯台 |
1.070 |
1.635 |
1.182 |
0.726 |
0.894 |
0.844 |
1.170 |
1.261 |
0.219 |
|
下蒲刈港 |
0.977 |
1.662 |
0.891 |
0.599 |
0.875 |
0.747 |
1.304 |
1.620 |
0.323 |
|
契島(軍艦島) |
0.977 |
1.662 |
0.891 |
0.599 |
0.875 |
0.747 |
1.304 |
1.620 |
0.323 |
この表から読み取れること:
- すべての港で 5 月係数が最大 (1.5-1.7)、12 月係数が最小 (0.22-0.32)。
港差より 共通季節パターンが支配的。
- 始発/終着港 (広島港・三原) の 春ピーク係数は 1.50-1.65 で、
中継港 (呉中央桟橋・大久野島) の 1.65 とほぼ同じ。
→ 季節パターンは 港の役割によらず共通。
- 振幅の小さい港 (広島港・中ノ鼻灯台) は港の年平均が比較的安定的に分布、
振幅の大きい港 (下蒲刈港・契島) は冬の落ち込みが極端。
結果 (図 6 と読み取り)
この図から読み取れること:
- 左の係数ヒートマップでは 列方向 (月) で色帯が一様 = 港間で季節パターンの 形は似ている。
- 右の振幅バーで、最大振幅港 = 三原(内港客船桟橋) (1.42)、
最小振幅港 = 広島港(広島港統合桟橋) (1.32)。
max/min 比 = 1.07。
- 振幅が小さい港 (始発/終着港の広島港・三原) は 年間で比較的均等な利用。
振幅が大きい港 (中継港の一部) は 冬に大きく落ち込む。
- 仮説 H4 (港間振幅比 ≥ 1.5): 観察値 = 1.07 → 部分支持。
基準値に達せず、港間で季節パターンの形はかなり似通っている。
この結果はデータ仕様 (= 中継港群が同値で記録される) によるところが大きい:
航路上の中継港 7 港は完全に同じ係数を共有 (1.026/1.648/1.043/0.666/0.885/0.798/1.234/1.433/0.268)
し、独自パターンを持つのは 始発/終着 + 単一航路のみ寄港の 4 港。
港間差の存在は確認されたが、絶対的な振幅差は小さい。
表 2-3: 港別 季節振幅 (max-min, max/min, std)
| 港 |
最大月 |
最大係数 |
最小月 |
最小係数 |
振幅 (max-min) |
比率 (max/min) |
係数の標準偏差 |
順位 |
乗降客数 |
| ひょうたん島 |
5 |
1.648 |
12 |
0.268 |
1.380 |
6.15 |
0.413 |
1 |
8519 |
| 呉港(呉中央桟橋ターミナル) |
5 |
1.648 |
12 |
0.268 |
1.380 |
6.15 |
0.413 |
2 |
8519 |
| 海上自衛隊呉基地沖 |
5 |
1.648 |
12 |
0.268 |
1.380 |
6.15 |
0.413 |
3 |
8519 |
| 瀬戸田(瀬戸田浮さん橋) |
5 |
1.648 |
12 |
0.268 |
1.380 |
6.15 |
0.413 |
4 |
8519 |
| 安芸灘大橋 |
5 |
1.648 |
12 |
0.268 |
1.380 |
6.15 |
0.413 |
5 |
8519 |
| 大久野島 |
5 |
1.648 |
12 |
0.268 |
1.380 |
6.15 |
0.413 |
6 |
8519 |
| 音戸の瀬戸 |
5 |
1.648 |
12 |
0.268 |
1.380 |
6.15 |
0.413 |
7 |
8519 |
| プリンスホテル前 |
5 |
1.674 |
12 |
0.264 |
1.410 |
6.34 |
0.421 |
8 |
7555 |
| 三原(内港客船桟橋) |
5 |
1.646 |
12 |
0.226 |
1.420 |
7.28 |
0.433 |
9 |
7516 |
| 広島港(広島港統合桟橋) |
5 |
1.539 |
12 |
0.217 |
1.322 |
7.09 |
0.372 |
10 |
4943 |
| 御手洗港 |
5 |
1.635 |
12 |
0.219 |
1.416 |
7.47 |
0.397 |
11 |
4448 |
| 中ノ鼻灯台 |
5 |
1.635 |
12 |
0.219 |
1.416 |
7.47 |
0.397 |
12 |
4448 |
| 下蒲刈港 |
5 |
1.662 |
12 |
0.323 |
1.339 |
5.15 |
0.451 |
13 |
4071 |
| 契島(軍艦島) |
5 |
1.662 |
12 |
0.323 |
1.339 |
5.15 |
0.451 |
14 |
4071 |
この表から読み取れること:
- 振幅の上位 3 港 = 三原(内港客船桟橋), 御手洗港, 中ノ鼻灯台。
下位 3 港 = 広島港(広島港統合桟橋), 下蒲刈港, 契島(軍艦島)。
- 振幅 = 季節依存度の代理指標。大きい港は「春秋にピンポイントで集中、夏冬は閑散」 タイプ。
小さい港は「年間バランス型」 タイプ。
- 港クラス (主要 / 周辺) と振幅は 必ずしも一致しない。「主要港でも振幅が大きい中継港」
と「主要港で振幅が小さい始発終着港」 の 2 タイプが存在。
【RQ3】 モニタークルーズルート記述分析 — 区間混合と東への延伸
研究の問い (RQ3)
モニタークルーズ実施結果のルート設計を 記述分析する。
新規/既存区間の混合、寄港数、運航日分布は? 因果推論はしない (n=1 で不可)。
仮説 (再掲)
- H5: モニタークルーズ 7 航路は区間混合比に応じて 4 タイプに分類できる
(完全既存・既存主体・新規主体・完全新規)。空間設計は既存ライン (広島-三原) を
東に延伸する形になっている。
因果推論を行わない理由: モニタークルーズは 2022 年 12 月の単発実証実験 (n=1)。
複数年・複数イベントの反復観測がなく、コロナ・天候・宣伝強度などの交絡が統制されていないため、
「介入効果」 を統計的に推論することは不可能。本 RQ ではあくまで 記述 (= ルート設計の特徴の言語化)
に留める。
手法 (ツール視点・要件J)
(1) 「ルートタイプ分類」 とは何のツールか:
- 入力: 各航路の (新規寄港数, 既存寄港数)
- 出力: 各航路に「完全既存 / 既存主体 / 新規主体 / 完全新規」 の 4 ラベル。
- 定義: 新規率 = 新規 / (新規+既存)。0 → 完全既存, 0<新規率<0.5 → 既存主体,
0.5≤新規率<1 → 新規主体, 1 → 完全新規。
- 結果の読み方: 4 タイプの分布 = 介入の 探索/活用ミックスを示す。
完全新規が多ければ「新ルート探索重視」、既存主体が多ければ「既存補強重視」。
- 限界: 寄港地数の 絶対値は無視している (5 港のうち 3 が新規 = 60% も、
10 港のうち 6 が新規 = 60% も同じラベル)。重み付き分類が必要なら別途。
(2) 「ルートマップ」 とは何のツールか:
- 入力: 各航路の (寄港地, 寄港順, 緯度経度)
- 出力: 緯度経度平面に 港の点 + 航路の折れ線を描いた地図
- 動作のイメージ: matplotlib
scatter で港を、plot で
航路 (寄港順に並べた点列) を線で結ぶ。
- 結果の読み方: 線の 束が空間設計を示す。新規航路が東に集中していれば
「東への延伸」 戦略。
- 限界: 海上の実航路 (= 等深距離) ではなく、緯度経度の直線で結んでいるため
近似形。地図の島嶼を背景に置くとさらに分かりやすいが、本記事は省略 (シンプル化のため)。
なぜこの分析か (要件H): 介入効果を量的に推論できないとき、ルート設計を 記述すること
それ自体が研究上の価値を持つ。「県は何を試したのか / どこに試したのか / どれくらいの規模か」 を
データで示すことで、後年の本格評価 (= 複数年データ取得後) のための 記述ベースラインになる。
実装
↑ X04_cruise_intervention_timeseries.py 行 1503–1547
1
2
3
4
5
6
7
8
9
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523 | # 1 航海 = 1 日 × 1 航路 (寄港地ごとの行は同じ観光客数)
trip = (monitor.drop_duplicates(["運航日", "航路名"])
[["運航日", "航路名", "観光客数(人)"]]
.sort_values(["運航日", "航路名"]).reset_index(drop=True))
# 各航路サマリ: 寄港数, 新規/既存, 運航日数, 客数
route_records = []
for name, g in monitor.groupby("航路名"):
stops = g.drop_duplicates("寄港地ID")
new_stops = (stops["区間情報"] == "新規区間").sum()
old_stops = (stops["区間情報"] == "既存区間").sum()
new_ratio = new_stops / (new_stops + old_stops)
if new_ratio == 1.0: rtype = "完全新規"
elif new_ratio == 0.0: rtype = "完全既存"
elif new_ratio >= 0.5: rtype = "新規主体"
else: rtype = "既存主体"
pas = g.drop_duplicates("運航日")["観光客数(人)"]
route_records.append({"航路名": name, "寄港地数": len(stops),
"新規率": new_ratio, "ルートタイプ": rtype,
"運航日数": g["運航日"].nunique(), "観光客数_合計": pas.sum()})
routes_df = pd.DataFrame(route_records)
|
結果 (図 7 と読み取り) — 要件 T (地理可視化)
この図から読み取れること:
- 赤丸 = 新規区間寄港地 (8 港):
鞆の浦・阿伏兎観音・尾道水道・しまなみ海道・大崎上島など 東部に集中。
- 青丸 = 既存区間寄港地 (15 港):
広島港・呉港・大久野島・瀬戸田・三原など 既存しまたびライン上。
- 7 本の航路はすべて広島港を 始発/終着のいずれかに含む。
既存ライン (広島-三原) を 東に延伸 (鞆の浦, 尾道, しまなみ海道方向) する設計が見える。
- 新規寄港地は既存しまたびライン (広島-三原) の 東側 (≒ 経度 133.0° 以東) に
ほぼすべて配置。これは戦略的に 「既存サービスの境界を超えて新エリアを開拓」
する意図と読める。
結果 (図 8 と読み取り)
この図から読み取れること:
- 15 航海の観光客数は 36-70 人/航海の幅 (平均 58.1)。
合計 = 871 人。
- 1 日に複数航路が並走する場合 (12-07, 12-08, 12-14, 12-15, 12-21, 12-22) は
東向き + 西向きのペア運航。
- 運航日後半 (12-20, 12-21, 12-22) は前半より 客数が低下傾向:
12-06 = 60, 12-13 = 66, 12-20 = 36 (鞆の浦コースの 3 回運航)。
これは曜日効果 (火) または天候・告知度などの影響と推測。
- 客数最大は 72 人程度の上限に張り付く航海 (12-07 ②広島⇒尾道, 12-14 ④, 12-15 ④)。
船定員の制約と推定。
- n=1 イベントなので統計的な有意検定はしない。観察された変動は記述に留める。
結果 (図 9 と読み取り)
この図から読み取れること:
- 左図の 7 航路は新規率 0% (完全既存) から最大 38% (新規主体) まで分布。
完全新規 (新規率 = 100%) はゼロ = 県は 必ず既存ラインの一部を組み込む戦略。
- 右図のタイプ別平均客数は、['完全既存', '既存主体'] の 4 タイプで
完全既存: 60.5人, 既存主体: 58.0人 の幅。
- ルートタイプ別の客数差は小さく (2.5 人差)、
区間混合比は集客力をほとんど変えない傾向。
この事実は H5 の「タイプ分類が可能」 を支持しつつ、
「タイプ間で性能が異なる」 とは言わない (= n が小さく差は誤差範囲)。
- 仮説 H5: 7 航路を 4 タイプに分類できるか? 観察 = 2 タイプ出現 → 部分支持。
完全新規のみ未出現で、3 タイプ 出現。
結果 (表と読み取り)
表 3-1: モニタークルーズ 7 航路サマリ
| 航路名 |
寄港地数 |
新規寄港数 |
既存寄港数 |
新規率 |
ルートタイプ |
運航日数 |
観光客数_合計 |
観光客数_平均 |
観光客数_最大 |
観光客数_最小 |
| ①鞆の浦⇒広島コース(西) |
13 |
5 |
8 |
0.38 |
既存主体 |
3 |
162 |
54.0 |
66 |
36 |
| ②尾道⇒広島コース(西) |
7 |
1 |
6 |
0.14 |
既存主体 |
2 |
117 |
58.5 |
68 |
49 |
| ②広島⇒尾道コース(東) |
8 |
2 |
6 |
0.25 |
既存主体 |
2 |
123 |
61.5 |
70 |
53 |
| ③三原⇒広島コース(西) |
8 |
0 |
8 |
0.00 |
完全既存 |
2 |
121 |
60.5 |
65 |
56 |
| ③広島⇒三原コース(東) |
8 |
1 |
7 |
0.12 |
既存主体 |
2 |
87 |
43.5 |
45 |
42 |
| ④しまなみ・尾道⇒広島コース(西) |
8 |
2 |
6 |
0.25 |
既存主体 |
2 |
123 |
61.5 |
67 |
56 |
| ④広島⇒しまなみ・尾道コース(東) |
8 |
2 |
6 |
0.25 |
既存主体 |
2 |
138 |
69.0 |
70 |
68 |
この表から読み取れること:
- 運航日数は 2 (大半の航路) または 3 (鞆の浦コース) の幅。
観光客数_合計は航路ごとに 87-162 人。
- 新規率 100% の航路は 無い (= 完全新規ルートは試行されず)。県は新ルート単独より、
既存資産を埋め込んだハイブリッドルートを優先する戦略。
- 寄港地数は 7-13 で航路ごとに変動。鞆の浦コース (13 寄港地) が最長で、3 日運航もここのみ。
実証実験の 主役ルートと推定。
表 3-2: 運航日 × 航路 = 15 航海の客数詳細
| 運航日 |
航路名 |
観光客数(人) |
| 2022-12-06 |
①鞆の浦⇒広島コース(西) |
60 |
| 2022-12-07 |
②尾道⇒広島コース(西) |
68 |
| 2022-12-07 |
②広島⇒尾道コース(東) |
70 |
| 2022-12-08 |
③三原⇒広島コース(西) |
65 |
| 2022-12-08 |
③広島⇒三原コース(東) |
42 |
| 2022-12-13 |
①鞆の浦⇒広島コース(西) |
66 |
| 2022-12-14 |
④しまなみ・尾道⇒広島コース(西) |
67 |
| 2022-12-14 |
④広島⇒しまなみ・尾道コース(東) |
70 |
| 2022-12-15 |
④しまなみ・尾道⇒広島コース(西) |
56 |
| 2022-12-15 |
④広島⇒しまなみ・尾道コース(東) |
68 |
| 2022-12-20 |
①鞆の浦⇒広島コース(西) |
36 |
| 2022-12-21 |
②尾道⇒広島コース(西) |
49 |
| 2022-12-21 |
②広島⇒尾道コース(東) |
53 |
| 2022-12-22 |
③三原⇒広島コース(西) |
56 |
| 2022-12-22 |
③広島⇒三原コース(東) |
45 |
この表から読み取れること:
- 15 航海すべて 12 月 (06,07,08,13,14,15,20,21,22) の 火・水・木 ローテーション。
平日中心の運航。
- 同じ航路でも運航日ごとに客数が異なる
(例: ①鞆の浦コース 60 → 66 → 36)。これは曜日・天候・告知度の合算と推定。
- 1 航海 = 1 日 × 1 航路の独立イベントだが、データセット上は寄港地ごとに行が
展開され、観光客数列は 同一値が繰り返される (要件L: 行数 ≠ 観測数)。
表 3-3: モニタークルーズ 23 寄港地マスタ (一部抜粋)
| 寄港地ID |
寄港地名 |
区間情報 |
緯度 |
経度 |
| 2001 |
広島港(広島港統合桟橋) |
既存区間 |
34.352503 |
132.455055 |
| 2002 |
プリンスホテル前 |
既存区間 |
34.342842 |
132.465197 |
| 2003 |
呉港(呉中央桟橋ターミナル) |
既存区間 |
34.240321 |
132.555993 |
| 2004 |
海上自衛隊呉基地沖 |
既存区間 |
34.231215 |
132.545136 |
| 2005 |
音戸の瀬戸 |
既存区間 |
34.194940 |
132.537520 |
| 2006 |
安芸灘大橋 |
既存区間 |
34.206958 |
132.679280 |
| 2007 |
下蒲刈港 |
既存区間 |
34.193141 |
132.682091 |
| 2008 |
御手洗港 |
既存区間 |
34.180044 |
132.866791 |
| 2009 |
中ノ鼻灯台 |
既存区間 |
34.215029 |
132.920458 |
| 2010 |
契島(軍艦島) |
既存区間 |
34.298503 |
132.902855 |
| 2011 |
大久野島 |
既存区間 |
34.305481 |
132.995307 |
| 2012 |
ひょうたん島 |
既存区間 |
34.284519 |
133.050242 |
| 2013 |
瀬戸田(瀬戸田浮さん橋) |
既存区間 |
34.305165 |
133.083990 |
| 2014 |
高根大橋 |
既存区間 |
34.308054 |
133.083320 |
| 2015 |
三原(内港客船桟橋) |
既存区間 |
34.398198 |
133.081994 |
※ 全 23 寄港地のうち上位 15 を表示。残りは
X04_monitor_ports.csv で参照。
この表から読み取れること:
- 緯度の範囲は 34.180-34.410 (≒ 0.23 度 = 約 25 km)、
経度の範囲は 132.455-133.380 (≒ 0.92 度 = 約 84 km)。
東西長 ≫ 南北長 の細長い分布で、瀬戸内海の海岸線と一致。
- 新規区間寄港地は 経度 133° 以東に多く (7/8 港)、
既存区間は 経度 133° 以西に多い (11/15 港)。
既存ライン東端の三原 (経度 133.08) を境に新規エリアが広がる。
表 3-4: ルートタイプ別 サマリ
| ルートタイプ |
観光客数_合計 |
観光客数_平均 |
運航日数 |
航路数 |
| 完全既存 |
121 |
60.5 |
2 |
1 |
| 既存主体 |
750 |
58.0 |
13 |
6 |
この表から読み取れること:
- 4 タイプのうち 3 タイプが出現: 完全既存 / 既存主体 / 新規主体。完全新規はゼロ。
- タイプ別の平均客数は近接 (58.0-60.5 人)
で、混合比の違いが集客力に直結しているとは言えない (n が小さく結論できない)。
- 運航日数の合算は 新規主体 + 既存主体 = 13 日に対し
完全既存 = 2 日 → 県は ハイブリッドルート優先で運航時間を割いた。
仮説検証総合
仮説と結果の照合 (要件: 仮説×結果対照表)
| 仮説 | RQ | 主要な結果 | 判定 |
| H1: 14 港の需要は均等配分でなく CR5 ≥ 40%, Gini ≥ 0.10 程度の集中度がある |
RQ1 |
CR5 = 44.1%, Gini = 0.143, HHI = 0.077 |
支持 |
| H2: 主要港 (上位 3) は始発・終着港、周辺港は島嶼経由地 |
RQ1 |
上位 3 港のうち 0 港が始発/終着。中継主要港 (呉港等) も上位 |
部分支持 |
| H3: 春秋 2 山型 (5 月・11 月ピーク)、12 月谷はピークの 1/4 以下 |
RQ2 |
ピーク = 5月 (17,665人), 谷 = 12月 (2,816人), 比 = 6.27 |
支持 |
| H4: 港間の季節振幅は 1.5 倍以上の差 |
RQ2 |
max振幅 = 1.42 (三原(内港客船桟橋)), min振幅 = 1.32 (広島港(広島港統合桟橋)), 比 = 1.07 |
部分支持 |
| H5: モニタークルーズは 4 ルートタイプに分類できる、東への延伸設計 |
RQ3 |
観察されたタイプ数 = 2 (完全既存・既存主体・新規主体)。完全新規は試行なし。
新規寄港地は経度 133° 以東に集中。 |
部分支持 |
3 RQ を統合した総合考察
(1) 広島県沿岸クルーズ市場は「軽度集中 + 共通季節パターン + ハイブリッド実験」 で構成される
- RQ1 で見たように、14 港の需要分布は 軽度の集中 (Gini = 0.143) であり、
寡占でも完全分散でもない。広島県の沿岸クルーズ市場は 「拠点 5 港 + 経由 9 港」
というシンプルな階層構造を持つ。
- RQ2 で見たように、季節パターンは 港の役割によらず共通 (春秋 2 山 + 冬の深谷)。
港間で振幅は多少異なるが、形は近い。これは 需要が観光客の月別カレンダー (GW、紅葉、年末年始)
に支配されることの証拠。
- RQ3 で見たように、モニタークルーズ実証は 既存ラインを東に延伸する戦略で、
新規 100% ルートは試行されなかった。新規開拓と既存補強を併せたハイブリッド。
(2) 因果推論はしないが、記述から導かれる政策的含意
- 港の需要は 船のキャパシティ × 月数で決まる構造のため、需要拡大の最大の制約は
運航本数。集客テコ入れより 運航回数増のほうが効果的かもしれない (要検証)。
- 季節振幅が大きい港は 冬の谷を埋める政策の余地が大きい。一方、振幅が小さい港 (始発/終着の広島港・三原)
は通年で需要があり、船便増の効果が出やすい。
- モニタークルーズの新規寄港地は 東部に集中している。既存の主要港 (西部の広島-呉)
は基盤としつつ、東部 (尾道・しまなみ・鞆の浦) がフロンティア。
(3) 本記事の限界
- 1 年データのみ: 季節パターンの安定性 (= 毎年同じか?) は検証不可。
複数年データが取得できれば、季節係数の年次安定性を見たい。
- n=1 の介入: モニタークルーズの集客性能は記述レベルで言及できるのみ。
旧版 X04 のような 因果推論は意図的に行わなかった。
- 港の役割分類は本記事独自: 「上位 5 ∪ 始発/終着」 は分析的に有用だが、
公式の港階層分類ではない。他研究と比較するときは定義を明示する必要がある。
- 需要 = 乗降客数の代理: 厳密には潜在需要 (乗りたかった人数) と異なる。
船のキャパに張り付いた航海では 需要 > 観測値の可能性がある (= 機会損失)。
発展課題
結果X → 新仮説Y → 課題Z (要件 E: 3 段の論理鎖)
RQ1 から派生する発展課題
課題1: 主要港の役割分類を クラスタリングで再構築
- 結果X: RQ1 では主要 / 周辺の 2 分類を「上位 5 ∪ 始発終着」 で定義したが、
分類しきい値は本記事の主観。
- 新仮説Y: 港を (年間需要, 季節振幅, 寄港順位の中央値, 始発終着フラグ) の 4 次元ベクトルで
表現し、k-means クラスタリングを適用すると 3-4 クラスタ (拠点港・中継主要港・島嶼経由地・端点港)
が自然に分離する。
- 課題Z: sklearn.cluster.KMeans で n=3 と n=4 を試行 → シルエット係数で最適クラスタ数を決定 →
各クラスタの代表港・特徴を表化 → 政策的含意 (どのクラスタにどんな投資をすべきか) を議論。
課題2: 港のネットワーク中心性 (= ハブ性) を測る
- 結果X: RQ1 で港の絶対需要は分かったが、「他港との接続性」は見えていない。
呉港は中継だが、広島港・三原は端点という地理的役割。
- 新仮説Y: 航路を ネットワークとして表現すると、呉港の介在中心性 (betweenness centrality)
は他主要港の 2 倍以上で、真のハブである。
- 課題Z: networkx で航路を無向グラフ化 → betweenness/closeness/degree centrality を計算 →
各港の中心性ランキングを表化 → 「需要ランク」 と「中心性ランク」 の差分を分析。
RQ2 から派生する発展課題
課題3: 古典時系列分解で「トレンド + 季節 + 残差」 に分解
- 結果X: RQ2 では月別総需要が 2 山型と分かったが、トレンド成分 (年間でゆるい増減) と
季節成分 (毎月の山谷) を 視覚的に分離していない。
- 新仮説Y: 古典時系列分解 (additive decomposition) で 9 ヶ月データを分解すると、
トレンド成分は ±100 人/月以内のドリフトに留まり、季節成分が支配的 (±400 人/月)。
- 課題Z:
statsmodels.tsa.seasonal_decompose で additive 分解 →
3 成分を別折れ線で可視化 → 残差成分を見て外れ月 (例: 5 月の突出) を特定。
ただし 9 ヶ月データは分解の period=12 を満たさないため、複数年データが必要。
課題4: 季節パターンの クラスタリングで港のタイプを発見
- 結果X: RQ2 では港の振幅で 1 次元の比較しかできなかった。
季節パターンの 形 (どの月にピーク)はほぼ共通だったが、
厳密にはマイナーな差がある。
- 新仮説Y: 9 月分の季節係数ベクトルを使った階層クラスタリング (Ward 法) で
港を 2-3 クラスタに分けると、「春重視・秋重視・冬の谷が深い」 の 3 タイプが現れる。
- 課題Z: scipy.cluster.hierarchy.linkage で港 × 9 月の係数行列を Ward 法でクラスタリング →
デンドログラムで 2-3 クラスタを切る → 各クラスタの平均季節パターンを折れ線で表示。
RQ3 から派生する発展課題
課題5: モニタークルーズと 定常運航 (しまたび 12 月) の集客性能比較
- 結果X: RQ3 では n=1 イベントなので因果推論しなかったが、
同じ 12 月に運航された 定常しまたびラインの客数と並べて見ることはできる。
- 新仮説Y: モニタークルーズの 1 航海平均客数 (58.1 人) は、
定常しまたびライン 12 月の 1 航海推定客数と 同程度 (±20 人) で、
「新ルートだから特段集まる」 効果は限定的。
- 課題Z: しまたびライン 12 月の月次合算客数を 12 月の運航日数で割って 1 航海平均を推定 →
モニタークルーズの 1 航海平均と並べて表化 → 客数差を記述 (因果推論せず)。
課題6: 運航日 × 曜日 × 天候 の交絡分解
- 結果X: RQ3 で運航日後半の客数低下を観察したが、要因 (曜日・天候・告知度) を
分離していない。
- 新仮説Y: 9 運航日の曜日構成を見ると 火・水・木が中心で、土日運航がない。
平日のため客数が抑制された可能性 → もし土日にも運航していたら平均客数は +30%程度になる。
- 課題Z: 運航日に曜日 (pd.to_datetime().dt.day_name()) と当日の気温/降水量
(気象庁データ) をマージ → 重回帰で 客数 ~ 航路 + 曜日 + 天候 をフィット →
各係数を比較 (n=15 で過適合に注意)。
3 RQ 横断の総合課題
課題7: 複数年データで 本格的な季節安定性 + ルート評価を再現
- 結果X: 本記事は 2022 年単年。2018-2024 年データがあれば、
季節パターンの安定性 + モニタークルーズ前後の年次変化が分析可能。
- 新仮説Y: 2018-2024 年の 12 月クルーズ客数 (定常運航) は 2023 年以降の平均が
2022 年より +15% 高い。2022 年実証のフォロアップ運航化 (= 新規ルート定着) の効果。
- 課題Z: DoBoX の続報リソースを取得 (まだ無ければ広島県観光統計に問い合わせ) →
年次対前年成長率を計算 → 2022 を介入年として t 検定 → ただし他県の同時期データで
比較群を作って交絡統制 (= 本格的な DID = 旧版 X04 が試みて失敗した姿の正解)。