[PYTHON] [Note] Essayons de prédire la quantité d'électricité utilisée! (Partie 1)

en premier

J'étudie le Deep Learning depuis environ six mois, et récemment je m'intéresse à l'analyse des données de séries chronologiques et j'étudie actuellement. Sur le site suivant, j'aimerais faire ce que fait M. Iwahashi, un ancien employé de Tableau, tout en étudiant également python / chainer.

URL: Apprentissage en profondeur à partir de la compréhension des données par Tableau

Objectif: créer un modèle qui prédit la consommation d'énergie à partir de données météorologiques --Variable explicative: données météorologiques + α --Variable expliquée: consommation d'énergie

C'est toujours quelque chose que les débutants font, donc je ne pense pas du tout que ce soit une manière intelligente, alors j'attends des commentaires comme "C'est mieux de faire ça" et "Je peux en profiter davantage!" (Rires) C'est un peu long, mais j'espère que vous le lirez.

1. Acquisition de données

Pour les données, vous pouvez télécharger le fichier csv à partir des sites TEPCO et de l'Agence météorologique suivants.

TEPCO: Télécharger les données d'enregistrement de consommation d'énergie passée Agence météorologique: Téléchargement des données météorologiques passées

À partir de là, récupérez les données pour 2018 (une année). Pour les données météorologiques

--Température

J'ai décidé d'utiliser (le même que celui de M. Iwahashi).

Après avoir téléchargé les données, chargeons-les avec des pandas. Nous avons utilisé Google Colaboratory pour l'analyse. (Au début, j'utilisais Jupyter lab, mais il a fallu un temps inhabituel pour dessiner le graphique, alors j'ai changé pour Google Colaboratory au milieu)

Connexion Google Drive

Pour lire le fichier, téléchargez le fichier csv téléchargé sur Google Drive et utilisez-le en vous connectant à Google Colaboratory.

Tout d'abord, importez la bibliothèque. Après cela, j'importerai la bibliothèque au besoin (vous pouvez tout importer en même temps, mais je l'ai fait à tâtons, donc je l'ai importée en cas de besoin à ce moment).


#Importer la bibliothèque
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

Vous pouvez utiliser le code ci-dessous pour intégrer Google Colaboratory à Google Drive. Si vous google, vous trouverez une méthode détaillée, veuillez donc vous y référer.

Référence: L'histoire selon laquelle le montage sur Google Drive dans Colaboratory était facile


#Connectez-vous avec Google Drive
from google.colab import drive
drive.mount('/content/drive')

Maintenant, quand vous arrivez à ce point, il est temps de lire le fichier. Le "xxx" ci-dessous peut être n'importe quel nom de dossier / fichier sur Google Drive.


#Lire le fichier/Affichage de DataFrame
df = pd.read_csv('drive/My Drive/xxx/xxx.csv')
df

2. Prétraitement 1: Lire >> Vérifier les données >> Combiner les données

a) Données météorologiques

** Prétraitement avec Python ** M. Iwahashi mentionné ci-dessus fait du prétraitement et de la visualisation avec Tableau (DeskTop / Prep), mais puisque cette fois j'étudie Python, j'aimerais faire le même travail (similaire) uniquement avec Python.

Jetons tout d'abord un coup d'œil aux données météorologiques (data.csv) téléchargées depuis le site Web de l'Agence météorologique. À propos, dans Excel, c'est comme suit. Il y a des lignes et des colonnes dont vous n'avez pas besoin.

2020-05-12.png

Mise en forme des données

Extrayez la matrice que vous souhaitez utiliser de cet ensemble de données. (Cependant, si vous avez un ensemble de données de ce montant, il est plus facile de jouer avec dans Excel. Mais ici, j'ose extraire les données que je souhaite utiliser en python (j'étudie juste python)).

df_weather = pd.read_csv('xxx\weather_data_1_2.csv', header=[0], skiprows=3, engine='python') #,index_col=0
df_weather = df_weather.iloc[1:,[0, 1,4,8,12,18,21]]
df_weather.head()
Date et l'heure Température(℃) Précipitation(mm) Heure du soleil(temps) Quantité de rayonnement solaire(MJ/㎡) Humidité relative(%) Pression locale(hPa)
2018/1/1 1:00:00 1.5 0.0 0.0 0.0 82.0 1009.6
2018/1/1 2:00:00 1.0 0.0 0.0 0.0 83.0 1009.5
2018/1/1 3:00:00 1.2 0.0 0.0 0.0 80.0 1009.0
2018/1/1 4:00:00 0.6 0.0 0.0 0.0 85.0 1008.6
2018/1/1 5:00:00 1.9 0.0 0.0 0.0 80.0 1008.8

Et la sortie sera comme ça.

Lors de la lecture des données sur la première ligne, utilisez ** la spécification d'index (index_col =), la spécification d'en-tête (header =) et ignorez les lignes inutiles (skiprows) ** pour obtenir à peu près la forme que vous souhaitez utiliser. Dans la deuxième ligne, **. Iloc ([]) ** est utilisé pour obtenir les lignes et colonnes requises.

