pandasで電力需給実績を可視化する

pandasで電力需給実績データを可視化しようと思ったら、変なところで詰まったのでメモがてら紹介します。

恥ずかしながら最近知ったのですが、2016年4月以降、旧一般電気事業者のWebページにて電源種別ごとの需給実績がcsv形式で公開されています。(東京電力の場合は以下のページ)

エリアの需給実績公表について|でんき予報の解説|東京電力ホールディングス株式会社

そのcsvファイルとpandasを使って各電源の出力と電力需要を可視化してみようと思います。

※エンコーダのエラー回避のため、事前にデータのheaderを英語表記に変えています。

まずはデータの読み込み。電力需給データのdataframeを作成します。今回は東京電力管内の2018年の電力需給データを使っています。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('area-2018.csv', sep=',', header=2)


次に、可視化したいデータだけのdataframeを全データが格納されているdataframeから作成します。
ここでは、4月1日の5時から23時までのデータを抜き出すことにします。また、電力需要だけ別のプロットをするので、電力需要データだけのdataframeも作成します。

T_str = 5
T_stp = 24
oneday = df[T_str:T_stp]
demand = df[T_str:T_stp]['Demand']

では、pandasのplotを使って、このdataframeを可視化してみましょう。
電力需要データは線グラフ、各電源の実績データは積み上げ棒グラフで重ねて表示させます。

ax = demand.plot(kind='line', legend=True, linewidth=3)
oneday.plot(kind='bar', 
            y=['Nuclear','Heat','Hydro','Geothermal','Biomass','PV','WG','Pump','Interconnection_Line'], 
            ax=ax, alpha=0.8, stacked=True, fontsize=13)
plt.legend(bbox_to_anchor=(1.05,1), loc='upper left', borderaxespad=0, fontsize=13)
plt.ylim(-500, 3500)
plt.xlabel('Time', fontsize=13)
plt.ylabel('Power [10^4 kW]', fontsize=13)

すると、電力需要データと各電源の実績データが一目瞭z…ってあれ?

f:id:ShiroNoir0000:20181024162212p:plain
ずれて表示される電力需要データ

線グラフの電力需要データだけがずれて表示されてしまいます。これは困った!

いろいろ試してみた結果、どうやら線グラフはプロットエリアの一番左を0として認識した上で、indexの番号を参照してプロットしているようです。
この問題を回避するため、ちょっと回りくどいですが、電力需要データのdataframeのindexを振りなおすことにしました。

demand = demand.reset_index(drop=True)

この処理を一枚かませてから表示させると、次の図のように、電力需要と電源出力の時系列データを対比させて表示させることができるようになりました。

f:id:ShiroNoir0000:20181024162231p:plain
電力需要と電源出力を重ねて表示できた。

すごく細かいことでしたが、思わぬところで時間を取られてしまったので備忘録としてまとめてみました。
(もっとスマートな方法があるかもしれませんが…^^;)