[Einführung in die Elementzerlegung] Lassen Sie uns Zeitreihenanalysemethoden in R und Python arrange anordnen

Dieses Mal verfolgte ich die vorherige Zeitreihenzerlegung weiter. Das heißt, das Modell ist wie folgt Y_t=T_t + S_t + e_t Oder Y_t=T_tS_te_t Dies ist eine decompose () -Methode, die Zeitreihendaten zerlegt. Beim letzten Mal wurden alle Daten zur gleichen Zeit gezeichnet, aber dieses Mal habe ich beispielsweise versucht, reine Sprache und Vibration ohne Rauschen zu reproduzieren und zu verwenden, um sie zu speichern und zu reproduzieren. Die Daten sind die vorläufigen Zahlen der Anzahl der Todesfälle am Referenzort (und die früheren Referenzdaten) bis 2018. Die Referenz dieses Mal ist wie folgt. Referenz (1) ist für die R-Sprache und Referenz (2) ist für Python. Hier fassen wir den Prozess des unabhängigen Digitalisierens und Speicherns in einer CSV-Datei zusammen. 【Referenz】 ①Extracting Seasonality and Trend from Data: Decomposition Using RTIME SERIES DECOMPOSITION & PREDICTION IN PYTHONJapan e-Stat in Statistics ist eine Website des Regierungsstatistikportals, auf der Sie japanische Statistiken durchsuchen können 00450011 & tstat = 000001028897 & cycle = 1 & tclass1 = 000001053058 & tclass2 = 000001053059 & result_back = 1) ④ [Datensatzliste (5-4 jährliche Todesfälle und Sterblichkeitsraten nach Todesmonat (pro 1.000 Einwohner)) @ Japan nach Statistik](https://www.e-stat.go.jp/stat- Suche / Dateien? page = 1 & layout = datalist & toukei = 00450011 & tstat = 000001028897 & cycle = 7 & year = 20180 & month = 0 & tclass1 = 000001053058 & tclass2 = 000001053061 & tclass3 = 000001053065 & result_back = 1) Der Code und die Daten für diese Zeit sind unten angegeben. ・ MuAuan / R_Audio

Was ich getan habe

・ Zerlegen in R. ・ In Python zerlegen

・ Zerlegen in R.

Fast wie beim letzten Mal können Sie saisonale Daten mit der Notation decompose_IIP $ saisonal angeben.

data <- read.csv("./industrial/sibou_p.csv",encoding = "utf-8")
IIP <- ts(data,start=c(2008),frequency=12)
w_list <- c("seasonal","random","trend","observed")
decompose_IIP <- decompose(IIP)
for (i in w_list){
  if (i=="seasonal"){
    plot(decompose_IIP$seasonal)
  }else if(i=="random"){
    plot(decompose_IIP$random)
  }else if(i=="trend"){
    plot(decompose_IIP$trend)
  }else if(i=="observed"){
    plot(IIP)
  }
}
seasonal random
IIP_compose_sibou_seasonal.png IIP_compose_sibou_random.png
trend observed
IIP_compose_sibou_trend.png IIP_compose_sibou_observed.png

Ein anderer Code Zeichnen Sie zunächst die Originaldaten. Da diese Daten einen 12-Monats-Zyklus haben, nehmen wir als Trendkurve einen 12-gleitenden Durchschnitt. Überlagern Sie dann die obigen Originaldaten und zeichnen Sie Linien.

#install.packages("forecast")
library(forecast)
plot(as.ts(IIP))

trend_beer = ma(IIP, order = 12, centre = T) #4
lines(trend_beer)

plot_line_original.png

Die Zeichnung zeichnet nur diese Trendkurve.

plot(as.ts(trend_beer))

trend.png Zeichnen durch Subtrahieren von Trenddaten von den Originaldaten.

detrend_beer = IIP - trend_beer
plot(as.ts(detrend_beer))

detrend.png Dann werden die Daten mit dem Rauschen abzüglich des Trends in 12 Daten aufgeteilt und der Durchschnitt davon als saisonale Variation berechnet. 13 davon sind hintereinander gezeichnet. 【Referenz】

m_beer = t(matrix(data = detrend_beer, nrow = 12))
seasonal_beer = colMeans(m_beer, na.rm = T)
plot(as.ts(rep(seasonal_beer,13)))

seasonal_bear13.png Schließlich finden Sie die zufällige Variation. Das Ergebnis stimmte mit dem überein, was wir mit der Funktion decompose () gefunden haben. ** Ich suche diese Berechnung **.

random_beer = IIP - trend_beer - seasonal_beer
plot(as.ts(random_beer))

calc_random.png Geben Sie schließlich für verschiedene Zwecke die folgende Ausgabe in eine CSV-Datei aus.

write.csv(as.ts(rep(seasonal_beer,1300)), file = 'decompose_seasonal1300.csv')

・ In Python zerlegen

Ähnliche Funktionen sind in Python verfügbar. Der Code ist unten.

import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.seasonal import STL
import matplotlib.pyplot as plt

# Set figure width to 12 and height to 9
plt.rcParams['figure.figsize'] = [12, 9]
df = pd.read_csv('sibou_.csv')
series = df['Price']
print(series)

cycle, trend = sm.tsa.filters.hpfilter(series, 144)
fig, ax = plt.subplots(3,1)
ax[0].plot(series)
ax[0].set_title('Price')
ax[1].plot(trend)
ax[1].set_title('Trend')
ax[2].plot(cycle)
ax[2].set_title('Cycle')
plt.show()

Figure_1_py.png

Ein anderer Weg mit Python Persönlich, wenn das Ergebnis der Zerlegung das obige Verfahren ist, ist ein anderer Prozess für den Zyklus erforderlich, und dies scheint vernünftiger zu sein, da es sogar zufällige Teile verarbeiten kann. Im Vergleich zu R scheint die Saison von Jahr zu Jahr eine größere Schwingungsbreite zu haben (obwohl es natürlich ist, dass R verschwunden ist, weil diese Schwankung gemittelt wurde). In einigen Fällen ist diese Methode die vielseitigste. 【Referenz】 ・ Saisonale Trendzerlegung mit LOESS (STL)

stl=STL(series, period=12, robust=True)
result = stl.fit()
chart = result.plot()
chart1= result.plot(observed=False, resid=False)
chart2= result.plot(trend=False, resid=False)
plt.show()

Observed & Trend & Seasonal & Residual Figure_2_py.png Trend & Seasonal Figure_3_py.png Obeserved & Seasonal Figure_4_py.png Wenn Sie Folgendes tun, können Sie auch als separate Diagramme in ein Diagramm ausgeben.

pl1 = result.observed
pl2 = result.trend
pl3 = result.seasonal
pl4 = result.resid

plt.plot(pl1)
plt.plot(pl2)
plt.plot(pl3)
plt.plot(pl4)
plt.show()
plt.close()

pl1-4.png

Sie können einfach wie folgt ausgeben.

pl5 = result.seasonal.plot()
plt.show()
plt.close()
...
seasonal resid
seasonal.png resid.png
trend observed
trend.png observed.png

Die Ausgabe der CSV-Datei erfolgt wie folgt.

import csv
with open('sample_pl2.csv', 'w') as f:
    writer = csv.writer(f, delimiter='\n')
    writer.writerow(pl2)

Zusammenfassung

・ Ich habe versucht, die Methode der Zerlegung () mit R und Python zu arrangieren ・ Die Ergebnisse jedes Codes sind geringfügig unterschiedlich, können jedoch nahezu gleich sein, und die periodischen Schwankungen mit Rauschen und Trends können als reine periodische Schwankungen extrahiert werden. ・ Jede zerlegte Elementkomponente kann in CSV-Daten geschrieben und sekundär verwendet werden. ・ Diesmal am Beispiel der säkularen Änderung der Zahl der Todesfälle vorläufige Zahlen bis März = 1 & tclass1 = 000001053058 & tclass2 = 000001053059 & result_back = 1) wurde verwendet, aber in diesem Bereich ist kein abnormaler Wert wie 2011 zu sehen (vielmehr nimmt er ab).