Ensuite, je voudrais changer le nom de la colonne car il est difficile à utiliser si le nom de la colonne est japonais. Cela peut être converti à la fois en créant une variable appelée colonnes et en utilisant le code de {'before change', 'after change'} dans le type de dictionnaire comme suit.

#Convertir les noms de colonnes en anglais
columns = {'Date et l'heure':'Date_Time',
           'Température(℃)':'Temperature',
          'Précipitation(mm)':'Precipitation',
          'Heure du soleil(temps)':'Daylighthours',
          'Quantité de rayonnement solaire(MJ/㎡)':'SolarRadiation',
          'Humidité relative(%)':'Humidity',
          'Pression locale(hPa)':'Airpressure'}

df_weather.rename(columns=columns, inplace=True)
df_weather.head(3)

Ensuite, vérifions le type de données. Je vérifie toujours les trois choses suivantes (veuillez me faire savoir s'il y a d'autres choses qui devraient être vérifiées).

#Confirmation du type de données
print(df_weather.shape)
print(df_weather.dtypes)
print(df_weather.info)
print(df_weather.describe())

Combinez plusieurs fichiers dans le sens de la colonne (pd.concat)

Lors du téléchargement des données de l'Agence météorologique, la taille des données qui peuvent être téléchargées est fixe, et si le nombre de données pour un an est le nombre de téléchargements, il est nécessaire de les télécharger en plusieurs fois (dans mon cas, 2 mois par fichier) Je n'ai pu télécharger que des minutes de données). Vous devez donc joindre plusieurs fichiers.

Ici, les noms de fichiers sont respectivement df_weather1 ~ 6.


df_weather_integrate = pd.concat([df_weather1, df_weather2, df_weather3, df_weather4, df_weather5, df_weather6],ignore_index=True)

J'ai nommé les fichiers combinés df_weather_integrated (c'est un peu long ...) et utilisé ** pd.concat () ** pour combiner les six fichiers verticalement.

Vérifiez les valeurs manquantes (.isnull (). Any / .isnull (). Sum ())

Vient ensuite la confirmation des valeurs manquantes. Vérifiez les valeurs manquantes avec le familier ** dataframe.isnull (). Any () **. Il renvoie un type booléen (True ou False).

df_weather_integrated.isnull().any()
1 2
Date_Time False
Temperature False
Precipitation False
Daylighthours True
SolarRadiation True
Humidity True
Airpressure False

Maintenant que nous savons qu'il existe des valeurs manquantes dans les heures de lumière du jour, le rayonnement solaire et l'humidité, vérifions le nombre de valeurs manquantes. Vérifiez avec **. Isnull (). Sum () **.

df_weather_integrated.isnull().sum()
1 2
Date_Time 0
Temperature 0
Precipitation 0
Daylighthours 1
SolarRadiation 1
Humidity 27
Airpressure 0

Vous connaissez maintenant le nombre de valeurs manquantes dans les données météorologiques. Plus tard, nous traiterons les valeurs manquantes avec les données de consommation d'énergie.

(b) Données de consommation d'énergie

Jetons ensuite un coup d'œil aux données de puissance téléchargées à partir du site Web TEPCO. S'il s'agit d'Excel, il sera téléchargé comme suit.

2020-05-13.png

df_Elec = pd.read_csv('xxx\elec_2018.csv',header=[0],skiprows=1, engine='python')

Ici, comme auparavant, utilisez l'en-tête et sautez les lignes pour supprimer les lignes inutiles. Pour les données de consommation d'énergie, modifiez les noms des colonnes (japonais >> anglais), vérifiez les types de données et vérifiez les valeurs manquantes (détails omis), tout comme les données météorologiques.

[Après la conversion]

DATE TIME kW
0 2018/1/1 0:00 2962
1 2018/1/1 1:00 2797
2 2018/1/1 2:00 2669
・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・

Comme vous l'avez peut-être remarqué ici, la 0ème ligne est 2018/1/1 0:00. Les données météorologiques commenceront à 1h00 le 1er janvier 2018, supprimez donc la ligne 0 ici et réindexez-la.


df_Elec = df_Elec.drop(df_Elec.index[0])
df_Elec =df_Elec.reset_index(drop=True)
df_Elec.head(3)

[Après reconversion]

DATE TIME kW
0 2018/1/1 1:00 2962
1 2018/1/1 2:00 2797
2 2018/1/1 3:00 2669
・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・

Ensuite, étant donné que la date et l'heure des données météorologiques sont combinées en une seule colonne, combinez les première et deuxième colonnes des données de consommation d'énergie de sorte qu'elles aient la même forme que les données météorologiques. Ici, ** pd.to_datetime ** crée une nouvelle colonne (DATE_TIME) avec le type datetime.

