気温と電力需要

一日の最大電力と気温の関係(一般電気事業者ごと) - 中部 は,東日本で2011年の震災前と震災後の違いが際立って読み取れるが,中部電力管内では2クラスタに分かれるように見える。なぜか。とりあえず2014年度だけについて調べてみた。

中部電力|電力需給状況のお知らせから過去の電力需要実績(2014年度)(PDF)をダウンロードし,次のようにしてテキストファイルに直す:

pdftotext -raw datalist_09.pdf

できた datalist_09.txt を次のRubyスクリプトでCSV化する:

#! /usr/bin/env ruby -w
# coding: utf-8

while line = gets
  if line =~ /^(\d\d\d\d)年(\d\d)月(\d\d)日 . (.*)$/
    x = "#{$1}-#{$2}-#{$3} #{$4}"
    x.gsub!(/,/, "")
    x.gsub!(/ /, ",")
    puts x
  end
end

できた datalist_09.csv をRに読み込む:

data09 = read.csv("datalist_09.csv", header=FALSE)

これをフラット(1データ1行)にする:

power = data.frame(datetime=seq(as.POSIXct("2014-04-01 01:00"),
                                as.POSIXct("2015-04-01 00:00"),
                                3600))
power$val = as.vector(t(as.matrix(data09[,2:25])))

気温データは気象庁の過去の気象データ・ダウンロードから取得する。具体的には,「地点を選ぶ」で名古屋,「項目を選ぶ」で時別値・気温,「期間を選ぶ」で2014年4月1日から2015年3月31日,「表示オプションを選ぶ」はデフォルト(値を表示・すべての期間の値を表示・すべて数値・日付リテラル)のまま。「CSVファイルをダウンロード」をクリックすると data.csv というファイル名でダウンロードされる。文字コードはShift JISだが,頭の5行を無視すれば文字コード無指定でも問題ない:

temp = read.csv("data.csv", skip=5, header=FALSE)

とりあえず全データをプロットしてみる:

plot(temp$V2, power$val, xlab="名古屋の気温(℃)", ylab="電力需要実績(発電端,万kW)")

冒頭のリンク先にある図は,毎日の最大電力の時間と,そのときの名古屋の気温をプロットしている。Rでは次のようにすればよい:

m = sapply(0:364, function(i){which.max(power$val[24*i+(1:24)])+24*i})
plot(temp$V2[m], power$val[m], xlab="名古屋の気温(℃)", ylab="電力需要実績(発電端,万kW)")

確かに2クラスタに分かれるように見える。曜日でプロットしてみる:

plot(temp$V2[m], power$val[m], type="n",
     xlab="名古屋の気温(℃)", ylab="電力需要実績(発電端,万kW)")
text(temp$V2[m], power$val[m], weekdays(power$datetime[m], abbreviate=TRUE))

どうやら曜日が関係するようだ。上のクラスタは月〜金で,下は土日に若干の金・月などが混ざっている。