・ Als nächstes wandeln wir das periodische Fluktuationselement in Klang um und hören es uns an. ・ Versuchen Sie es mit aperiodischen Fluktuationselementen (abgesehen vom Test).

Recommended Posts

[Einführung in die Elementzerlegung] Lassen Sie uns Zeitreihenanalysemethoden in R und Python arrange anordnen
Einführung in die Zeitreihenanalyse ~ Saisonales Anpassungsmodell ~ In R und Python implementiert
[Einführung in den Klang] Lassen Sie uns die Einführung in den Klang von Python und R arrange arrangieren. Hören Sie sich den Klang der Explosion von Nikkei 255 an.
"Einführung in die Datenanalyse durch statistische Bayes'sche Modellierung beginnend mit R und Stan" in Python implementiert
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
Einführung in die lineare Algebra mit Python: A = LU-Zerlegung
[Einführung in Python] Zusammenfassung der Funktionen und Methoden, die häufig in Python vorkommen [Problemformat]
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Einführung in die Effektüberprüfung Schreiben der Kapitel 4 und 5 in Python
Lesen von Notizen (in Python und Stan) zur Einführung in die statistische Modellierung für die Datenanalyse (Midorimoto)
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part1-
[Einführung in Python3 Tag 1] Programmierung und Python
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part4-
[Einführung in Python] Verwenden wir Pandas
Hashing von Daten in R und Python
[Einführung in Python] Verwenden wir Pandas
Einführung in die Bildanalyse opencv python
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part3-
[Einführung in Python] Verwenden wir Pandas
Leistungsfähigkeit von Vorhersagemethoden in der Zeitreihendatenanalyse Halboptimierung (SARIMA) [Memo]
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Datenanalyse: Einfache Anwendung deskriptiver Statistiken und Schätzungsstatistiken auf CSV-Daten in Python
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
[Einführung in die Udemy Python3 + -Anwendung] 18. Listenmethode
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Binden Sie Methoden an Python-Klassen und -Instanzen
[Einführung in Python] Verwenden wir foreach mit Python
Private Methoden und Felder in Python [Verschlüsselung]
Einfache Einführung in die Python3-Serie und OpenCV3
Hinzufügen von Serien zur Spalte in Python-Pandas
Verwendung ist und == in Python
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
Einführung in Vektoren: Lineare Algebra in Python <1>
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
Python: Zeitreihenanalyse: Erstellen eines SARIMA-Modells
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
So generieren Sie eine Sequenz in Python und C ++
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
Python: Zeitreihenanalyse: Konstanz, ARMA / ARIMA-Modell
tse - Einführung in den Text Stream Editor in Python
Verwendung der Python-Bildbibliothek in der Python3-Serie
Geschrieben "Einführung in die Effektüberprüfung" in Python
[Einführung in Python3, Tag 22] Kapitel 11 Parallele Verarbeitung und Vernetzung (11.1 bis 11.3)
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Senden Sie eine Nachricht an Skype und Chatwork in Python
Überlebensanalyse mit Python 2-Kaplan-Meier-Schätzung
[Einführung in die Udemy Python3 + -Anwendung] 64. Namespace und Gültigkeitsbereich
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Lesen von Zeitreihendaten in PyTorch
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet