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.
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)
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
** 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.
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())
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.
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.
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.
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é.
#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!
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