タイムステップが異なる時系列データからチャートを作成する

タイムステップが異なるデータからチャート、例えば折れ線グラフを書く場合、皆さんどうしてますか?たまにタイムステップ(時間間隔)の違うデータを比較したことがあるんですよね。

こういうの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)
Pocket

コメントする

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