【python】時系列データで動くヒートマップを作る方法【plotly】

Python

こんにちは、snuowです。

時系列データの傾向を見る場合に、ヒートマップを作る場合があるかと思います。

エクセルでヒートマップを作るとなると、時系列データを並べなおしたり、カラースケールを設定したり、面倒なことが多いですよね。

そんな時に、pandasとplotlyを使用すれば簡単にヒートマップを作ることができます。

こんな感じのグラフ(ヒートマップ)ができます。

plotly.expressで動くヒートマップ(heatmap)を作る

読み込むデータ

今回読み込むデータは、下記のデータを読み込みます。サンプルのデータですので、いろいろな時系列データで応用が利くと思います。

SampleCode

下記のコードで実装できます。./sample.csvを適宜変更して、それぞれの時系列データに名称などを合わせてもらえれば他のデータでも応用が利きます。

# ライブラリの読み込み
import pandas as pd
import plotly.express as px

# csvを読み込んでデータフレームに変換する
df = pd.read_csv('./sample.csv',encoding='shift-jis',index_col=[0],parse_dates=[0])

# データフレームを1時間の合計値にリサンプリングする。
df = df.resample('h').sum()

# date/hour列を追加する
df['date'] = df.index.strftime('%Y/%m/%d')
df['hour'] = df.index.hour

#pivotを使って、テーブルデータを作成
pivot_df = df.pivot(index='hour',columns='date',values='電力量')

# グラフの描画
fig = px.imshow(pivot_df,y=pivot_df.index,x=pivot_df.columns,aspect='auto',color_continuous_scale=px.colors.sequential.Aggrnyl)
fig.show(config=dict(editable=True))

解説

まずは、ライブラリを読み込んでcsvデータをデータフレームとして読み込みます。

pandasはデータ処理用のライブラリで、plotly.expressは散布図描画用のライブラリです。pandasのread_csvを用いてデータを読み込みます。

# ライブラリの読み込み
import pandas as pd
import plotly.express as px

# csvを読み込んでデータフレームに変換する
df = pd.read_csv('./sample.csv',encoding='shift-jis',index_col=[0],parse_dates=[0])

使用したデータが15分データなので、resample('h').sum()で1時間の合計値データにしています。加えて、date列とhour列をデータフレームに追加しています。

date列、hour列は、それぞれデータフレームのindexからデータを作成しています。

# データフレームを1時間の合計値にリサンプリングする。
df = df.resample('h').sum()

# date/hour列を追加する
df['date'] = df.index.strftime('%Y/%m/%d')
df['hour'] = df.index.hour


データフレームを.pivot()で、index=hour,column=date,value='電力量'のマトリクスデータにします。

#pivotを使って、テーブルデータを作成
pivot_df = df.pivot(index='hour',columns='date',values='電力量')

実際に、どんなデータになっているかというと下記のようになっています。

グラフの描画は、px.imshowを使用します。

# グラフの描画
fig = px.imshow(pivot_df,y=pivot_df.index,x=pivot_df.columns,aspect='auto',color_continuous_scale=px.colors.sequential.Aggrnyl)
fig.show(config=dict(editable=True))

いかがだったでしょうか。このようにヒートマップを作ることで、時期ごとの傾向を色で判断できるため、データを確認する際に有効だと思います。また、エクセルと異なり、読み込むデータフレームを変更すれば別のデータもすぐにヒートマップにすることができるので、データ分析の際にも有効かと思います。

コメント

タイトルとURLをコピーしました