#Combinez DATE et HEURE pour créer une nouvelle DATE_Prendre le temps
df_Elec['DATE_TIME'] = pd.to_datetime(df_Elec['DATE'] +' '+ df_Elec['TIME'])
df_Elec = df_Elec[['DATE_TIME', 'kW']]

Vous êtes maintenant prêt à combiner vos données météorologiques et de consommation d'énergie. Combinons maintenant ces deux données. Ici, ** pd.merge () ** est utilisé.

Fusion verticale de deux fichiers (pd.merge)

#Combinez deux fichiers
df = pd.merge(df_weather_integrate, df_Elec ,left_on='Date_Time', right_on='DATE_TIME', how='left')

Vous avez maintenant fusionné les deux fichiers (horizontalement)! En regardant cette trame de données ici, il reste des colonnes inutiles (DATE_TIME) et NaN en kW dans la dernière ligne, nous allons donc les traiter à la fin.

#Ne laissez que les lignes que vous utilisez
df = df[['Date_Time','Temperature', 'Precipitation', 'Daylighthours', 'SolarRadiation', 'Humidity', 'Airpressure', 'kW']]
#8759 est supprimé car il y a un écart entre les données de consommation d'énergie et les données météorologiques dans la dernière ligne
df.drop(8759,inplace=True)

Maintenant, vous pouvez enfin analyser les données! (C'était long...)

La prochaine fois, j'aimerais analyser les données prétraitées avec chainer!

Résumé (Remarque)

Cette fois, j'ai essayé les 4 points suivants.

--L'acquisition des données --Lecture et vérification des données

La prochaine fois, j'aimerais gérer les valeurs manquantes.

Recommended Posts

[Note] Essayons de prédire la quantité d'électricité utilisée! (Partie 1)
Prédisez la quantité d'énergie utilisée en 2 jours et publiez-la au format CSV
[Django] Essayons de clarifier la partie de Django qui était en quelque sorte à travers le test
Essayez de prédire le triplet de la course de bateaux en classant l'apprentissage
Essayez de simuler le mouvement du système solaire
[Vérification] Essayez d'aligner le groupe de points avec la fonction d'optimisation de pytorch Partie 1
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (Chapitre 1)
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez d'estimer le nombre de likes sur Twitter
Essayez d'obtenir le contenu de Word avec Golang
J'ai essayé d'effacer la partie négative de Meros
Note Python: Le mystère de l'attribution d'une variable à une variable
Essayez d'obtenir la liste des fonctions du paquet Python> os
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Prédisons le timing de Barus et apprécions le film lentement
Comment calculer la quantité de calcul appris de ABC134-D
(Note) Comment passer le chemin de votre propre module
Essayez d'améliorer la précision de l'estimation du nombre de Twitter
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (fonction du chapitre 0)
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Tentative d'ajuster automatiquement la vitesse des vidéos accélérées (partie 2)
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Apprenez les données comptables et essayez de prédire les comptes à partir du contenu de la description lors de la saisie des journaux
Visualisez verticalement la quantité correspondant au sommet de networkx à l'aide d'Axes3D
J'ai utilisé le prophète de Facebook pour prédire la moyenne de l'industrie Dow.
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
Essayez de résoudre le problème N Queen avec SA de PyQUBO
Utilisez PyCaret pour prédire le prix des appartements d'occasion à Tokyo!
Essayez de modéliser le rendement cumulatif du roulement dans le trading à terme
J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
J'ai utilisé la commande coupe du monde pour vérifier le résultat de la Coupe du monde.
Les filtres Kalman peuvent-ils être utilisés pour prédire les tendances boursières?
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
Essayez de prédire la valeur de la jauge de niveau d'eau par apprentissage automatique en utilisant les données ouvertes de Data City Sabae
jour de course des dockers (note)
Essayez d'introduire le thème sur Pelican
Essayez Cython dans les plus brefs délais
Le moyen le plus rapide d'essayer EfficientNet
Supplément à l'explication de vscode
Décidons le gagnant du bingo
La façon la plus simple d'essayer PyQtGraph
À propos de l'ordre d'apprentissage des langages de programmation (de débutant à intermédiaire) Partie 2
Écrivons un programme pour résoudre le Rubik Cube (Partie 2: IDA * Search)
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Essayez d'estimer les paramètres de la distribution gamma tout en implémentant simplement MCMC
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Essayez d'obtenir l'état de la surface de la route en utilisant de grandes données de gestion de la surface de la route
Essayez d'utiliser n pour rétrograder la version de Node.js que vous avez installée
Essayez de ne faire réagir que le carbone en bout de chaîne avec SMARTS
Je veux prédire le succès des joueurs NBA utilisant le SDK Qore
[Introduction à Python] Une explication approfondie des types de chaînes de caractères utilisés dans Python!
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
Prédire FX avec LSTM à l'aide de Keras + Tensorflow Partie 2 (Calculer avec GPU)
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.