Dieses Mal verfolgte ich die vorherige Zeitreihenzerlegung weiter.
Das heißt, das Modell ist wie folgt
・ Zerlegen in R. ・ In Python zerlegen
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 |
---|---|
trend | observed |
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)
Die Zeichnung zeichnet nur diese Trendkurve.
plot(as.ts(trend_beer))
Zeichnen durch Subtrahieren von Trenddaten von den Originaldaten.
detrend_beer = IIP - trend_beer
plot(as.ts(detrend_beer))
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)))
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))
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')
Ä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()
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 Trend & Seasonal Obeserved & Seasonal 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()
Sie können einfach wie folgt ausgeben.
pl5 = result.seasonal.plot()
plt.show()
plt.close()
...
seasonal | resid |
---|---|
trend | observed |
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)
・ 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