湘南の潮汐・風・波データを分析する方法

― 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アプリ開発まで発展できる

サーフィンの経験値が“データ”と組み合わさることで、
湘南の海を読む力は確実にワンランク上がる。


TideLog CSV Lite版(湘南2024)はこちら

👉 https://surf-ok-tools.booth.pm/


この記事で解説した考え方が、実際の波予報ではどのように使われているかを確認できます。

▶今日・週間の波予報とスコア判定を見る

※ Surf-OKは天気予報と同じように、「今日は入るか・見送るか」を判断するための情報を整理して提供しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

湘南エリアの波高・周期・風データをもとに、サーフィン可否を数値で判断する「Surf-OK 波予報」を運営。

日々の予報と実際の海を照らし合わせながら、「見た目では分かりにくい周期の影響」や「初心者が避けるべき条件」を整理して発信している。

感覚論ではなく、判断材料として使える波の読み方を中心に解説。

コメント

コメントする

目次