Es ist lange her, dass ich zuvor mit dem gleichnamigen Titel gepostet habe, und es wird ein wenig reif, also werde ich es erneut posten.
Bitte lesen Sie den folgenden Artikel, der am 22.12.2017 erstellt wurde. Stromverbrauchsprognose mit TensorFlow mit Keras
Laden Sie zunächst die Daten zum Strombedarf von der Tokyo Electric Power-Website herunter.
http://www.tepco.co.jp/forecast/html/download-j.html
http://www.tepco.co.jp/forecast/html/images/juyo-2016.csv
Wenn Sie die URL ändern, können Sie auch die Daten von 2014 abrufen.
http://www.tepco.co.jp/forecast/html/images/juyo-2014.csv
Die heruntergeladenen Daten sind eine CSV mit Datum, Uhrzeit und tatsächlicher Leistung.
Übrigens scheint es, dass Sie es auch mit dem folgenden Befehl erhalten können.
python
$ curl -O http://www.tepco.co.jp/forecast/html/images/juyo-2014.csv
$ curl -O http://www.tepco.co.jp/forecast/html/images/juyo-2016.csv
Laden Sie nach wie vor frühere Wetterdaten von der Meteorologischen Agentur herunter.
http://www.data.jma.go.jp/gmd/risk/obsdl/index.php
Der Punkt ist "Tokio", die Elemente sind "Stundenwert" und "Temperatur", und der Zeitraum ist 2013/12/31 bis 2015/1/1 und 2015/12/31 bis 2017/1/1, data-2014.csv, Speichern Sie es als Daten-2016.csv. Der Grund für die Wahl eines etwas längeren Zeitraums besteht darin, den Zeitraum später einzugrenzen.
Die heruntergeladenen Daten sind CSV-Daten, die Daten wie Datum und Uhrzeit, Temperatur, Qualitätsinformationen und Homogenitätsnummer enthalten.
Übrigens scheint es, dass es normalerweise schnell von der Website heruntergeladen werden kann.
python
import pandas as pd
import numpy as np
import datetime as dt
import math
Laden Sie zunächst die Leistungsdaten 2014.
python
filename = "juyo-2014.csv"
#Der Zeichencode lautet Shift JIS, überspringt unnötige Zeilen und liest
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=2)
#Spaltennamen konvertieren
df.columns = ["DATE","TIME","KW"]
#Da Datums- und Uhrzeitdaten getrennt sind, verbinden Sie sie zu einer, konvertieren Sie sie in einen Datums- und Uhrzeittyp und geben Sie sie als Index an.
df.index = df.index.map(lambda x: dt.datetime.strptime(df.loc[x].DATE + " " + df.loc[x].TIME,"%Y/%m/%d %H:%M"))
#Erhalten Sie monatliche Daten
df["MONTH"] = df.index.month
#Tagesdaten abrufen
df["WEEK"] = df.index.weekday
#Zeitdaten abrufen
df["HOUR"] = df.index.hour
df_kw = df
Laden Sie als Nächstes die Temperaturdaten für 2014.
python
filename = "data-2014.csv"
#Der Zeichencode lautet Shift JIS, überspringt unnötige Zeilen und erhält nur die erforderlichen 2 Spalten
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=4)[[0,1]]
#Spaltennamen konvertieren
df.columns = ["DATE","TEMP"]
#Konvertieren Sie Datums- und Uhrzeitdaten in Datums- und Uhrzeittyp und geben Sie sie als Index an
df.index = df.index.map(lambda x: dt.datetime.strptime(df.loc[x].DATE,"%Y/%m/%d %H:%M:%S"))
df_temp = df
python
d1 = df_kw.index.min()
d2 = df_kw.index.max()
df_kw["TEMP"] = df_temp.ix[d1:d2].TEMP
Erfasst Eingabedaten und Ausgabedaten, die für maschinelles Lernen verwendet werden. Da wir den Strombedarf vorhersagen, werden wir die KW-Spalte für die Ausgabe und die MONTH-, WEEK-, HOUR- und TEMP-Spalten für die Eingabe verwenden.
python
#Angabe der für die Eingabe verwendeten Datenzeichenfolge
X_cols = ["MONTH","WEEK","HOUR","TEMP"]
#Angabe der für die Ausgabe verwendeten Datenzeichenfolge
y_cols = ["KW"]
#Erfassung von Eingabe- / Ausgabedaten
X = df_kw[X_cols].as_matrix().astype('float')
y = df_kw[y_cols].as_matrix().astype('int').flatten()
Teilen Sie in Trainingsdaten und Validierungsdaten.
python
from sklearn import cross_validation
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=.1, random_state=42)
Normalisiert die Eingabedaten.
python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Lernen Sie mit einem Regressionsmodell.
python
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
model.fit(X_train, y_train)
Berechnen Sie die Punktzahl anhand der geteilten Testdaten.
python
print(model.score(X_test,y_test))
Die Punktzahl war "0,91601162513664502" (^ - ^)
Lassen Sie uns das Vorhersageergebnis und die tatsächlichen Daten grafisch darstellen und überprüfen.
python
#Vorhersageergebnis
result = model.predict(X_test)
#In Datenrahmen konvertieren
df_result = pd.DataFrame({
"y_test":y_test,
"result":result
})
#Diagrammbibliothek
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
#Diagrammzeichnung
df_result.plot(figsize=(15, 3))
Es sieht so aus, als würde es schlagen, aber ich bin mir nicht sicher, wie es ist.
Reduzieren Sie die Anzahl der Daten und bestätigen Sie erneut.
python
#Diagrammzeichnung
df_result[:20].plot(figsize=(15, 3))
Ist es nicht ein gutes Gefühl!
Laden Sie die Daten für 2016 nach dem gleichen Verfahren wie für die Daten für 2014.
python
#Energienachfrage
filename = "juyo-2016.csv"
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=2)
df.columns = ["DATE","TIME","KW"]
df.index = df.index.map(lambda x: dt.datetime.strptime(df.loc[x].DATE + " " + df.loc[x].TIME,"%Y/%m/%d %H:%M"))
df["MONTH"] = df.index.month
df["WEEK"] = df.index.weekday
df["HOUR"] = df.index.hour
#Nur für April verwenden
df_kw = df[df.index.month == 4]
#Temperatur
filename = "data-2016.csv"
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=4)[[0,1]]
df.columns = ["DATE","TEMP"]
df.index = df.index.map(lambda x: dt.datetime.strptime(df.loc[x].DATE,"%Y/%m/%d %H:%M:%S"))
df_temp = df
#Datenverbindung
d1 = df_kw.index.min()
d2 = df_kw.index.max()
df_kw["TEMP"] = df_temp.ix[d1:d2].TEMP
python
#Erfassung von Eingabe- / Ausgabedaten
X = df_kw[X_cols].as_matrix().astype('float')
y = df_kw[y_cols].as_matrix().astype('int').flatten()
X_test = scaler.transform(X)
y_test = y
Prognostizieren und berechnen Sie die Ergebnisse anhand eines Modells, das mit Daten aus dem Jahr 2014 trainiert wurde.
python
model.score(X_test,y_test)
Das Ergebnis war "0,82435418225963963", was etwas niedriger war.
python
#Vorhersageergebnis
result = model.predict(X_test)
#In Datenrahmen konvertieren
df_result = pd.DataFrame({
"y_test":y_test,
"result":result
})
#Diagrammzeichnung
df_result.plot(figsize=(15, 3))
Ich brauche etwas mehr Einfallsreichtum (-_-;)
Recommended Posts