[PYTHON] Prédire la demande de puissance avec l'apprentissage automatique, partie 2

introduction

Cela fait longtemps que je n'ai pas posté avec le titre du même nom avant, et ça devient un peu mûr, alors je le posterai à nouveau.

Postscript

Veuillez vous référer à l'article suivant créé le 22/12/2017. Prévisions de consommation d'énergie avec TensorFlow avec Keras

Collecte de données

Demande de puissance

Tout d'abord, téléchargez les données de demande d'énergie sur le site Web de Tokyo Electric Power.

http://www.tepco.co.jp/forecast/html/download-j.html

http://www.tepco.co.jp/forecast/html/images/juyo-2016.csv

De plus, si vous modifiez l'URL, vous pouvez obtenir les données de 2014.

http://www.tepco.co.jp/forecast/html/images/juyo-2014.csv

Les données téléchargées sont un CSV de la date, de l'heure et de la puissance réelle.

Au fait, il semble que vous puissiez également l'obtenir avec la commande suivante.

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

Température

Comme auparavant, téléchargez les données météorologiques passées de l'Agence météorologique.

http://www.data.jma.go.jp/gmd/risk/obsdl/index.php

Le point est "Tokyo", les éléments sont "valeur horaire" et "température", et la période va du 2013/12/31 au 2015/1/1 et du 2015/12/31 au 2017/1/1, data-2014.csv, Enregistrez-le sous data-2016.csv. La raison de choisir une période légèrement plus longue ici est de réduire la période plus tard.

Les données téléchargées sont un fichier CSV contenant des données telles que la date et l'heure, la température, les informations de qualité et le numéro d'homogénéité.

À propos, il semble que le téléchargement à partir du site soit généralement rapide.

Lecture des données

Bibliothèque

python


import pandas as pd
import numpy as np
import datetime as dt
import math

Demande de puissance

Commencez par charger les données de puissance 2014.

python


filename = "juyo-2014.csv"

#Le code de caractère est shift JIS, sautant les lignes inutiles et lisant
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=2)

#Convertir les noms de colonnes
df.columns = ["DATE","TIME","KW"]

#Étant donné que les données de date et d'heure sont séparées, connectez-les en une seule, convertissez-les en un type de date et d'heure et spécifiez-les sous forme d'index.
df.index = df.index.map(lambda x: dt.datetime.strptime(df.loc[x].DATE + " " + df.loc[x].TIME,"%Y/%m/%d %H:%M"))

#Obtenez des données mensuelles
df["MONTH"] = df.index.month

#Obtenez des données journalières
df["WEEK"] = df.index.weekday

#Obtenir des données de temps
df["HOUR"] = df.index.hour

df_kw = df

Température

Ensuite, chargez les données de température 2014.

python


filename = "data-2014.csv"

#Le code de caractère est shift JIS, sautez les lignes inutiles et obtenez seulement les 2 colonnes requises
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=4)[[0,1]]

#Convertir les noms de colonnes
df.columns = ["DATE","TEMP"]

#Convertir les données de date et d'heure en type de date et d'heure et spécifier comme index
df.index = df.index.map(lambda x: dt.datetime.strptime(df.loc[x].DATE,"%Y/%m/%d %H:%M:%S"))

df_temp = df

Combinez les données de demande de puissance et de température

python


d1 = df_kw.index.min()
d2 = df_kw.index.max()

df_kw["TEMP"] = df_temp.ix[d1:d2].TEMP

Traitement de l'information

Acquiert les données d'entrée et les données de sortie utilisées pour l'apprentissage automatique. Puisque nous prévoyons la demande de puissance, nous utiliserons la colonne KW pour la sortie et les colonnes MONTH, WEEK, HOUR et TEMP pour l'entrée.

python


#Spécification de la chaîne de données utilisée pour l'entrée
X_cols = ["MONTH","WEEK","HOUR","TEMP"]

#Spécification de la chaîne de données utilisée pour la sortie
y_cols = ["KW"]

#Acquisition des données d'entrée / sortie
X = df_kw[X_cols].as_matrix().astype('float')
y = df_kw[y_cols].as_matrix().astype('int').flatten()

Divisez en données d'entraînement et données de validation.

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)

Normalise les données d'entrée.

python


from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler.fit(X_train)

X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

Apprentissage

Apprenez avec un modèle de régression.

python


from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor()
model.fit(X_train, y_train)

Prévoir

Calculez le score en utilisant les données de test divisées.

python


print(model.score(X_test,y_test))

Le score était "0,91601162513664502" (^ - ^)

