公的なデータというと年次や月次のものを思い浮かべますが、は違います。各電力会社が管内の実績を、30分または1時間ごとに公開しています。粒度が細かいので、他のデータに重ねる素材として扱いやすい部類です。
取得はではなくのダウンロードが中心です。電力の使用量は、気温と強く連動します。夏の猛暑日と冬の寒波で跳ね上がり、春秋は落ち着く。加えて曜日の影響も大きく、平日と休日ではっきり差が出ます。外部要因が読みやすいデータなので、分析の練習にも向いています。
会社ごとにファイルが分かれている
取得で最初に当たるのが、電力会社ごとに配信の形が違うという点です。全国分をまとめて配信している場所は限られており、多くは各社が個別に を置いています。列名も、時刻の刻み方も、単位も揃っていません。
これは EP.20 で扱った取引所ごとの差と同じ構図です。差を吸収する層を作って、下流からは同じ形に見せるのが定石になります。会社が増えても、対応表に1行足すだけで済みます。
import pandas as pd
# 会社ごとに列名が違う。ここに閉じ込めて、下流には同じ形で渡すCOLUMN_MAP = { "company_a": {"DATE": "date", "TIME": "time", "実績(万kW)": "demand_10k_kw"}, "company_b": {"日付": "date", "時刻": "time", "使用実績": "demand_10k_kw"},}
def normalize(df: pd.DataFrame, company: str) -> pd.DataFrame: mapping = COLUMN_MAP[company] missing = set(mapping) - set(df.columns) if missing: raise KeyError(f"{company} に想定した列が無い: {missing}。配信形式が変わった可能性")
out = df.rename(columns=mapping)[list(mapping.values())].copy() out["company"] = company return out日本の電力データは 万キロワット を単位にしていることがよくあります。会社によって単位が違う場合、揃えずに合計すると1万倍ずれます。列名に単位を含めておくと、後から見たときに気づけます。
24時と0時、そして時刻の重複
時刻の表記にも癖があります。1日の終わりを 24:00 と書く形式があり、標準的な日時として解釈しようとすると失敗します。前日の 24:00 は翌日の 0:00 なので、日付を1日進めて変換する必要があります。
また、30分刻みのデータでは1日48件が基本ですが、年に2回だけ件数が変わる地域があります。夏時間の切り替えがある国のデータを扱う場合、1日が46件や50件になります。件数を48で固定して検査すると、その日だけ誤検知します。
from datetime import datetime, timedelta
import pandas as pd
def parse_hour24(date_str: str, time_str: str) -> datetime: """24:00 を翌日 0:00 として扱う。素直に解釈すると例外になる。""" time_str = time_str.strip() if time_str.startswith("24:"): base = datetime.strptime(date_str, "%Y/%m/%d") + timedelta(days=1) rest = time_str.split(":", 1)[1] return datetime.strptime(f"{base:%Y/%m/%d} 0:{rest}", "%Y/%m/%d %H:%M") return datetime.strptime(f"{date_str} {time_str}", "%Y/%m/%d %H:%M")
def check_daily_count(df: pd.DataFrame, expected: int = 48) -> pd.Series: """1日あたりの件数を数える。48 以外の日を洗い出す。""" counts = df.groupby(df["datetime"].dt.date).size() return counts[counts != expected]過去分は消えることがある
配信されている期間には限りがあります。直近1年ぶんだけを置いていて、古いファイルは順に消えていく、という運用は珍しくありません。必要になってから取りに行っても、もう無いという事態が起こります。
これは EP.05 で扱った「取り直せないデータ」に当たります。使う予定が決まっていなくても、取り始めた時点から生のまま貯めておく価値があります。量は年間でも数十メガバイト程度に収まります。
貯めるときは日付でしておくと、後から範囲を絞って読めます。時刻の扱いは を付けた状態で統一しておいてください。会社ごとにファイルを分けて取るので、結合する段になって時刻がずれていると気づくのでは遅すぎます。
重ねる相手を選ぶ
電力需給は他のデータと重ねてこそ意味が出ます。気温と重ねれば需要の説明になり、経済活動の指標と重ねれば景気の代理指標として使えます。粒度が細かいので、相手に合わせて粗くすることになります。
で時刻を索引にして粗くするのが素直です。粗くするときは、合計なのか平均なのか最大値なのかを目的で選んでください。1日の電力需要を代表させるなら、合計より最大値のほうが実態を表すことがあります。ピークがどこまで上がったかが、設備の観点では重要だからです。
気象データとの重ね合わせについては データの宝石箱 EP.03 が参考になります。次回は、公的データ全般に共通する「数字が後から変わる」問題を扱います。
電力のデータは、公的なオープンデータの中では珍しく粒度が細かく、しかも毎日更新されます。取得の練習台としても、実際の分析素材としても扱いやすい部類です。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。