タイムステップが異なる時系列データからチャートを作成する
2023年3月10日
2023年3月31日
タイムステップが異なるデータからチャート、例えば折れ線グラフを書く場合、皆さんどうしてますか?たまにタイムステップ(時間間隔)の違うデータを比較したことがあるんですよね。
こういうのExcelで簡単にできそうですよね。そんな気がして20~30分ほど試しましたが途中あきらめました。(よく分らなかった)
Excelで悩むなら、Pythonで処理する方が簡単そうな気がしてきました。そもそもタイムステップが違いは、加工してどちらかに揃えてしまえば良さそうです。
再サンプリングしてグラフを描く
PythonのPandasにデータの時間間隔を変更するメソッドがあります。それでタイムステップの違いを処理できそうです。
TRNSYSプロジェクト
例として用意したの図のプロジェクト。2室モデル演習のプロジェクトに室温の出力用にType25cを追加しています。これでタイムステップ1.0hと0.5hのデータを用意します。
チャートの処理
1.0hと0.5hの出力ファイルを読み込んでグラフ化するのは以下のコードです。グラフはPlotlyを使っています。
# ライブラリのインポート
import pandas as pd
import plotly.graph_objs as go
def load_csv(csv_filename):
"""Type25のCSV(タブ区切り)を読み込んでTime(Hour)を日付時刻のIndexとしたDataFrameを返す
"""
# CSVファイルを読み込む
df = pd.read_csv(csv_filename, delim_whitespace=True)
# 1カラム目(TIME)の値(Hour)を秒単位に変換する
df.iloc[:,0] = df.iloc[:,0] * 3600
# 1カラム目の値を日付時刻へ変換する
dt = pd.to_datetime(df.iloc[:,0], origin='2022-01-01', unit='s')
df['TIME']=dt
# 時刻列をインデックスに設定
df = df.set_index('TIME')
return df
if(__name__ == '__main__'):
df1 = load_csv('Tair_1.0h.out') # 1.0h
df2 = load_csv('Tair_0.5h.out') # 0.5h(30min)
# データを同じ時間間隔(例えば30分)に変換する
df1_resampled = df1.resample("30T").interpolate()
df2_resampled = df2.resample("30T").interpolate()
# # グラフに描画する
fig = go.Figure()
fig.add_trace(
go.Scatter(x=df1_resampled.index,
y=df1_resampled["Tair_Room1"],
name='0.5h(3min)'))
fig.add_trace(
go.Scatter(x=df1_resampled.index,
y=df2_resampled["Tair_Room1"],
name='1.0h'))
fig.show()
これを実行した結果が以下のチャート。いい感じで描けました。
動作環境
以下の環境で動作を確認しています。
- Windows11 Pro(64bit, 22H2)
- TRNSYS18.04.0001(64bit)