[PYTHON] [Anmerkung] Versuchen wir, den Stromverbrauch vorherzusagen! (Teil 1)

zunaechst

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.

1. Datenerfassung

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.)

Google Drive-Verbindung

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

2. Vorverarbeitung 1: Lesen >> Daten prüfen >> Daten kombinieren

(a) Meteorologische Daten

** 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.

2020-05-12.png

Datenformung

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())

Kombinieren Sie mehrere Dateien in Spaltenrichtung (pd.concat)

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.

Auf fehlende Werte prüfen (.isnull (). Any / .isnull (). Sum ())

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.

(b) Stromverbrauchsdaten

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.

2020-05-13.png

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.

Vertikales Zusammenführen zweier Dateien (pd.merge)

#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!

Zusammenfassung (Hinweis)

Diesmal habe ich die folgenden 4 Punkte ausprobiert.

--Datenerfassung

Nächstes Mal möchte ich mit fehlenden Werten umgehen.

Recommended Posts

[Anmerkung] Versuchen wir, den Stromverbrauch vorherzusagen! (Teil 1)
Prognostizieren Sie den Stromverbrauch in 2 Tagen und veröffentlichen Sie ihn in CSV
[Django] Lassen Sie uns versuchen, den Teil von Django zu klären, der im Test irgendwie durch war
Versuchen Sie, das Triplett des Bootsrennens vorherzusagen, indem Sie das Lernen bewerten
Versuchen Sie, die Bewegung des Sonnensystems zu simulieren
[Überprüfung] Versuchen Sie, die Punktgruppe an der Optimierungsfunktion von Pytorch Part 1 auszurichten
Versuchen Sie, die Probleme des "Matrix-Programmierers" zu lösen (Kapitel 1).
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
Ich habe versucht, den negativen Teil von Meros zu löschen
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Lassen Sie uns das Timing von Barus vorhersagen und den Film langsam genießen
Berechnen des aus ABC134-D gelernten Rechenaufwands
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
Versuchen Sie, die Genauigkeit der Twitter-ähnlichen Zahlenschätzung zu verbessern
Versuchen Sie, die Probleme / Probleme des "Matrix-Programmierers" zu lösen (Kapitel 0-Funktion)
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, die Geschwindigkeit von Zeitraffervideos automatisch anzupassen (Teil 2).
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Lernen Sie Buchhaltungsdaten kennen und versuchen Sie, Konten aus dem Inhalt der Beschreibung vorherzusagen, wenn Sie Journale eingeben
Visualisieren Sie mit Axes3D vertikal den Betrag, der dem Scheitelpunkt von networkx entspricht
Ich habe den Propheten von Facebook verwendet, um den Durchschnitt der Dow-Branche vorherzusagen.
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Versuchen Sie, das N Queen-Problem mit SA von PyQUBO zu lösen
Verwenden Sie PyCaret, um den Preis von Gebrauchtwohnungen in Tokio vorherzusagen!
Versuchen Sie, die kumulierte Rendite des Rollovers im Futures-Handel zu modellieren
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen
Ich habe den Befehl worldcup verwendet, um das Ergebnis der Weltmeisterschaft zu überprüfen.
Können Kalman-Filter verwendet werden, um Aktienentwicklungen vorherzusagen?
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
Versuchen Sie, den Wert des Wasserstandsmessers durch maschinelles Lernen unter Verwendung der offenen Daten von Data City Sabae vorherzusagen
Der Tag des Dockerlaufs (Hinweis)
Versuchen Sie, das Thema Pelican vorzustellen
Probieren Sie Cython in kürzester Zeit aus
Der schnellste Weg, EfficientNet auszuprobieren
Ergänzung zur Erklärung von vscode
Lassen Sie uns den Gewinner des Bingo bestimmen
Der einfachste Weg, PyQtGraph auszuprobieren
Über die Reihenfolge des Lernens von Programmiersprachen (vom Anfänger bis zum Fortgeschrittenen) Teil 2
Schreiben wir ein Programm zur Lösung des Rubik-Würfels (Teil 2: IDA * -Suche)
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Versuchen Sie, die Parameter der Gammaverteilung zu schätzen, während Sie einfach MCMC implementieren
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Versuchen Sie, den Zustand der Straßenoberfläche mithilfe von Big Data des Straßenoberflächenmanagements zu ermitteln
Versuchen Sie, mit n die von Ihnen installierte Version von Node.js herunterzustufen
Versuchen Sie, nur den Kohlenstoff am Ende der Kette mit SMARTS zu reagieren
Ich möchte den Erfolg von NBA-Spielern mit dem Qore SDK vorhersagen
[Einführung in Python] Eine ausführliche Erklärung der in Python verwendeten Zeichenkettentypen!
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Vorhersage von Effekten mit LSTM mithilfe von Keras + Tensorflow Teil 2 (Berechnung mit GPU)
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.