※βです still have room for improvement.遊びで作ったので改良は未定。
天気予報って毎日食い入るように見る割には、それが結局正しかったのか調べないですね。なんででしょう。「面倒だし、みんな暇でもないから」というのが最もありそうな可能性。
仮の、仮の話で。「6日後は雨だ」と言っても6日後の天気が当たっている確率が”仮”に20%だったら大変ですね。つまり8割雨降らないんだから天気予報を見ないか天気予報の逆になると仮定して生活した方が良いことになったら大變た!。
そこでどれくらい当たってるのか計算するマシンを手作りしました~ぺぺぺぺ~ん(ファンファーレ)。
今回やって分かったのは、天気は(僕が素人なのも悪いけど)本当よく分からない。正直VL8が通過する瞬間だけ晴れてればいいんですが。
天気予報正解率 計算マシン(気象庁用)β
※日本、気象庁、東京都千代田区のみ対応
※手作りなので、全てのクレームは僕にください。
※Windows Chrome、Android Chromeでデザインは試した。他は崩れたらメンゴ。
正答率 結果
2020.10.01から2021.01.22のそれぞれの日に対する予報をスコア化
114日分の平均
予報スコア | 予報完全正解率 | 最高気温誤差 | 最低気温誤差 | |
---|---|---|---|---|
6日前 | 83.99 | 63.15% | 1.37℃ | 1.96℃ |
5日前 | 84.59 | 64.91% | 1.18℃ | 1.97℃ |
4日前 | 86.35 | 67.54% | 1.22℃ | 1.68℃ |
3日前 | 87.24 | 69.29% | 1.18℃ | 1.59℃ |
2日前 | 88.44 | 73.68% | 1.17℃ | 1.44℃ |
1日前 | 92.58 | 82.45% | 1.18℃ | 0.98℃ |
分かった事1:
6日前の予報完全正解率は63.15%だが 1日前は82.45%まで上がる。スコアは83.99→92.58だ(スコアは僕の独断で作ってます。後述)。気温は最高気温は1.37℃くらいの誤差→ 1.18℃ 最低は 1.96℃→0.98℃ 誤差1℃前後~2℃以内くらいになっている。
当たり前といえば当たり前だが当日に近くなるごとに正確さが上がっていて割と出鱈目ではない事が分かった。宇宙にバンバン衛星飛ばしまくって出鱈目立ったら困るけど。気象庁ってちゃんと仕事してるんですね…
分かった事2:
テーブルは省くが、天気が一定して晴れている12/1から1/22の期間は無茶苦茶当たっている。その期間の予報完全正解率は6日前89.77→1日前96.16で、8%前後上昇する。予報スコアは6日前で89.77→1日前96.16
想定内だけど晴れを晴れと予想するのは簡単なようだ。
ただし気温の予報の精度はほぼ変化なし。
分かった事3:
6日前の場合、晴れっていってたのに雨降るor曇りっていってたのに雨ふる日が4日ずつ、合計8日ある。114日/8日 =7%くらいの確率。
6日前の場合、雨が降る
を予想してない。まあこれは時々〜と後〜を削除したせいかもしれん
(データ取り始めたのが10月1日で、降水が少ない冬だからというのもあるかも。梅雨ならもっと上がるかな?)
6日前:
予報→観測値
晴→晴42日/曇→曇30日/雨→雨0日
晴→曇16日/晴→雨4日
曇→晴18日/曇→雨4日
雨→晴0日/雨→曇0日
予報→観測値
晴→晴53日/曇→曇38日/雨→雨3日
晴→曇8日/晴→雨0日
曇→晴7日/曇→雨5日
雨→晴0日/雨→曇0日
1日前の場合、晴れ予報→降水は流石に無い。(前日でそんなポカしたら流石に人工衛星の意味が無さすぎるけど)
一旦上記のようになる。以下からロジック説明。
ロジック
①予報正確スコア
100点(完全正解)
晴→晴 雲→雲 雨→雨
66点(雨は降らないだけマシ)
晴←→雲
33点(雨が降るとむかつくから)
雲←→雨
0点
晴←→雨
②予報完全正解率
100点
晴→晴 雨→雨 雲→雲
0点
それ以外は全部
③降水予知(単日のみ)
予報で”雨”があって観測値で1mm以上あればOK。
それの逆:NG、裏:NG、対偶:OK
※もっと詳細は「単純化」の章を参照。
実装方法
ここからは個人的な事どうでもいい愚痴含むので興味なければ読まなくていいです。
実装の考え方は、
- 毎日バッチで天気予報のサイト–今回は気象庁 –から取って保存しておく。(過去の天気予報はどんどん消えていく)
- ①を気象庁の観測地と比較する
で終わるはず。しかし、重大な問題が発生した。
ロジックをどうするんだよ
1のバッチ処理については構文解釈して(これが作業的に超めんどかった)、DBに毎日定時でぶちこめば良い。
2の気象庁との観測地と比較がアカンかった。
そもそも天気予報の正解ってなんだよ
天気予報では主に
- 天気「晴れor曇りor雨雪」
- 気温「最低&最高」
が多数の人の関心毎だと思う。
調べる対象物を一旦この2つにする。
(前者に「降水確率」が絡んでくるが僕はあの項目は見てないし、晴れ曇り雨マークと気温の2種類で良いことにする)
(船舶関係者など職種によっては風の予報を気にする人が居るかも。今回はスキップ)
ここで大問題が。
気温はまだ良いにしても天気の正解ってなんだよ
何をもって天気予報が当たったと定義するか、よくわからない。天気の専門家に聞きたい所だが知り合いに居ないし。そもそも過去の天気予報がどの程度当たったかわざわざ公開している機関はないので、あんま公表したくないんだとおもう。というのが第一。
第二に、そもそも自然界の事象なので機関が悪いというよりもまず、1月1日 am0:01の天気と1月1日pm11:59の天気が同じと考えるほうがおかしい。そう考えると僕の作ったマシンを見る事自体は、単に単純化された基準を無理やり自然にあてはめて比較してるだけなのでナンセンス。と思ったあなたは戻るボタンを押そうぜ。誰より僕がそうしたいわ。
2.1気温
「気温は温度差の絶対値でどれくらい差が出るか」でOKということにしよう。その差分で予報の精度がわかる。
2.2天気:まじであかん
2020年10月1日の天気(実測値 東京 気象庁)
曇時々晴一時雨 |
快晴 |
まず、曇りなのか晴れなのか雨なのか快晴なのかわからない。
しかも、左手が6am~18時で、右が18時から翌6amだ。日付跨いでるじゃん。
実際、降水0mmの日なのに午後(18時~6am)に雨と書かれている日もある。時間毎観測値を見ると深夜3時ごろに雨が降っていた。
次に酷いのが、観測値には「快晴」「大雨」「薄曇り」は存在するが、予報にはそれらは存在しない。
もはや何が何だかわからない。
単純化
こういうときは物事を単純化するしかない。とりあえず観測値についている妙なものは全部切断する。
- 頭のヘンな文字は消す。
- 2文字目以降は消す
- 雪=みぞれ=雨
1、薄曇 →曇 快晴 →晴
2、曇時々晴一時雨 →曇
3、雪みぞれ雨は気温の問題なので、天気では無視し「雨」に統一
ということにした。
こうすると天気は「晴」「曇」「雨」だけになる
スコア制と完全正解率
- スコア制
- 完全正解率
①スコア制
100点(完全正解)
晴→晴 雲→雲 雨→雨
66点(雨は降らないだけマシ)
晴←→雲
33点(雨が降るとむかつくから)
雲←→雨
0点
晴←→雨
②完全正解率 (True False)
100点
晴→晴 雨→雨 雲→雲
0点
それ以外全部
天気予報情報のソース選定
日本では天気予報を発表するのに資格というか国の認可が必要らしく、weathernewsは珍しく民間で天気予報を発表することが赦されているらしい。
- 気象庁
- 日本気象協会
- weathernews
これらが日本で天気発表してる機関だ。
とりあえず大手町(千代田区)の観測点を取る。地域、雪国や乾燥した瀬戸内海などで予報の当たり易さは差異がありそうだがめんどいので東京のみにした。気になる人は各自やってね。
千代田区の10日間天気(6時間ごと) – 日本気象協会 tenki.jp
気象庁のみになった。
理由は後者2つは著作権ピーチクパーチクなので、関わりたくないから見なかった事にする。後者2つについては僕は日記つけてるということにしとく。
DO IT
あとはやるだけ。
- 取得してDBにバッチで毎日入る
- 確定した天気観測値を気象庁から取得
- 1と2を比較
- 表示
あとはばあーっとPHPで書きました!
※一応だけど、気象庁のデータを取ってるのは1日1回のバッチだけで、
今回自作したサイトで「ぽち」を押したとき発生するリクエストはこのサーバーだけなので気象庁にはそんな負担掛かってないです。
めも
天気の正解を知りたいというのは50%くらいの理由で、実際は最近高齢になり認知力が衰え何もしてないとアルツハイマーが進行しそうなのでつくりました。
ソースコードは我ながら汚すぎてとても… その場しのぎを連結しまくったフランケンシュタイン。
文字列操作
PHP – imgタグの文字列から画像ファイルのパスを取得したい|teratail
[PHP] 別のPHPファイルを読み込む (include, requireの利用)
phpQueryってぶっちゃけたーみねーとした技術なんですかねリファレンスがアーカイブだ。
Google Code Archive – Long-term storage for Google Code Project Hosting.
小技
basic
【phpQuery】で簡単WEBスクレイピング!をしてみた。 | 株式会社パーソンリンク
PHP 周期的にPHPを走らせる | 情報ビジネス支援クラブ