Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten

Behandeln Sie Zeitreihendaten mit Pandas

Laden und Anzeigen von Daten

Um Zeitreihendaten zu analysieren, muss eine gewisse Verarbeitung der angegebenen Daten durchgeführt werden.

Sie lernen den Umgang mit Zeitreihendaten im CSV-Format.

Lassen Sie uns zuerst die Daten mit Pandas lesen und anzeigen. Pandas laden

pd.read_csv()Als Argument
filepath_or_buffer="Geben Sie den Pfad und die URL der Datei an, aus der gelesen werden soll"Wird genutzt.
#Wenn Sie den Anfang der gelesenen Daten überprüfen möchten
df.head(Die Anzahl der Daten)

#Wenn Sie den Schwanz überprüfen möchten
df.tail(Die Anzahl der Daten)

# head,Schwanz war eine Funktion, um 5 Daten vom Anfang bzw. vom Ende zu extrahieren.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime


#Laden und Organisieren von Daten
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")

#Zeigen Sie die ersten 5 Daten an
print(sales_sparkling.head(5))
#Zeigen Sie 5 Daten am Ende an
print(sales_sparkling.tail(5))

Indexzeitinformationen

Verwenden Sie bei der Analyse von Zeitreihendaten Zeitinformationen (Monatsdaten im vorherigen Beispiel). Indem Sie es zum Index der Pandas machen (der Teil von 0, 1, 2 ...... ganz links im vorherigen Beispiel) Erleichtert die Handhabung der Daten.

Diese Verarbeitung

1.Indexinformationen pd.date_range("Am Anfang", "Wenn Sie fertig sind", freq="Intervall")Fassen Sie zusammen
2.Setzen Sie diese Informationen in den Index der Originaldaten ein
3.Von den Originaldaten"Month"Löschen
Befolgen Sie die Anweisungen in.
Zum Beispiel 2017/1/1~2018/1/Wenn Sie den Zeitraum von 1 nach Tagesintervall erfassen möchten
pd.date_range("2017-01-01", "2018-01-01", freq = "D")Lassen Sie uns das Argument so weitergeben.

Geben Sie freq ein Akronym für das Intervall, das Sie sammeln möchten. (Second➡S, Minute➡min, Hour➡H, Day➡D, Month➡M)

Überprüfen und bestimmen Sie "am Anfang", "am Ende" und "Intervall" mit df.head () und df.tail ().

Auch bei monatlichen Daten wie diesem Sekt Es ist einfacher zu handhaben, wenn Sie das Datum des Monatsendes selbst festlegen.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime


#Laden und Organisieren von Daten
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")
#Indexdaten erstellen
index = pd.date_range("1980-01-31", "1995-07-31", freq = "M")
#Indexdatenzuordnung
sales_sparkling.index = index
# "Month"Spalte löschen
del sales_sparkling["Month"]
#Anzeige von Daten
print(sales_sparkling.head())

Wird als gestricheltes Liniendiagramm angezeigt

Lassen Sie es uns einmal als gestricheltes Liniendiagramm anzeigen.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime


#Laden und Organisieren von Daten
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")
#Indexdaten erstellen
index = pd.date_range("1980-01-31", "1995-07-31", freq = "M")
#Indexdatenzuordnung
sales_sparkling.index = index
# "Month"Spalte löschen
del sales_sparkling["Month"]


#Stellen Sie die Daten als Liniendiagramm dar
#Legen Sie den Titel des Diagramms fest
plt.title("monthly-australian-wine-sales-th-sparkling")
#Benennung der x-Achse und der y-Achse des Diagramms
plt.xlabel("date")
plt.ylabel("sales")
#Datenplot
plt.plot(sales_sparkling)
plt.show()

Nicht stationäre Zeitreihendaten

Diese beiden Faktoren können als Grund für die mangelnde Konstanz angesehen werden.

Unter Hinweis auf die Bedingung der Konstanz in Bezug auf Trends die Bedingung, dass der erwartete Wert konstant ist. Wenn die Daten einen positiven Trend aufweisen, steigt auch ihr erwarteter Wert, sodass nicht gesagt werden kann, dass sie stationär sind.

Für saisonale Schwankungen ist der Autokorrelationskoeffizient (dh der Grad der Streuung der Datenwerte), der eine Bedingung für die Beständigkeit ist, Wenn ich mich an den Zustand erinnere, konstant zu sein Zeitreihendaten wie Oden, deren Umsatz zu einem bestimmten Zeitpunkt schnell steigt, erfüllen diese Bedingung nicht.

Um nichtstationäre Zeitreihendaten in stationäre Zeitreihendaten umzuwandeln Beseitigen Sie Trends und saisonale Schwankungen.

1,Entfernen Sie Trends und saisonale Schwankungen
2,Führen Sie eine Analyse durch, nachdem Sie die Zeitreihendaten stationär gemacht haben
3,Erstellen Sie ein Modell für stabile Daten.
4,Durch erneutes Synthetisieren von Trends und saisonalen Schwankungen wird dann ein Modell der ursprünglichen Serie erstellt.

