気象データから月別の平均、最低、最高気温を計算する

ちょっとばかり月別の気温の処理をしたかったので、拡張アメダス(拡張AMeDAS、EA気象データ)気象データを加工する簡単なスクリプトを書いてみました。メモ代わりに投稿します。

TRNSYSの処理は図のようなシンプルな構成でデータを出力します。

Type99-AMeDAS(拡張アメダス)からデータを出力
Type99-AMeDAS(拡張アメダス)からデータを出力

Type21からは月、日付、時刻を、Type99-AMeDASからは外気温のデータを出力します。コンポーネント接続は以下のようにします。

Type21からは月、日付、時刻を出力
Type99-AMeDASからは外気温を出力

Settingsの指定は1年分(0~8760h)をタイムステップ1hで出力します。

1年分をタイムステップ1h
1年分をタイムステップ1h

これを実行すると、以下のようなCSVが出来上がります。

 TIME                    	Month                    	Day                      	Hour                     	Ambient                  	
 HOURS              	NAV                 	NAV                 	NAV                 	                  	
  +0.0000000000000000E+00	  +0.0000000000000000E+00	  +0.0000000000000000E+00	  +0.0000000000000000E+00	  +0.0000000000000000E+00	
  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +4.9617647058823531E+00	
  +2.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +2.0000000000000000E+00	  +4.8499999999999996E+00	
  +3.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +3.0000000000000000E+00	  +4.5500000000000007E+00	
  +4.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +4.0000000000000000E+00	  +4.0500000000000007E+00	
  +5.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +5.0000000000000000E+00	  +3.5979166666666669E+00	
  +6.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +6.0000000000000000E+00	  +3.3479166666666669E+00	
  +7.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +7.0000000000000000E+00	  +3.0932291666666667E+00	
  +8.0000000000000000E+00	  +1.0000000000000000E+00	  +1.0000000000000000E+00	  +8.0000000000000000E+00	  +2.7859375000000002E+00	

このデータをPythonのスクリプトを書いて処理します。(Type25から出力されたファイルは「ea_tamb.csv」としています)

# coding: utf-8
# Example code for calculating monthly mean, minimum and maximum temperatures.
# author     Yuichi Yasuda @ quattro corporate design
# copyright  2019 quattro corporate design. All right reserved.

import pandas as pd
DAYS_OF_MONTH = (31,28,31,30,31,30,31,31,30,31,30,31)
labels = ['TIME','Month','Day','Hour','Ambient']
csv = pd.read_csv('ea_tamb.csv', delim_whitespace=True,encoding='cp932', skiprows=3, header=None, names=labels)

tamb = csv['Ambient']

start_of_month = 0
end_of_month = 0
print('    mean         min         max')
    
for days in DAYS_OF_MONTH:
    end_of_month = start_of_month + days*24
    monthly_data = tamb[start_of_month:end_of_month] #1ヶ月分の気温をスライス
    t_mean = monthly_data.mean() #平均気温
    t_min = monthly_data.min()   #最低気温
    t_max = monthly_data.max()   #最高気温
    start_of_month = end_of_month
    
    print('{:8.2f}\t{:>8.2f}\t{:>8.2f}'.format(t_mean, t_min, t_max)) #桁数を揃えて出力

これで12ヶ月分の月別平均、最低、最高気温が出力されます。

    mean         min         max
    5.73	   -0.84	   16.19
    6.46	    0.85	   13.54
    8.57	    1.60	   16.85
   15.01	    5.02	   24.54
   19.21	   11.15	   27.82
   21.08	   14.01	   31.04
   26.64	   20.32	   35.24
   27.27	   20.55	   33.51
   23.12	   14.55	   34.57
   17.91	   10.36	   28.32
   12.35	    2.37	   21.35
    9.01	    1.73	   17.42

この例では気温を処理していますが、湿度や日射量、室温など、他の値にも応用できます。

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
TRNSYS18.01.0001(64bit)
Python3.7.3

Pocket

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です