0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境省のWBGT予測値をDuckDBへ保存し、実況・予測を分ける時系列APIを作る release 0.0.5α Step 2

0
Posted at

環境省のWBGT予測値をDuckDBへ保存し、実況・予測を分ける時系列APIを作る(r0052) release 0.0.5α Step 2

はじめに

遂に酷暑日が現れましたね。35°は当たり前の時代になりました。

前回のr0051では、環境省のWBGT実況値を取得し、検証後にDuckDBへ保存するところまで作成しました。

r0052では予測値を追加します。目標は、単に予測値を保存するだけではなく、時系列グラフで次の境界を扱いやすいAPIにすることです。

ChatGPT Image 2026年7月13日 13_11_18.png

今回追加する処理

ChatGPT Image 2026年7月15日 09_22_34.png

主な追加内容は次のとおりです。

  • getForecastData APIへの対応
  • 予測値の単位変換
  • 発表時刻ごとの予測履歴保存
  • 実況値と予測値を分ける時系列API
  • 最新発表版の選択
  • サンプルJSONと自動テスト

予測値の保存方法

予測APIには、発表時刻と予測対象時刻があります。

reference_time : 予測を発表した時刻
forecast_time  : 予測の対象時刻

同じ15時の予測でも、10時発表版と11時発表版では値が変わる可能性があります。そのため、次の複合キーで保存します。

wbgt_no + reference_time + forecast_time

古い発表版を上書きせず、後から予測の変化を確認できるようにしています。

予測値の単位

APIの forecast_val は10倍整数として扱います。

305 → 30.5
300 → 30.0

DuckDBには元の整数と変換後の値を両方保存します。

時系列APIの選択規則

実況値:timestamp <= boundary_time
予測値:timestamp > boundary_time
予測版:reference_time <= boundary_time のうち最新

実況値は現在時刻と同じ時刻を含めます。予測値は現在時刻より後だけです。

同じ観測時刻に推定値と実測値がある場合は、実測値を優先します。

API

GET /api/timeseries/{wbgt_no}

呼出し例です。

http://localhost:8000/api/timeseries/14163?current_time=2026-07-12T11:30:00%2B09:00&past_hours=24&future_hours=24

レスポンスは実況値と予測値を分けています。

{
  "boundary_time": "2026-07-12T11:30:00+09:00",
  "forecast_reference_time": "2026-07-12T11:00:00+09:00",
  "observations": [],
  "forecasts": []
}

フロントエンドでは、boundary_timeに縦線を引き、observationsを実線、forecastsを破線で表示できます。

動作確認

ZIPファイルをダウンロードして、解凍してください。
解凍後のフォルダーで作業を進めます。

start_server.bat
fetch_now_sample.bat
show_timeseries_sample.bat

サンプルでは、実況値4件、予測値8件を保存します。地点14163の時系列APIは、11時30分を境に実況2件、予測3件を返します。

テスト

run_tests.bat

予測値の単位変換、複合主キー、最新発表版の選択、境界条件を確認します。

まとめ

r0052で、実況値と予測値を同じDuckDBで管理し、現在時刻を境に分けて返せるようになりました。

次の段階では、この時系列APIをOpenLayersの地点ポップアップとPlotlyのグラフへ接続します。

参考リンク


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?