[PYTHON] Versuchen Sie, den Wert des Wasserstandsmessers durch maschinelles Lernen unter Verwendung der offenen Daten von Data City Sabae vorherzusagen

Einführung

Als ich nach einem guten Material als Beispiel für die Verwendung offener Daten suchte, stellte ich fest, dass Wasserstandsdaten auf der Website von Data City Sabae veröffentlicht wurden, und versuchte daher, maschinelles Lernen zu verwenden. Es war.

http://data.city.sabae.lg.jp/top_page/

Daten herunterladen

Auf der Seite "Open Data" auf der obigen Site hat die Gruppe "Disaster Prevention" die folgende Notation.

Wasserstandsdaten(Sabae City, Präfektur Fukui)
Rontegawa Entwässerungspumpstation[CSV]
Es sind die Daten der Wasserstandsanzeige in der Stadt Sabae. Wasserstandseinheit:cm Daten:1000 Fälle

スクリーンショット 2016-10-28 12.41.43.png

Standardmäßig wird gesagt, dass es 1.000 Daten gibt, aber ich werde sie verwenden, weil ich etwas mehr Daten erhalten könnte.

Darüber hinaus können vergangene Wetterdaten von der Meteorologischen Agentur heruntergeladen werden. Laden Sie daher die Niederschlagsdaten der nahe gelegenen Stadt Fukui herunter.

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

Bibliothek laden

Verwenden Sie das Jupyter-Notizbuch, um die folgenden Bibliotheken zu laden.

python


from ipywidgets import FloatProgress
from IPython.display import display

%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt

import pandas as pd
import numpy as np
import datetime

Wasserstandsdaten lesen

python


filename = "sparql.csv"
df = pd.read_csv(filename, header=None)

Lassen Sie es uns in einem Diagramm anzeigen.

python


tmp = []
for i in range(len(df)):
    pos = len(df) - 1 - i
    tmp.append(df.ix[pos][2])

pd.DataFrame({'level': np.array(tmp)}).plot(figsize=(15,5))

Unknown.png

Die Wasserstandsdaten werden alle 5 Minuten erfasst und verarbeitet, um die Zeitreihen mit den Daten der Meteorologischen Agentur abzugleichen.

python


#Holen Sie sich Daten Start- und Enddaten
dt1 = datetime.datetime.strptime(df[1][len(df)-1],"%Y-%m-%dT%H:%M:%S+09:00")
dt1 = datetime.datetime(dt1.year,dt1.month,dt1.day,0,0)
dt2 = datetime.datetime.strptime(df[1][0],"%Y-%m-%dT%H:%M:%S+09:00")

print("dt1:",dt1)
print("dt2:",dt2)

#Holen Sie sich Tage voller Daten
dt = (dt2-dt1).days + 1

#Bereiten Sie ein Array zum Speichern von Stundendaten vor
level = [0] * dt * 24
dt_al = [0] * dt * 24

#Fortschrittsbalkeneinstellungen
fp = FloatProgress(min=0, max=len(df))
display(fp)

for i in range(len(df)):
    wk = datetime.datetime.strptime(df[1][len(df)-i-1],"%Y-%m-%dT%H:%M:%S+09:00")
    pos = (wk - dt1).days * 24 + wk.hour
    dt_al[pos] = datetime.datetime(wk.year,wk.month,wk.day,wk.hour,0)

    if wk.minute == 0:
        level[pos] = df[2][len(df)-1-i]
    
    fp.value = i

Niederschlagsdaten lesen

Lesen Sie die Daten und achten Sie darauf, dass die CSV Daten enthält, die nicht gezählt werden, und dass der Zeichencode Shift JIS ist. Versuchen Sie auch, die gelesenen Daten als Grafik anzuzeigen.

python


filename = "data.csv"
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=4)
df.plot(figsize=(15,5))

Unknown.png

Speichern Sie den Wasserstand und die Niederschlagsdaten im gleichen Format

Speichern Sie die Daten in einem Array, um die Handhabung zu vereinfachen, und zeigen Sie dann das Diagramm an.

python


#Array-Vorbereitung
rain = [0]*len(level)

for i in range(len(df)):
    wk = datetime.datetime.strptime(df.ix[i][0],"%Y/%m/%d %H:%M:%S")
    if (wk < dt2) and (wk - dt1).days >= 0:
        pos = (wk - dt1).days * 24 + wk.hour
        rain[pos] = df.ix[i][1]

#Überprüfen Sie die Daten in der Grafik
pp = pd.DataFrame({'level': np.array(level), 'rain': np.array(rain)*15})
pp.plot(figsize=(15,5))

Unknown-1.png

Es scheinen viele Daten zu fehlen ... (Schweiß)

Prüfung der Trainingsdaten

In der Grafik sieht es so aus, als würde der Wasserstand nach dem Regen tendenziell ansteigen. Geben Sie also die Informationen über die Niederschlagsmenge von vor 48 Stunden bis zu diesem Zeitpunkt ein und verwenden Sie den Wasserstand als Ausgabedaten des Lehrers.

python


#Holen Sie sich 48 Stunden Niederschlag in einem zweidimensionalen Array
row = len(level)
tmp = np.zeros((row,48))

fp = FloatProgress(min=0, max=row)
display(fp)

for i in range(row):
    for j in range(len(tmp[0])):
        pos = row - 1 - i - j
        tmp[row-1-i][j] = rain[pos]
    fp.value = i

Fehlende Daten kürzen

Wenn die Wasserstandsdaten nicht erhalten wurden, sind sie nicht erforderlich und werden entfernt.

