見出し画像

過去の天気予報データを蓄積するリポジトリを作りました

jniimi/weather_forecast_japan (Huggingface Datasets)
7日間先までの気象予測の値を取得しています。

まだ蓄積し始めなのでしばらくは使い物にならないと思いますが。

1. データ作成の背景

仕事の関係で気象関係のデータを使う必要ができたのだけれど、いい感じに使えるものがいまいちなかったので自分で作った。
完全データを使って変数間の関係性を事後的に明らかにするような類の解析なら観測値を使えばいいわけなのだけれど、もし天気が影響しうる時系列予測を行おうとするとそうもいかない。学習には観測値を使うけど実際の運用では予測値を使うなんていったら説明変数側の観測誤差だけでもかなりのバイアスが起きてしまう。そうなると、天気の変数も予測値として持っておく必要がある。

一応似たようなことをやってるサイトはいくつかあるんだけど、たとえば構造化データになっていなかったり、1日複数回発表されるデータのうちどの予報値なのかがちょっとよくわからなかったりと、データを扱う身としては少し不安なことが多い。あと、そういうものに分析を頼るべきではない。
今回はGitHub Actionsでデータを取得して、そのままHuggingface Datasets上のリポジトリにPushする。全部無料。いい時代になったよね。

2. 実際の取得データ

気象庁のウェブサイト上に、全国の22の気象台をベースにした『全国の天気予報(7日先まで)』https://www.jma.go.jp/bosai/forecast/ っていうページがあります。しかし、この情報って更新と同時に上書きされて消えちゃうんですよね。これを取ってきます。

本当は各気象台をクリックすると、地域別のさらに細かいデータが出てくるんですが、今回はとりあえずテストとして各気象台の代表値のみを取得することにします。ちゃんと回っていることを確認した上で、1ヶ月ぐらいを目処に拡張します。

3. それを取得します。

技術的な詳細は省きますが、静的ページではないので多少は労力を払うことになりました。

上の画像では頭に発表日時、各天気の左側に気象台の名前が書いてあるので、それを`from_date`、`from_hour`、`observatory_name`として取得しています。

個別の地域を`target_place`として変数化していますが、今回はまだ「地域全体」のみの状態です。それぞれに関して当日を含む8日間の情報を取得するって感じですね。

元のデータ自体があまりいい構造化データになってないので、変にいじるよりはスクレイピングで最低限の構造化のみ行なった上で、使いたい方が各々でいじってもらったほうがいいかなと思い、細かくは触っていません。そして、想定外の文字列が入って突然エラーになったりすると嫌なので全部str型にしてあります。

現に、これを動かし始めた直後の2024年8月25日には…

こういう特殊なのもあるわけだし、分析によってやりたいことも変わってくるだろうから変に条件分岐つけてもね。

4. 使い方の例

以下のGistに使い方をまとめてみました。それこそ全部strになっているので、その辺の扱い方など含めて簡単に。

5. 毎日更新されます。

随時とは言いませんが、単一のURLですし1時間に1回取りにいきつつ、重複をのぞいて更新させているので、GitHubが落ちるとかしない限りはよっぽど取りこぼすことはないんじゃないかなー。知らんけど。

しばらくしたら、実測値も合わせて追加されるように変更します。

@misc{jniimi2024weather,
    title = "7days Weather Forecast in Japan (Dataset)",
    author = "Junichiro Niimi",
    year = {2024},
    howpublished = {\url{https://huggingface.co/datasets/jniimi/weather_forecast_japan}},
    }


いいなと思ったら応援しよう!