Ich studiere Deep Learning seit ungefähr einem halben Jahr und vor kurzem interessiere ich mich für die Analyse von Zeitreihendaten und studiere derzeit. An der folgenden Stelle möchte ich das tun, was Herr Iwahashi, ein ehemaliger Tableau-Mitarbeiter, tut, während er gleichzeitig Python / Chainer studiert.
URL: Deep Learning ausgehend vom Datenverständnis von Tableau
Zweck: Erstellen Sie ein Modell, das den Stromverbrauch anhand meteorologischer Daten vorhersagt
Es ist immer noch etwas, was Anfänger tun, also denke ich, dass es überhaupt kein kluger Weg ist, also warte ich auf Kommentare wie "Das ist besser" und "Das ist einfacher!" (Lacht) Es ist ein bisschen lang, aber ich hoffe, Sie werden es lesen.
Für die Daten können Sie die CSV-Datei von den folgenden Websites von TEPCO und Meteorological Agency herunterladen.
TEPCO: Daten zu früheren Stromverbrauchsaufzeichnungen herunterladen Meteorologische Agentur: Download früherer meteorologischer Daten
Hier erhalten Sie die Daten für 2018 (im Wert von einem Jahr). Für Wetterdaten
--Temperatur
Ich entschied mich zu verwenden (das gleiche wie bei Herrn Iwahashi).
Nachdem wir die Daten heruntergeladen haben, laden wir sie mit Pandas. Wir haben Google Colaboratory für die Analyse verwendet. (Zuerst habe ich das Jupyter-Labor verwendet, aber das Zeichnen des Diagramms hat ungewöhnlich viel Zeit in Anspruch genommen, sodass ich in der Mitte zu Google Colaboratory gewechselt bin.)
Laden Sie zum Lesen der Datei die heruntergeladene CSV-Datei auf Google Drive hoch und verwenden Sie sie, indem Sie eine Verbindung zu Google Colaboratory herstellen.
Importieren Sie zunächst die Bibliothek. Danach werde ich die Bibliothek nach Bedarf importieren (Sie können alles auf einmal importieren, aber ich habe es durch Tappen gemacht, also habe ich es bei Bedarf zu diesem Zeitpunkt importiert).
#Bibliothek importieren
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Mit dem folgenden Code können Sie Google Colaboratory in Google Drive integrieren. Wenn Sie googeln, finden Sie eine detaillierte Methode. Bitte beziehen Sie sich darauf.
Referenz: Die Geschichte, dass das Mounten auf Google Drive in Colaboratory einfach war
#Stellen Sie eine Verbindung mit Google Drive her
from google.colab import drive
drive.mount('/content/drive')
Wenn Sie an diesem Punkt angelangt sind, ist es Zeit, die Datei zu lesen. Das unten stehende "xxx" kann ein beliebiger Ordner- / Dateiname in Google Drive sein.
#Datei lesen/Anzeigen von DataFrame
df = pd.read_csv('drive/My Drive/xxx/xxx.csv')
df
** Vorverarbeitung mit Python ** Herr Iwahashi, der oben erwähnt wurde, führt die Vorverarbeitung und Visualisierung mit Tableau (DeskTop / Prep) durch, aber dieses Mal studiere ich Python, daher möchte ich die gleiche (ähnliche) Arbeit nur mit Python ausführen.
Schauen wir uns zunächst die Wetterdaten (data.csv) an, die von der Website der Meteorologischen Agentur heruntergeladen wurden. In Excel ist es übrigens wie folgt. Es gibt Zeilen und Spalten, die Sie nicht benötigen.
Extrahieren Sie die Matrix, die Sie verwenden möchten, aus diesem Datensatz. (Wenn Sie jedoch einen Datensatz dieser Menge haben, ist es einfacher, damit in Excel zu spielen. Aber hier wage ich es, die Daten zu extrahieren, die ich in Python verwenden möchte (ich studiere nur 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()
Datum (und Uhrzeit | Temperatur(℃) | Niederschlag(mm) | Sonnenlichtzeit(Zeit) | Menge der Sonnenstrahlung(MJ/㎡) | Relative Luftfeuchtigkeit(%) | Lokaler Druck(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 |
Und die Ausgabe wird so sein.
Verwenden Sie beim Lesen der Daten in der ersten Zeile die Indexspezifikation ** (index_col =), die Kopfzeilenspezifikation (header =) und überspringen Sie unnötige Zeilen (überspringen) **, um ungefähr die gewünschte Form zu erhalten. In der zweiten Zeile wird **. Iloc ([]) ** verwendet, um die erforderlichen Zeilen und Spalten abzurufen.
Als nächstes möchte ich den Spaltennamen ändern, da es schwierig ist, ihn zu verwenden, wenn der Spaltenname Japanisch ist. Dies kann sofort konvertiert werden, indem eine Variable namens Spalten erstellt und der Code {'vor Änderung', 'nach Änderung'} im Wörterbuchtyp wie folgt verwendet wird.
#Konvertieren Sie Spaltennamen in Englisch
columns = {'Datum (und Uhrzeit':'Date_Time',
'Temperatur(℃)':'Temperature',
'Niederschlag(mm)':'Precipitation',
'Sonnenlichtzeit(Zeit)':'Daylighthours',
'Menge der Sonnenstrahlung(MJ/㎡)':'SolarRadiation',
'Relative Luftfeuchtigkeit(%)':'Humidity',
'Lokaler Druck(hPa)':'Airpressure'}
df_weather.rename(columns=columns, inplace=True)
df_weather.head(3)
Als nächstes überprüfen wir den Datentyp. Ich überprüfe immer die folgenden drei Dinge (bitte lassen Sie mich wissen, ob es andere Dinge gibt, die überprüft werden sollten).
#Datentypbestätigung
print(df_weather.shape)
print(df_weather.dtypes)
print(df_weather.info)
print(df_weather.describe())
Beim Herunterladen von Daten von der Meteorologischen Agentur ist die Größe der Daten, die heruntergeladen werden können, festgelegt. Wenn die Anzahl der Daten für ein Jahr der Anzahl der Downloads entspricht, muss sie mehrmals heruntergeladen werden (in meinem Fall 2 Monate pro Datei). Ich konnte nur Minuten Daten herunterladen. Sie müssen also mehrere Dateien verbinden.
Hier lauten die Dateinamen df_weather1 ~ 6.
df_weather_integrate = pd.concat([df_weather1, df_weather2, df_weather3, df_weather4, df_weather5, df_weather6],ignore_index=True)
Ich habe die kombinierten Dateien df_weather_integrated genannt (es ist ein bisschen lang ...) und ** pd.concat () ** verwendet, um die sechs Dateien vertikal zu kombinieren.
Als nächstes folgt die Bestätigung fehlender Werte. Suchen Sie mit dem bekannten ** dataframe.isnull (). Any () ** nach fehlenden Werten. Es wird als boolescher Typ zurückgegeben (True oder False).
df_weather_integrated.isnull().any()
1 | 2 |
---|---|
Date_Time | False |
Temperature | False |
Precipitation | False |
Daylighthours | True |
SolarRadiation | True |
Humidity | True |
Airpressure | False |
Nachdem wir nun wissen, dass in Tageslichtstunden, SolarRadiation und Luftfeuchtigkeit Werte fehlen, überprüfen wir, wie viele Werte fehlen. Überprüfen Sie mit **. Isnull (). Sum () **.
df_weather_integrated.isnull().sum()
1 | 2 |
---|---|
Date_Time | 0 |
Temperature | 0 |
Precipitation | 0 |
Daylighthours | 1 |
SolarRadiation | 1 |
Humidity | 27 |
Airpressure | 0 |
Jetzt kennen Sie die Anzahl der fehlenden Werte in den Wetterdaten. Später werden wir die fehlenden Werte zusammen mit den Stromverbrauchsdaten verarbeiten.
Schauen wir uns als nächstes die von der TEPCO-Website heruntergeladenen Leistungsdaten an. Wenn es sich um Excel handelt, wird es wie folgt heruntergeladen.
df_Elec = pd.read_csv('xxx\elec_2018.csv',header=[0],skiprows=1, engine='python')
Verwenden Sie hier wie zuvor Header und überspringen Sie Zeilen, um unnötige Zeilen zu entfernen. Ändern Sie für Stromverbrauchsdaten die Spaltennamen (Japanisch >> Englisch), überprüfen Sie die Datentypen und überprüfen Sie fehlende Werte (Details weggelassen), genau wie Wetterdaten.
[Nach der Konvertierung]
DATE | TIME | kW | |
---|---|---|---|
0 | 2018/1/1 | 0:00 | 2962 |
1 | 2018/1/1 | 1:00 | 2797 |
2 | 2018/1/1 | 2:00 | 2669 |
・ ・ ・ | ・ ・ ・ | ・ ・ ・ | ・ ・ ・ |
Wie Sie vielleicht hier bemerkt haben, ist die 0. Zeile 2018/1/1 0:00. Die meteorologischen Daten beginnen am 1. Januar 2018 um 1:00 Uhr. Löschen Sie daher die 0. Zeile hier und indizieren Sie sie neu.
df_Elec = df_Elec.drop(df_Elec.index[0])
df_Elec =df_Elec.reset_index(drop=True)
df_Elec.head(3)
[Nach der Umstellung]
DATE | TIME | kW | |
---|---|---|---|
0 | 2018/1/1 | 1:00 | 2962 |
1 | 2018/1/1 | 2:00 | 2797 |
2 | 2018/1/1 | 3:00 | 2669 |
・ ・ ・ | ・ ・ ・ | ・ ・ ・ | ・ ・ ・ |
Da Datum und Uhrzeit der meteorologischen Daten in einer Spalte zusammengefasst wurden, kombinieren Sie die erste und die zweite Spalte der Stromverbrauchsdaten so, dass sie dieselbe Form wie die meteorologischen Daten haben. Hier erstellt ** pd.to_datetime ** eine neue Spalte (DATE_TIME) mit dem Datum / Uhrzeit-Typ.
#Kombinieren Sie DATE und TIME, um ein neues DATE zu erstellen_Zeit schaffen
df_Elec['DATE_TIME'] = pd.to_datetime(df_Elec['DATE'] +' '+ df_Elec['TIME'])
df_Elec = df_Elec[['DATE_TIME', 'kW']]
Sie können jetzt Ihre Wetter- und Stromverbrauchsdaten kombinieren. Kombinieren wir nun diese beiden Daten. Hier wird ** pd.merge () ** verwendet.
#Kombinieren Sie zwei Dateien
df = pd.merge(df_weather_integrate, df_Elec ,left_on='Date_Time', right_on='DATE_TIME', how='left')
Sie haben jetzt die beiden Dateien (horizontal) zusammengeführt! Wenn Sie sich diesen Datenrahmen hier ansehen, bleiben unnötige Spalten (DATE_TIME) übrig, und in der letzten Zeile befindet sich NaN in kW, sodass wir diese am Ende verarbeiten werden.
#Lassen Sie nur die Linien, die Sie verwenden
df = df[['Date_Time','Temperature', 'Precipitation', 'Daylighthours', 'SolarRadiation', 'Humidity', 'Airpressure', 'kW']]
#8759 wird gelöscht, da in der letzten Zeile eine Lücke zwischen Stromverbrauchsdaten und Wetterdaten besteht
df.drop(8759,inplace=True)
Jetzt können Sie endlich die Daten analysieren! (Es war lang...)
Nächstes Mal möchte ich die vorverarbeiteten Daten mit Chainer analysieren!
Diesmal habe ich die folgenden 4 Punkte ausprobiert.
--Datenerfassung
Nächstes Mal möchte ich mit fehlenden Werten umgehen.
Recommended Posts