1か月予報の時系列図に実況データを追記してみる
長期予報はなかなか利用するのが難しい。どのくらい信用してよいのか、判断がつきません。実際はどうだったのか?今年4月からの時系列図について、予報図に4週後の予報図の実況を追記するプログラムを書いてみました。
4週前までの予報は
結果に関しては予報通りのとき、そうはならなかったときと様々でした。今年4月からの図は以下のURLから閲覧できます。
https://seasonal-forecast.com/1m/1m.php
ここでは、直近4週前までの朱書き追記した図をご紹介します。
10/7の時系列図
9/30の時系列図
9/23の時系列図
作成したプログラム
pythonのcv2ライブラリをメインに一部でpillowを使っています。
プログラミングは素人なのでやり方のまずさについてはご容赦ください。
import datetime
import time
import glob
import shutil
from PIL import Image
import numpy as np
import cv2
import matplotlib.pyplot as plt
流れはこんな感じです。
1)4週前予報図(file4),最新予報図(file0)を選択
2)最新予報図ファイルを読み出し、線画を抽出(白黒反転)
実況領域を抽出(解析図抽出)
3)背景とする黒のRGB画像を新規作成
4)先に解析図を所定の領域に書き込み
5)4週前予報図ファイルを読み出し、線画を抽出(白黒反転)
6)4)の画像に5)の線画を書き加える
ただし、4)の画像の赤部分は書き換えない
7)背景が白(255,255,255),線画が黒(0,0,0)になるよう、再度、白黒反転
# 4週前予報図への実況値書き込み
for f0,f4 in zip(files0,files4):
im = cv2.imread(f0)
#4週間後の実況値を赤で抽出
for y in range(im.shape[0]):
for x in range(im.shape[1]):
if im[y,x][0] == 0:#黒を白
im[y,x][0] = 255
elif im[y,x][0] == 255:#白地は黒:
im[y,x][0] = 0
im[y,x][1] = 0
im[y,x][2] = 0
else:
pass
#解析図抽出
im0 = im[219:543,215:509]
im1 = im[652:976,215:509]
im2 = im[1088:1412,215:509]
im3 = im[1522:1846,215:509]
im4 = im[1956:2280,215:509]
im5 = im[2390:2714,215:509]
im6 = im[219:543,1165:1459]
im7 = im[652:976,1165:1459]
#背景画像
mask = Image.new("RGB", (2048,2803), 0)
im_mask = np.array(mask)
#解析図貼付
im_mask[219:543,558:852] = im0
im_mask[652:976,558:852] = im1
im_mask[1088:1412,558:852] = im2
im_mask[1522:1846,558:852] = im3
im_mask[1956:2280,558:852] = im4
im_mask[2390:2714,558:852] = im5
im_mask[219:543,1508:1802] = im6
im_mask[652:976,1508:1802] = im7#im_maskは解析図画像
im_base = cv2.imread(f4)
base = np.array(im_base)
#4週間前の予報値 画素値反転
for y in range(base.shape[0]):
for x in range(base.shape[1]):
if base[y,x][0] == 0:#黒を白
base[y,x][0] = 255
base[y,x][1] = 255
base[y,x][2] = 255
elif base[y,x][0] == 255:#白地は黒:
base[y,x][0] = 0
base[y,x][1] = 0
base[y,x][2] = 0
else:
pass
#4週前予報図(base)に解析図(im_mask)を追加
for y in range(base.shape[0]):
for x in range(base.shape[1]):
if im_mask[y,x][0] == 255:#赤はそのまま
base[y,x][0] = 255
base[y,x][1] = 0
base[y,x][2] = 0
elif base[y,x][0] == 255:#元画像の白は黒
base[y,x][0] = 0
base[y,x][1] = 0
base[y,x][2] = 0
else: #他は白
base[y,x][0] = 255
base[y,x][1] = 255
base[y,x][2] = 255
dst = Image.fromarray(base)
save_name = save_path+'FCVV14_'+date4+'.png'
dst.save(save_name)
print(save_name)
何の意味がある?
予報がどうだったかを知ったところで、最新予報の未来がわからなければどうしようもないのですが、予報の確かさ、不確かさを知っておくことも大切なんだろうと思っています。さらには、アンサンブル予報のメンバーのどれもが予報しない範囲にまで逸脱することもあるのですが、その期間に何が起こっていて、予報と実況の乖離が生じていたのかを知ることができれば、今よりも長期予報が活用できるのではないかと思ってみたりします。