九州電力の電気使用実績データ(2011年11月~2018年8月/日毎)をひとまとめのデータに加工する
Pythonを使い電力消費量と気温の相関を取ろうと思います。事前準備として九州電力の電気使用実績データをpandas DataFrameにサクッと加工していきます。
九州電力の電気使用実績データは以下のサイトに掲載されています。CSVデータは時間毎。日毎のデータを取る場合は『過去の電力使用実績データ』ページのHTMLから整形していくのが良いでしょう*1。
公開ページ
個別月ページ(2014年1月)
これは以前書いた記事の応用です。
大まかな作業の流れ
- 基本になるDataFrameを作成する
- 個別月ページを順次読み込み、テーブルをDataFrameに格納する
- 基本のDataFrameに各月のDataFrameを足す
urllib, pandasを使います。
基本になるDataFrameを作成
空のDataFrameを作ってもいいですが、今回は直近月から一個DataFrameを作りました。
import pandas as pd from urllib.request import urlopen url = "http://www.kyuden.co.jp/power_usages/history201808.html" f = urlopen(url) html = f.read() df_temp = pd.io.html.read_html(html)
df_temp[0].head で中身を見ると1行目にカラム名が格納されています。
1行目をDataFrameのカラム名として修正します。
df = df_temp[0].loc[1:] df.columns = df_temp[0].loc[0]
これを基本のDataFrameにします。
個別月ページの読み込みと追加
個別月のページを1枚づつ読み込みます。url が http://www.kyuden.co.jp/power_usages/history<年+月>.html なので年月のリストを作って for で呼び出していきます。
year_month = [] year_month.extend(["201111", "201112"]) year = [f for f in range(2012, 2018)] month = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"] for i in year: for j in month: year_month.append(str(i) + j) month_2018 = ["01", "02", "03", "04", "05", "06", "07"] for k in month_2018: year_month.append("2018" + k)
大変スマートでは無い方法で年月リストを作りました。もっとスマートな方法があるはずなので奇特な方コメントかTwitterで教えてください。
このリストを使って各ページから情報を引っ張ってきます。
for i in year_month: url = "http://www.kyuden.co.jp/power_usages/history" + i + ".html" f = urlopen(url) html = f.read() df_temp = pd.io.html.read_html(html) df_add = df_temp[0].loc[1:] df_add.columns = df_temp[0].loc[0] df = df.append(df_add)
全部で2,441レコード。ハマりポイントなんですが、DataFrame の append は非破壊的なので代入しないと追加されません。これしばらく悩みました。
後は日付の部分、単位”万kW”を加工して分析していきます。今日はここまで。
*1:全部まとめて落とすことができるURLあったら教えてください