Type2625 JSON Printer
少し前にTRNSYS Type65を改良してJSON形式の出力機能を試作しました。
しばらく試してみましたが、使っていると出力するJSON形式をあれこれ調整したくなります。具体的には、
- タイムステップはHourじゃなくて日付時刻で出力したい。
- 数字は指数表記、十進表記を切換えたい。
- 設定用のプラグインも用意したい。
などなど。ところがこれらの機能拡張のためにParameterを増やすと、既存のType65と互換性がなくなっってしまいます。
Type2625 JSON Printer
上記のような理由で新しく専用のコンポーネントを作り直すことにしました。
主な機能は次の通りです。
- JSON,CSV形式の両方に対応
- タイムステップは通常のHour(通し時間)と日付時刻に対応
- 指数表記、十進表記に対応
インストールするとSimulation StudioのDirect Access Toolbarに「JSON Printer」のフォルダが追加されます。使い方はType25 Printerとほぼ同じです。
JSON,CSVの切替
パラメーターでJSON,CSVの出力を切換えられるようにしてあります。出力例を以下に示します。
JSON形式
タイムステップ0.25h(15分)ステップで3ステップ分抜粋したのが下のデータです。日付時刻と値が一目で分ります。
{
"1995-01-01T00:00:00.000":{
"DryBulb":0.000000,
"DewPoint":0.000000,
"RH":0.000000,
"TI":0.000000
},
"1995-01-01T00:15:00.000":{
"DryBulb":21.250000,
"DewPoint":18.350000,
"RH":83.125000,
"TI":0.000000
},
"1995-01-01T00:30:00.000":{
"DryBulb":21.150000,
"DewPoint":18.250000,
"RH":83.375000,
"TI":0.000000
},
CSV形式
こちらも3ステップ分の抜粋です。日付時刻、十進表記で読みやすくなっています。
TIME, DryBulb, DewPoint, RH, TI,
1995/01/01 00:00:00, 0.000000, 0.000000, 0.000000, 0.000000,
1995/01/01 00:15:00, 21.250000, 18.350000, 83.125000, 0.000000,
1995/01/01 00:30:00, 21.150000, 18.250000, 83.375000, 0.000000,
このCSV形式はExcelでそのまま開けます。下の画像のように日付時刻も含めて、すっきりした形式で読み込まれます。
パラメーターの設定で、通常の指数表記にも切換えられるようにしてあります。
TIME, DryBulb, DewPoint, RH, TI,
+0.0000000000000000E+00, +0.0000000000000000E+00, +0.0000000000000000E+00, +0.0000000000000000E+00, +0.0000000000000000E+00,
+2.5000000000000000E-01, +2.1250000000000000E+01, +1.8349999999999998E+01, +8.3125000000000000E+01, +0.0000000000000000E+00,
+5.0000000000000000E-01, +2.1149999999999999E+01, +1.8250000000000000E+01, +8.3375000000000000E+01, +0.0000000000000000E+00,
JSON Printer Plug-in
JSON Printer用に専用のプラグインを用意しました。ファイル形式と日付時刻、値の形式を切換えられるようにしてあります。
設定に合わせて出力例も表示して、形式を確認できるようしてあります。(注:確認用のサンプルです。計算が実行されるまでどのようなデータがくるのか分らないので、実際の出力とは異なります。)
JSONの読み込み例
JSON形式のファイルは標準的なフォーマットです。簡単なプログラムで読み込み展開できます。
以下はPython、Pandas、Matplotを使ってデータ読み込み、日平均やグラフを描いた例です。
JSONの読み込みと日平均
Pandasでデータを読み込んで日平均を計算する処理ですが、ご覧のようにたったの3行です。
import pandas as pd
df = pd.read_json(r"WeatherData_single.json", orient='index')
df.resample('d').mean()#日平均
実行例
読み込んだデータでグラフを描く
つづいて、読み込んだデータをmatplotを使ってグラフを描く例です。
import matplotlib.pyplot as plt
df.plot(subplots=True, layout=(2,2)) #4項目すべて2x2のレイアウトでプロット
特定のデータだけ指定してグラフを描く場合はこんな感じ。
df['DryBulb'].plot() #1項目だけ抽出してプロット
まとめ
JSON形式のファイルはプログラムで扱うのが非常に簡単です。シンプルなCSV形式にも対応しています。
このType2625 JSON Printerは日本語サプリメントで配布予定です。
動作環境
以下の環境で動作を確認しています。
- Windows10 Pro(64bit, 21H1)
- TRNSYS18.04.0000(64bit)
- Microsoft Visual Studio Professional 2019
- Python:Anaconda3 2021.05(Python 3.8.8 64-bit)