【python】月毎に色分けして散布図を作る方法【plotly】

Python

こんにちは、snuowです。

時系列の2データの間の関係を見るときに、散布図を使いますよね。でも、エクセル等で年間データの散布図を作ると、全プロットが同じ色で表示されてしまうので見づらくありませんか?

今回は、その問題を解決するために時系列データを月毎に色分けして散布図を作成したいと思います。

こんな感じのグラフ(散布図)ができます。

使用したデータが悪いのはさておき、こういった形でプロットを月毎に色分けすることができます。

この方法を応用すれば、年単位での比較もできそうですね。

エクセルだとこんなグラフになってしまいます。

エクセルを使用して、同じデータの散布図を作成した場合は、こんな感じのグラフになります。

単色であるため、あまり傾向はつかみづらいのではないかと思いますが、サクっと可視化する分にはエクセルも悪くないとは思います。

月毎に色分けして散布図を作る

読み込むデータ

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

SampleCode

下記のコードで実装できます。

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

# データの読み込み
df = pd.read_csv('./sample.csv',parse_dates=[0],index_col=[0],encoding='shift-jis')

# データのリサンプリング
df = df.resample('h').mean()

# データの追加
df['month'] = df.index.month
df['date'] = df.index


# データの選択
select_item1 = '電力量'
select_item2 = 'ガス量'
df = df.loc[:,[select_item1,select_item2]]

# 散布図描画
px.scatter(
    data_frame=df,
    x=select_item1,
    y=select_item2,
    color=['{},{}_'.format(select_item1,select_item2) + str(month)+'月' for month in df.index.month]
)

解説

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

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

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

# データの読み込み
df = pd.read_csv('./sample.csv',parse_dates=[0],index_col=[0],encoding='shift-jis')

今回使用したデータが15分データだったので、resample('h').mean()で1時間の平均値データにしています。加えて、month列とdate列をデータフレームに追加しています。

# データのリサンプリング
df = df.resample('h').mean()

# データの追加
df['month'] = df.index.month
df['date'] = df.index


電力量とガス量を使って散布図を描きたいため、データフレームから2つのデータを抽出します。

# データの選択
select_item1 = '電力量'
select_item2 = 'ガス量'
df = df.loc[:,[select_item1,select_item2]]


抽出したデータフレームを使用し、散布図を作成します。px.scatter()で散布図を描くことができます。

# 散布図描画
px.scatter(
    data_frame=df,
    x=select_item1,
    y=select_item2,
    color=['{},{}_'.format(select_item1,select_item2) + str(month)+'月' for month in df.index.month]
)
data_frameデータフレームを指定します。
xx軸に表示するデータを指定します。
yy軸に表示するデータを指定します。
color配色を指定します。(今回、ここを工夫しています。)

下記のコードでは、電力量,ガス量_○○月という形で12月分のリストを作成しています。これをcolorに代入することで、各プロットの色を月毎にわけることができます。

color=['{},{}_'.format(select_item1,select_item2) + str(month)+'月' for month in df.index.month]

いかがだったでしょうか。このように月毎に色分けすることで月毎の傾向を分けることができるようになります。データを確認する際に役立てていただければと思います。

コメント

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