python


#Überprüfen Sie die Anzahl der fehlenden Daten
num = 0
for i in range(len(level)):
    if level[i] == 0:
        num += 1

#Vorbereitung für die Datenspeicherung
X = np.empty((0,48))
y = []

for i in range(len(level)):
    if level[i] > 0:
        X = np.append(X, np.array([tmp[i]]), axis=0)
        y.append(level[i])

#Überprüfen Sie die Daten in der Grafik
pp = pd.DataFrame({'level': np.array(y), 'rain': X[:,0]*20})
pp.plot(figsize=(15,5))

Unknown-2.png

Wenn Sie sich das Diagramm ansehen, können Sie sehen, dass es ziemlich schön geworden ist.

Maschinelles Lernen

Lernen Sie aus den bereinigten Daten und überprüfen Sie die Punktzahl des vorhergesagten Ergebnisses.

python


#Laden Sie das Kreuzvalidierungsmodul
from sklearn import cross_validation

#Trainingsset mit beschrifteten Daten(X_train, y_train)Und Testset(X_test, y_test)Eingeteilt in
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=.2, random_state=42)

#Normalisierung
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler.fit(X_train)

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

#Modelleinstellungen (zufällige Gesamtstruktur)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=200, max_depth=50, random_state=42)

#Lernen und Vorhersagen
model.fit(X_train, y_train)
result = model.predict(X_test)
result.shape

#Ergebnis
print(model.score(X_test,y_test))

Ergebnis ist ...

python


0.185628742515

... Nein!

Überprüfung der Ergebnisse

Die Punktzahl ist niedrig, aber lassen Sie uns das Ergebnis mit einem Diagramm überprüfen.

python


pp = pd.DataFrame({'act': np.array(y_test), "pred": np.array(result)})
pp.plot(figsize=(15,5))

Unknown-1.png

... Hmm, subtil.

Mit ein wenig Einfallsreichtum werden die Daten wie unten gezeigt in Zeitreihen zum Lernen und Vorhersagen unterteilt.

python


num = int(len(X) * 0.8)
print(len(X), num, len(X)-num)

X_train = X[:num]
X_test = X[num:]
y_train = y[:num]
y_test = y[num:]

Unknown-2.png

... was! Ein kleines schönes Gefühl (^ - ^)

Wenn Sie dann überlegen, was mit diesem Ergebnis erreicht werden kann, können Sie einen plötzlichen Anstieg des Wasserspiegels erkennen und eine Evakuierungswarnung geben, indem Sie den Wasserspiegel kontinuierlich anhand der Niederschlagsmenge vorhersagen.

Vor diesem Hintergrund hoffe ich, dass mehr lokale Regierungen solche Daten veröffentlichen werden.

Was soll ich als nächstes tun?

Nachtrag

Ich habe die Genauigkeit durch eine andere Lernmethode als in diesem Artikel verbessert und konnte den Wasserstand eine Stunde später vorhersagen. Deshalb habe ich ihn erneut geschrieben. Wenn Sie interessiert sind, sehen Sie bitte auch die folgende URL.

Verwendung offener Daten von Data City Sabae zur Vorhersage von Wasserstandsmesswerten durch maschinelles Lernen Teil 2

Recommended Posts

Versuchen Sie, den Wert des Wasserstandsmessers durch maschinelles Lernen unter Verwendung der offenen Daten von Data City Sabae vorherzusagen
Verwendung der offenen Daten von Data City Sabae zur Vorhersage des Werts des Wasserstandsmessers durch maschinelles Lernen Teil 2
Versuchen Sie, das Triplett des Bootsrennens vorherzusagen, indem Sie das Lernen bewerten
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Vorhersage des Vorhandenseins oder Nichtvorhandenseins von Untreue durch maschinelles Lernen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Versuchen Sie, Code aus 1 mit dem Framework Chainer für maschinelles Lernen (Mnist Edition) zu schreiben.
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (5)
Versuchen Sie, den Strombedarf durch maschinelles Lernen vorherzusagen
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (1)
Versuchen Sie, durch maschinelles Lernen anhand von Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (4)
Versuchen Sie, durch maschinelles Lernen basierend auf Wetterdaten eine "wetterkartenähnliche Front" zu zeichnen (2)
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Vorhersage kurzlebiger Arbeiten von Weekly Shonen Jump durch maschinelles Lernen (Teil 1: Datenanalyse)
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
Prognostizieren Sie das Geschlecht von Twitter-Nutzern durch maschinelles Lernen
[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
[Dance Dance Revolution] Ist es möglich, den Schwierigkeitsgrad (Fuß) aus dem Wert des Groove-Radars vorherzusagen?
Ich habe versucht, die Yin- und Yang-Klassifikation hololiver Mitglieder durch maschinelles Lernen zu überprüfen
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
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
[Anmerkung] Versuchen wir, den Stromverbrauch vorherzusagen! (Teil 1)
Lassen Sie uns die von der Präfektur Shimane veröffentlichten Daten zum Flusswasserstand visualisieren
[Maschinelles Lernen] Überprüfen Sie die Leistung des Klassifikators anhand handgeschriebener Zeichendaten
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Sammeln von Daten zum maschinellen Lernen
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Ein-Klick-Datenvorhersage für das Feld, realisiert durch vollautomatisches maschinelles Lernen
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
Bestimmen Sie die Authentizität von veröffentlichten Artikeln durch maschinelles Lernen (Google Prediction API).
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).
Ich bin ein Amateur am 14. Tag von Python, aber ich möchte maschinelles Lernen mit Scicit-Learn ausprobieren