はじめに
機械学習を使って電力需要予測をするという記事を公開しているのですが、予測に気温のデータが必要であることから、どうしても使い勝手が悪い。
ということで、未来の気温データを取得する方法を探していたらWeahter UndergroundというサイトのAPIで10日間分の時別の気温予報データが取得できることがわかったので、そのやり方をまとめます。
ちなみに、以下のサイトを参考にさせて頂きました。
Google Weather APIがサービス終了して天気予報難民に -> 帰ってきたうみったー
データを取得してCSV形式で保存
東京都のデータを取得する例を以下に示します。
wu.rb
require 'open-uri'
require 'json'
require 'date'
uri = URI.parse('http://api.wunderground.com/api/[your API key]/hourly10day/lang:JP/q/Japan/Tokyo.json')
json_string = uri.read('r:binary').encode("UTF-8", invalid: :replace, undef: :replace)
parsed_json = JSON.parse(json_string)
temps = "MONTH,WEEK,HOUR,TEMP\n"
parsed_json["hourly_forecast"].each do |val|
y = val["FCTTIME"]["year"].to_i
m = val["FCTTIME"]["mon"].to_i
d = val["FCTTIME"]["mday"].to_i
h = val["FCTTIME"]["hour"].to_i
t = DateTime.new(y,m,d,h,0)
w = t.wday
temp = val["temp"]["metric"]
temps += "#{m},#{w},#{h},#{temp}\n"
end
File.open("tokyo.csv", "w") do |f|
f.puts(temps)
end
tokyo.csvの中身は以下のようになっています。
MONTH,WEEK,HOUR,TEMP
4,2,6,19
4,2,7,21
4,2,8,21
4,2,9,22
4,2,10,23
4,2,11,23
4,2,12,23
4,2,13,24
...
取得したデータで電力需要を予測
上述した電力需要予測の記事で示しているコードに以下を追記します。
# データ読込
filename = "tokyo.csv"
df = pd.read_csv(filename)
# 入力データの取得
X = df.as_matrix().astype('float')
# 正規化
X_pred = scaler.transform(X)
# 予測
result = model.predict(X_pred)
# データフレームに追加
df["KW"] = result
# グラフ描画
df.KW.plot(figsize=(15, 3))
...この予測結果が正解か否かは、これから電力会社さんが公開して下さる電力使用実績データと比較しないとわからないですけどね(^_^;)