Confirmation des résultats des prévisions

Graphisons le résultat de la prédiction et les données réelles et vérifions-les.

python


#Résultat de la prédiction
result = model.predict(X_test)

#Convertir en bloc de données
df_result = pd.DataFrame({
    "y_test":y_test,
    "result":result
})

#Bibliothèque de graphes
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt

#Dessin graphique
df_result.plot(figsize=(15, 3))

Unknown.png

On dirait que ça frappe, mais je ne sais pas comment c'est.

Réduisez le nombre de données et reconfirmez.

python


#Dessin graphique
df_result[:20].plot(figsize=(15, 3))

Unknown.png

N'est-ce pas un bon sentiment!

Prévisions utilisant les données de 2016

Lecture des données

Chargez les données 2016 en utilisant la même procédure que pour les données 2014.

python


#Demande de puissance
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

#Utiliser uniquement pour avril
df_kw = df[df.index.month == 4]

#Température
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

#Jointure de données
d1 = df_kw.index.min()
d2 = df_kw.index.max()
df_kw["TEMP"] = df_temp.ix[d1:d2].TEMP

Traitement de l'information

python


#Acquisition des données d'entrée / sortie
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

Prévoir

Prédire et calculer les scores à l'aide d'un modèle formé avec les données de 2014

python


model.score(X_test,y_test)

Le résultat était "0,82435418225963963", qui était un peu plus bas.

Confirmation des résultats des prévisions

python


#Résultat de la prédiction
result = model.predict(X_test)

#Convertir en bloc de données
df_result = pd.DataFrame({
    "y_test":y_test,
    "result":result
})

#Dessin graphique
df_result.plot(figsize=(15, 3))

Unknown.png

J'ai besoin d'un peu plus d'ingéniosité (-_-;)

Recommended Posts

Prédire la demande de puissance avec l'apprentissage automatique, partie 2
Apprentissage automatique à partir de Python Personal Memorandum Part2
Essayez de prédire la demande de puissance par l'apprentissage automatique
Apprentissage automatique à partir de Python Personal Memorandum Part1
L'apprentissage automatique appris avec Pokemon
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Apprentissage automatique avec Python! Préparation
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Démineur d'apprentissage automatique avec PyTorch
Commencer avec l'apprentissage automatique Python
Essayez le machine learning à la légère avec Kaggle
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 3 Échelle collaborative de Google
[Tutoriel PyTorch ⑤] Apprentissage de PyTorch avec des exemples (Partie 2)
J'ai essayé l'apprentissage automatique avec liblinear
Apprentissage automatique par python (1) Classification générale
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
SVM essayant l'apprentissage automatique avec scikit-learn
[Tutoriel PyTorch ⑤] Apprentissage de PyTorch avec des exemples (Partie 1)
Machine learning d'inspiration quantique avec des réseaux de tenseurs
Démarrez avec l'apprentissage automatique avec SageMaker
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Recommandation de manga par machine learning Partie 1 Commençons par diviser sans penser à rien
Apprentissage automatique
Amplifiez les images pour l'apprentissage automatique avec Python
Sklearn de données déséquilibrées avec apprentissage automatique k-NN
Apprentissage automatique avec python (2) Analyse de régression simple
Une histoire sur l'apprentissage automatique avec Kyasuket
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Apprentissage automatique avec Pytorch sur Google Colab
Construction d'environnement AI / Machine Learning avec Python
Classification EV3 x Pyrhon Machine Learning Partie 3
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
L'apprentissage automatique peut-il prédire les quadrilatères parallèles? (1) Peut-il être inséré à l'extérieur?
Report_Apprentissage approfondi (partie 2)
Report_Apprentissage approfondi (partie 1)
Report_Apprentissage approfondi (partie 1)
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 2 Conversion de Google Colaboratory-Logistic et conversion Box-Cox
Prédire les travaux de courte durée de Weekly Shonen Jump par apprentissage automatique (Partie 2: Apprentissage et évaluation)
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
EV3 x Pyrhon Machine Learning Partie 1 Construction de l'environnement
EV3 x Python Machine Learning Partie 2 Régression linéaire
Report_Apprentissage approfondi (partie 2)
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
[Memo] Apprentissage automatique
Classification des images de guitare par apprentissage automatique, partie 2
Classification de l'apprentissage automatique
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Prédire les travaux de courte durée de Weekly Shonen Jump par apprentissage automatique (Partie 1: Analyse des données)
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Exemple d'apprentissage automatique
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
Apprenez le filtrage collaboratif avec les supports Coursera Machine Learning
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)