見出し画像

1か月予報の時系列図に実況データを追記してみる

長期予報はなかなか利用するのが難しい。どのくらい信用してよいのか、判断がつきません。実際はどうだったのか?今年4月からの時系列図について、予報図に4週後の予報図の実況を追記するプログラムを書いてみました。

4週前までの予報は

結果に関しては予報通りのとき、そうはならなかったときと様々でした。今年4月からの図は以下のURLから閲覧できます。

https://seasonal-forecast.com/1m/1m.php

ここでは、直近4週前までの朱書き追記した図をご紹介します。

10/7の時系列図

画像1

9/30の時系列図

画像2

9/23の時系列図

画像3

作成したプログラム

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)

何の意味がある?

予報がどうだったかを知ったところで、最新予報の未来がわからなければどうしようもないのですが、予報の確かさ、不確かさを知っておくことも大切なんだろうと思っています。さらには、アンサンブル予報のメンバーのどれもが予報しない範囲にまで逸脱することもあるのですが、その期間に何が起こっていて、予報と実況の乖離が生じていたのかを知ることができれば、今よりも長期予報が活用できるのではないかと思ってみたりします。

この記事が気に入ったらサポートをしてみませんか?