Das ARIMA-Modell modelliert auf diese Weise Zeitreihendaten. (Um genau zu sein, werden wir bei saisonalen Schwankungen ein Modell namens SARIMA-Modell behandeln.)

Wie man Zeitreihendaten stationär macht

Beseitigung von Trends und saisonalen Schwankungen

Wie man die Zeitreihen zu einem stationären Prozess macht

1,Durch logarithmische Transformation kann die Streuung von Schwankungen gleichmäßig gemacht werden.

2,Entfernen Sie die Trendkomponente, nachdem Sie den Trend anhand eines gleitenden Durchschnitts geschätzt haben

3,Beseitigen Sie Trends und saisonale Schwankungen, indem Sie in eine Differenzreihe konvertieren

4,Verwenden Sie die saisonale Anpassung

Und so weiter.

Methode mit logarithmischer Konvertierung

Durch logarithmische Konvertierung können Schwankungen der Daten gemildert werden. Wenn Sie einen Logarithmus nehmen, wird die Zahl umso kleiner ausgegeben, je größer die Zahl ist.

Mit anderen Worten kann die Selbstkovarianz für eine flüchtige Zeitreihe einheitlich gemacht werden. Lassen Sie uns die Zeitreihen tatsächlich in logarithmische konvertieren.

Wenn der Trend nicht durch logarithmische Konvertierung entfernt werden kann, muss der Trend weiter entfernt werden.

Np für die logarithmische Umwandlung.log()Wird genutzt.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
import numpy as np


#Daten lesen
sunspots = sm.datasets.sunspots.load_pandas().data
sunspots.index = pd.Index(sm.tsa.datetools.dates_from_range("1700", "2008"))
del sunspots["YEAR"]

#Protokollkonvertierung
sunspots_log = np.log(sunspots)#Bitte schreiben Sie hier

#Grafik nach logarithmischer Konvertierung
plt.title("Sunspots")
plt.xlabel("date")
plt.ylabel("sunspots_log")
plt.plot(sunspots_log)
plt.show()

Verwenden Sie den gleitenden Durchschnitt

Um einen gleitenden Durchschnitt zu ermitteln, nehmen Sie den Durchschnitt von k aufeinanderfolgenden Werten. Was ist ein gleitender Durchschnitt? Nehmen Sie einen "Durchschnitt" in einem bestimmten Abschnitt von Zeitreihendaten. Das ist zu wiederholen, während der Abschnitt "bewegt" wird.

Dadurch können die Daten geglättet werden, während die Eigenschaften der Originaldaten beibehalten werden.

Wenn die monatlichen Daten beispielsweise saisonale Schwankungen aufweisen, können Sie den gleitenden Durchschnitt von 12 aufeinander folgenden Werten ermitteln. Saisonale Schwankungen können beseitigt und Trendkomponenten extrahiert werden.

Subtrahieren Sie dann den berechneten gleitenden Durchschnitt von der Originalserie. Auf diese Weise kann die Trendkomponente der Serie entfernt werden.

Nehmen wir alle 51 Wochen (nur ein Jahr) einen gleitenden Durchschnitt für die CO2-Konzentrationsdaten am Mauna Loa Observatorium und überprüfen Sie den Trend. Stellen Sie außerdem sicher, dass sich die Daten, die durch Subtrahieren des gleitenden Durchschnitts von der ursprünglichen Reihe erhalten werden, dem stetigen Prozess nähern.

Der gleitende Durchschnitt ist
DATA.rolling(window=Wie viele gleitende Durchschnitte sind zu nehmen?).mean()Durch
Kann gefragt werden
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
import numpy as np


co2_tsdata = sm.datasets.co2.load_pandas().data
#Umgang mit fehlenden Werten
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Originaldiagramm der Serie
plt.subplot(6, 1, 1)
plt.xlabel("date")
plt.ylabel("co2")
plt.plot(co2_tsdata2)
#Finden Sie den gleitenden Durchschnitt
co2_moving_avg = co2_tsdata2.rolling(window=51).mean()
#Grafik mit gleitendem Durchschnitt
plt.subplot(6, 1, 3)
plt.xlabel("date")
plt.ylabel("co2")
plt.plot(co2_moving_avg)
#Originalserie-Grafik mit gleitendem Durchschnitt
plt.subplot(6, 1, 5)
plt.xlabel("date")
plt.ylabel("co2")
mov_diff_co2_tsdata = co2_tsdata2-co2_moving_avg 
plt.plot(mov_diff_co2_tsdata)
plt.show()

Nimm den Unterschied

Die Umrechnung in eine Differenzreihe ist die häufigste Methode zur Bereitstellung von Konstanz. Trends und saisonale Schwankungen können durch Differenzierung beseitigt werden.

Die Differenzreihe war eine Reihe, die durch Subtrahieren benachbarter Daten in den Zeitreihendaten erhalten wurde. Beispielsweise ist die Differenzreihe von Zeitreihendaten [1, 5, 3, 5, 3, 2, 2, 9] [4, -2, 2, -2, -1, 0, 7].

