― TideLogを使った可視化・AI活用ガイド(PHP版) ―
はじめに:なぜ「潮汐 × 風 × 波」を分析すると良いのか
湘南は、潮汐・風向・波の組み合わせで波質が劇的に変化するエリアだ。
「昨日は良かったのに今日は全然違う」「同じポイントでも割れ方が変わる」
この原因の大半は、次の3要素によって説明できる。
- 潮汐(潮位) … 浅すぎればダンパー化しやすく、高すぎると割れにくい
- 風(向き・強さ) … オンショアで面が乱れ、オフショアで面が整う
- 波(サイズ・周期・向き) … ブレイクのクオリティを支配する要素
これらを“勘”ではなく“データ”で理解すると、次のようなメリットが得られる。
- 良い波が立ちやすい時間帯がパターン化して分かる
- サーフログとの照合で「自分に合う良い波の条件」を抽出できる
- 波予測サイトを“根拠を理解して読む”ことが可能になる
- 湘南の海の傾向を長期的に学べる
この記事では、Surf-OK が販売する TideLog CSV Lite版(湘南2024) を使い、
潮汐 × 風 × 波データを PHPで読み込み → 可視化 → 活用 する方法をまとめる。
TideLog CSV Lite版とは
8,784行、欠損0%、湘南2024年を1年分まるごと収録
TideLog CSV Lite版は、江の島周辺の 2024年・毎時データ を整形したCSVデータだ。
収録カラム
- datetime(日本時間)
- tide_cm(潮位)
- wind_dir(16方位)
- wind_speed(m/s)
- wave_height(m)
- wave_period(s)
- swell_dir(°)
- swell_period(s)
特徴
- 1年分 8,784行(24 × 366日)
- 欠損 0%のクリーンデータ
- Webアプリ・WordPress・PHPスクリプトで扱いやすい構成
- カラム名がシンプルなのでコードに組み込みやすい
- ローカルで自由に加工可能(API不要)
まずはシンプルなファイル1つで、湘南の海を「数値の形」で理解できるようになる。
TideLogを PHP で読み込む方法
― そのままコピペで動くサンプルコード付き ―
① 基本の読み込み(CSV → 配列)
<?php
$path = "tidelog_shonan_2024_lite.csv";
$data = [];
if (($handle = fopen($path, "r")) !== false) {
$header = fgetcsv($handle); // 先頭行(カラム名)
while (($row = fgetcsv($handle)) !== false) {
$data[] = array_combine($header, $row);
}
fclose($handle);
}
echo "Loaded rows: " . count($data);
?>
これで 8,784行の連想配列 $data ができる。
② 直近のデータを10件だけ確認
<?php
foreach (array_slice($data, 0, 10) as $row) {
echo $row['datetime'] . " | Tide: " . $row['tide_cm'] . "cm | Wave: " . $row['wave_height'] . "m\n";
}
?>
③ 特定の年月だけ抽出(例:2024年8月)
<?php
$aug = array_filter($data, function ($row) {
return strpos($row['datetime'], "2024-08") === 0;
});
echo "August rows: " . count($aug);
?>
④ 必要なカラムだけ取り出す
<?php
$subset = array_map(function($row){
return [
'datetime' => $row['datetime'],
'tide_cm' => (int)$row['tide_cm'],
'wind_speed' => (float)$row['wind_speed'],
'wave_height' => (float)$row['wave_height'],
];
}, $data);
?>
PHPだけで“軽いデータ分析”まで可能だ。
PHP × グラフ化の方法
― ライブラリ不要で可視化リンクを作る、または画像生成も可能 ―
PHPでグラフを作る方法は2種類ある。
方法①:Google Charts(最も簡単・Web向け)
PHPで配列 → JSON に変換し、Google Charts に渡すだけ。
<?php
$json = json_encode(array_slice($subset, 0, 200)); // 最初の200行だけ表示
?>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
const raw = <?php echo $json; ?>;
const rows = raw.map(r => [new Date(r.datetime), Number(r.tide_cm), Number(r.wave_height)]);
const data = new google.visualization.DataTable();
data.addColumn('datetime', 'Date');
data.addColumn('number', 'Tide (cm)');
data.addColumn('number', 'Wave (m)');
data.addRows(rows);
const chart = new google.visualization.LineChart(document.getElementById('chart'));
chart.draw(data);
}
</script>
<div id="chart" style="width:100%; height:300px;"></div>
これだけで 潮位 × 波高の折れ線グラフ を描画できる。
方法②:PHP-GD / ImageMagick で画像生成(高度)
PHP内で画像生成も可能だが、
Surf-OK や WordPressに組み込むなら Google Charts / Chart.js 連携が最適。
サーフログを照合し「良い波の日の条件」を探る
― PHPでも十分に分析できる ―
サーフログ(CSV)をPHPで読み込み、TideLogと突き合わせると“自分の良い波条件”が抽出できる。
① サーフログを読み込む
<?php
$log = [];
if (($h = fopen("my_surf_log.csv", "r")) !== false) {
$header = fgetcsv($h);
while (($row = fgetcsv($h)) !== false) {
$log[] = array_combine($header, $row);
}
fclose($h);
}
?>
② datetime をキーにして結合
<?php
$indexedTide = [];
foreach ($data as $row) {
$indexedTide[$row['datetime']] = $row;
}
$merged = [];
foreach ($log as $l) {
$dt = $l['datetime'];
if (isset($indexedTide[$dt])) {
$merged[] = array_merge($l, $indexedTide[$dt]);
}
}
?>
③ “良かった日”を抽出(score ≥ 4)
<?php
$good = array_filter($merged, fn($r) => (int)$r['score'] >= 4);
$stats = [
'tide' => [],
'wind' => [],
'wave' => []
];
foreach ($good as $g) {
$stats['tide'][] = $g['tide_cm'];
$stats['wind'][] = $g['wind_speed'];
$stats['wave'][] = $g['wave_height'];
}
echo "Average tide: " . array_sum($stats['tide']) / count($stats['tide']);
echo "\nAverage wind: " . array_sum($stats['wind']) / count($stats['wind']);
echo "\nAverage wave: " . array_sum($stats['wave']) / count($stats['wave']);
?>
これで次のような傾向が分かる。
- 良い日ほど 潮位が特定の範囲に集中
- 風速が弱め
- 波高や周期も偏りがある
“自分に合った波”の条件を、
完全に データ起点で分析 できるようになる。
研究・アプリ開発での応用例
― PHPでも実装しやすい用途が多数 ―
1. Webアプリの波スコア判定
- 潮位×風×うねりから独自スコアを返すAPI
- 「今の湘南の波は◯点」と返す判定ロジック
2. WordPressプラグインとしての活用
- TideLogを WP Cron で読み込み、
毎朝「今日の湘南予報」を自動生成 - Surf-OK Auto Poster と組み合わせれば強力な自動化が可能
3. AI要約 × PHP
- ChatGPT APIと組み合わせて“波傾向の要約”を毎日投稿
- 予測サイトの解説を自動で人間的な文章に整形
4. 学術用途
- 四季の波高分布分析
- 風向と波向の整合性検証
- 潮位とブレイク質の相関研究
TideLogは欠損ゼロ・整形済みなので、
機械学習・統計・Webアプリすべてに使いやすい。
まとめ:湘南の波を“データで理解する”時代へ
TideLogを使えば、以下のことができるようになる。
- 潮位・風速・波高の関係性が見えてくる
- グラフ化すれば傾向が一目で分かる
- サーフログとの照合で“良い波の再現性”を掴める
- PHPだけでWebアプリ開発まで発展できる
サーフィンの経験値が“データ”と組み合わさることで、
湘南の海を読む力は確実にワンランク上がる。
