TRNSYSの出力をPythonで取り扱う
TRNSYSの計算結果の出力の仕方はいくつかあります。Type65やType25がよく使われますが、ファイル形式としてはタブ、ペース区切りのテキストで書き出されます。
以下のリストはType25の出力例ですが、あまり読みやすいとは言えないですよね。
TIME TAIR_first_floor TOP_first_floor QHEAT_first_floor QCOOL_first_floor QELEQUIP_first_floor QELLIGHT_first_floor RELHUM_first_floor HOURS NAV NAV NAV NAV NAV NAV NAV
+0.0000000000000000E+00 +2.0000000000000000E+01 +2.0000000000000000E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +0.0000000000000000E+00 +0.0000000000000000E+00 +5.0000000000000000E+01
+1.0000000000000000E+00 +1.9830580301500703E+01 +1.9808233467796263E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +9.6768000000000015E+01 +0.0000000000000000E+00 +5.0010156123633521E+01
+2.0000000000000000E+00 +1.9734312966979235E+01 +1.9765312092721750E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +9.6768000000000015E+01 +0.0000000000000000E+00 +4.9484453863858377E+01
+3.0000000000000000E+00 +1.9771681072855184E+01 +1.9775732049503631E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +9.6768000000000015E+01 +0.0000000000000000E+00 +4.8758186593351304E+01
+4.0000000000000000E+00 +1.9727156805112390E+01 +1.9738355860938952E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +9.6768000000000015E+01 +0.0000000000000000E+00 +4.8300004863545269E+01
+5.0000000000000000E+00 +1.9696067740399105E+01 +1.9704197754226797E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +9.6768000000000015E+01 +0.0000000000000000E+00 +4.7823173447143830E+01
+6.0000000000000000E+00 +1.9649950794393828E+01 +1.9658051948204182E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +9.6768000000000015E+01 +0.0000000000000000E+00 +4.7411311457958369E+01
+7.0000000000000000E+00 +1.9598627168756757E+01 +1.9606091282868359E+01 +0.0000000000000000E+00 +0.0000000000000000E+00 +9.6768000000000015E+01 +0.0000000000000000E+00 +4.7033436866017283E+01
これを通常はExcelへ読み込んで、10進表記やチャートに加工して結果を検討します。(ちょっと手間が掛かります)
Pythonで加工する
計算結果をもう少し手軽に加工できないか考えてみました。PythonにはCSVを扱う便利なパッケージが用意されているので、今回はその中からPandasを使ってDataFrameへ展開してみます。
#utf-8
import pandas as pd
# read the csv file and remove an unnecessary row.
csv_filename = 'type25a.txt'
csv = pd.read_csv(csv_filename, delim_whitespace=True)
df = csv.drop(0) # remove the first row.
timestep = 1.0
step=str(timestep)+'H'
dt = pd.date_range('1995-01-01 0:00',periods=8761,freq=step) # series for datetime column.
df['datetime']=dt
print(df)
ほんの数行でCSVのデータからDataFrameへ変換できます。ここでポイントは2箇所有ります。
空白、タブ区切りの指定
まず、最初は区切り文字の指定。Type25の出力は空白、タブで区切られています。何も指定せずに読み込むと、タブなどがデータとして誤って解釈されます(NaNとして扱われる)
以下のようにdelim_whitespaceを使って空白、タブ区切りを指定します。
csv = pd.read_csv(csv_filename, delim_whitespace=True)
不要な行の削除
2つめは2行目の削除です。テキストの1行目はカラムの名前、2行目には単位が書き出されています。この2行目の部分は値としては不要なので、読み込み後に削除しておきます。
下の図の赤枠部分。ここはカラム名でもデータでもないので削除しておきます。
やり方としては、下のコードのようにDataFrameの最初の行を削除すればOKです。
df = csv.drop(0)
以上でDataFrameへ展開、不要なデータの削除ができました。あとは、DataFrameの機能を使って必要に応じて加工することができます。
上記のサンプルでは日付時刻のカラムを追加しています。やはり通し時間(Hour)よりも日付時刻の方が分かり易いですよね。
Jupyterの実行例
動作環境
以下の環境で動作を確認しています。
Windows10 Pro(64bit)
Python:Anaconda 5.1(Python 3.6/64bit)
TRNSYS18.00.0017(64bit)
2件のピンバック
TRNSYSの計算結果をPlotlyでグラフにしたら見やすかった件 – 建築環境工学系日記
TRNSYSの計算結果をPlotlyでグラフにしたら見やすかった件 | 建築環境工学系日記