Der Hauptunterschied ist DATA.diff()Wird von benötigt.

Wenn Sie die Differenzserie aus der generierten Differenzserie nehmen, handelt es sich um die Differenzserie zweiter Ordnung.

Umwandlung der Daten zur Kohlendioxidkonzentration vom Mauna Loa Observatory in eine Differenzreihe erster Ordnung Lassen Sie uns überprüfen, ob sich die Originalserie einem stetigen Prozess nähert.

import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
import numpy as np


co2_tsdata = sm.datasets.co2.load_pandas().data
#Umgang mit fehlenden Werten
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Originale Serienhandlung
plt.subplot(2, 1, 1)
plt.xlabel("date")
plt.ylabel("co2")
plt.plot(co2_tsdata2)
#Nimm den Unterschied
plt.subplot(2, 1, 2)
plt.xlabel("date")
plt.ylabel("co2_diff")

co2_data_diff = co2_tsdata2.diff()#Bitte schreiben Sie hier

#Darstellung der Differenzreihen
plt.plot(co2_data_diff)
plt.show()

Verwendung der saisonalen Anpassung

Ich habe etwas über die Differenzserie gelernt. Zu dieser Zeit war die ursprüngliche Serie in Trends, saisonale Schwankungen und Residuen unterteilt.

Diese Konvertierung ist
(=Trend+Saisonale Schwankungen+Restfehler)
Da es ausgedrückt wird als
Originalserie-Trend-Saisonale Schwankungen=Restfehler
Es wird sein.

Mit anderen Worten, die Residuen sind stationäre Zeitreihendaten, bei denen Trends und saisonale Schwankungen entfernt werden. Lassen Sie uns überprüfen, ob der Rest ein stetiger Prozess ist.

import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
import numpy as np


#Daten lesen
co2_tsdata = sm.datasets.co2.load_pandas().data
#Umgang mit fehlenden Werten
co2_tsdata2 = co2_tsdata.dropna()
#Saisonale Anpassung und Diagramm
res = sm.tsa.seasonal_decompose(co2_tsdata2,freq=51)
fig = res.plot()
plt.show()

Recommended Posts

Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Python: Zeitreihenanalyse
[Python] Zeichnen Sie Zeitreihendaten
Datenanalyse Python
Vorverarbeitungsvorlage für die Datenanalyse (Python)
Datenanalyse mit Python 2
Datenanalyse Übersicht Python
Python-Zeitreihenfrage
RNN_LSTM1 Zeitreihenanalyse
Zeitreihenanalyse 1 Grundlagen
Python-Datenanalysevorlage
Datenanalyse mit Python
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Python: Zeitreihenanalyse: Konstanz, ARMA / ARIMA-Modell
[Python] Datenanalyse, maschinelles Lernen (Kaggle) -Datenvorverarbeitung-
Mein Python-Datenanalyse-Container
Python für die Datenanalyse Kapitel 4
[Python] Hinweise zur Datenanalyse
Lernnotizen zur Python-Datenanalyse
Zeitreihenanalyse Teil 4 VAR
Zeitreihenanalyse Teil 3 Prognose
Python für die Datenanalyse Kapitel 2
Zeitreihenanalyse Teil 1 Autokorrelation
Datenanalyse mit Python-Pandas
Python für die Datenanalyse Kapitel 3
Python 3.4 Windows7-64bit-Umgebung erstellen (für die Analyse finanzieller Zeitreihen)
Umsatzprognose für die Zeitreihenanalyse
[In kürzester Zeit verstehen] Python-Grundlagen für die Datenanalyse
Persönliche Notizen zur Vorverarbeitung von Python Pandas-Daten
Zeitreihenplot gestartet ~ Python Edition ~
Über Zeitreihendaten und Übertraining
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Differenzierung von Zeitreihendaten (diskret)
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
"Zeitreihenanalyse von Wirtschafts- und Finanzdaten messen" Das Problem am Ende des Kapitels mit Python lösen
Vorhersage von Zeitreihendaten durch Simplex-Projektion
Zeitreihenanalyse 2 Stabilität, ARMA / ARIMA-Modell
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
Python-Visualisierungstool für die Datenanalyse
Ich habe versucht, Zeitreihen zu analysieren! (AR-Modell)
Zeitreihenanalyse Teil 2 AR / MA / ARMA
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
[Python] Beschleunigt das Laden von Zeitreihen-CSV
[Python] Erste Datenanalyse / maschinelles Lernen (Kaggle)
Zeitreihenanalyse 4 Konstruktion des SARIMA-Modells
Erkennung von Zeitreihendatenanomalien für Anfänger
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Ich habe ein Python-Datenanalysetraining aus der Ferne durchgeführt
Umgang mit Zeitreihendaten (Implementierung)
Vorbereitung auf die von Python 3 Engineer zertifizierte Datenanalyseprüfung
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
OpenFOAM-Zeitreihendaten lesen und Daten einstellen
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
Erster Python
Datenanalyse Titanic 2