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