[Introduction à la décomposition des éléments] Organisons les méthodes d'analyse des séries chronologiques en R et python ♬

Cette fois, j'ai poursuivi la décomposition des séries chronologiques précédente. Autrement dit, le modèle est le suivant Y_t=T_t + S_t + e_t Ou Y_t=T_tS_te_t Il s'agit d'une méthode decompose () qui décompose les données de séries chronologiques. La dernière fois, chaque donnée a été dessinée en même temps, mais cette fois, par exemple, dans le but de reproduire et d'utiliser de la voix pure et des vibrations sans bruit, j'ai essayé de le faire dans le but de vouloir les sauvegarder et les reproduire. Les données sont les chiffres préliminaires du nombre de décès sur le site de référence ③ et les données passées de référence ④ jusqu'en 2018. La référence cette fois est la suivante. La référence (1) est pour le langage R et la référence (2) pour python. Ici, nous résumerons le processus de numérisation indépendamment et d'enregistrement dans un fichier csv. 【référence】 ①Extracting Seasonality and Trend from Data: Decomposition Using RTIME SERIES DECOMPOSITION & PREDICTION IN PYTHON ③ [Japan e-Stat in Statistics est un site portail de statistiques gouvernementales sur lequel vous pouvez parcourir les statistiques japonaises](https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei= 00450011 & tstat = 000001028897 & cycle = 1 & tclass1 = 000001053058 & tclass2 = 000001053059 & result_back = 1) ④ [Liste d'ensemble de données (5-4 décès annuels et taux de mortalité par mois de décès (pour 1000 habitants)) @ Japon par statistiques](https://www.e-stat.go.jp/stat- search / files? page = 1 & layout = datalist & toukei = 00450011 & tstat = 000001028897 & cycle = 7 & year = 20180 & month = 0 & tclass1 = 000001053058 & tclass2 = 000001053061 & tclass3 = 000001053065 & result_back = 1) Le code et les données pour cette heure sont placés ci-dessous. ・ MuAuan / R_Audio

Ce que j'ai fait

・ Décomposer en R ・ Décomposer en python

・ Décomposer en R

Presque comme la dernière fois, vous pouvez spécifier des données saisonnières avec la notation decompose_IIP $ season.

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

Un autre code Tout d'abord, dessinez les données d'origine. Ensuite, puisque ces données ont un cycle de 12 mois, nous prendrons une moyenne mobile de 12 comme courbe de tendance. Ensuite, superposez les données originales ci-dessus et tracez des lignes.

#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

plot ne dessine que cette courbe de tendance.

plot(as.ts(trend_beer))

trend.png Tracez en soustrayant les données de tendance des données d'origine.

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

detrend.png Ensuite, les données avec le bruit moins la tendance sont divisées en 12 éléments de données, et leur moyenne est calculée comme la variation saisonnière. 13 d'entre eux sont tirés d'affilée. 【référence】

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 Enfin, trouvez la variation aléatoire. Le résultat était cohérent avec ce que nous avons trouvé avec la fonction decompose (). ** Je recherche ce calcul **.

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

calc_random.png Enfin, pour diverses utilisations, effectuez une sortie dans un fichier csv comme suit.

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

・ Décomposer en python

Des fonctions similaires sont disponibles en python. Le code est ci-dessous.

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

Une autre façon avec python Personnellement, si le résultat de la décomposition est la méthode ci-dessus, un autre processus est nécessaire pour le cycle, et cela semble être plus raisonnable car il peut traiter même des parties aléatoires. De plus, comparé à R, saisonnier semble avoir une plus grande largeur de vibration d'année en année (bien qu'il soit naturel que R ait disparu parce que cette fluctuation a été moyennée). Dans certains cas, cette méthode est la plus polyvalente. 【référence】 ・ Décomposition saisonnière à l'aide de 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 En outre, si vous procédez comme suit, vous pouvez générer un graphique sous forme de graphiques séparés.

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

Vous pouvez facilement générer une sortie en procédant comme suit.

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

Et la sortie du fichier csv se fait comme suit.

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

Résumé

・ J'ai essayé d'arranger la méthode de decompose () avec R et python ・ Les résultats de chaque code sont légèrement différents, mais ils peuvent être presque les mêmes, et les fluctuations périodiques avec le bruit et les tendances peuvent être extraites comme de pures fluctuations périodiques. ・ Chaque élément décomposé composant peut être écrit dans des données csv et peut être utilisé secondairement. ・ En fait, cette fois-ci, en prenant comme exemple le changement séculaire du nombre de décès [chiffres préliminaires jusqu'en mars](https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00450011&tstat=000001028897&cycle = 1 & tclass1 = 000001053058 & tclass2 = 000001053059 & result_back = 1) a été utilisé, mais aucune valeur anormale comme 2011 n'est vue dans cette plage (elle diminue plutôt).

・ Ensuite, convertissons l'élément de fluctuation périodique en son et écoutons-le. ・ Essayez les éléments de fluctuation apériodiques (en dehors du test)

Recommended Posts

[Introduction à la décomposition des éléments] Organisons les méthodes d'analyse des séries chronologiques en R et python ♬
Introduction à l'analyse des séries temporelles ~ Modèle d'ajustement saisonnier ~ Implémenté en R et Python
[Introduction au son] Organisons l'introduction au son de python et de R ♬ -Écoutez le son de l'explosion de Nikkei 255-
"Introduction à l'analyse de données par modélisation statistique bayésienne à partir de R et Stan" implémenté en Python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Introduction à l'algèbre linéaire avec Python: Décomposition A = LU
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Introduction à la vérification des effets Rédaction des chapitres 4 et 5 en Python
Notes de lecture (en Python et Stan) pour une introduction à la modélisation statistique pour l'analyse de données (Midorimoto)
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie1-
[Introduction à Python3 Jour 1] Programmation et Python
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie2-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie4-
[Introduction à Python] Utilisons les pandas
Hashing de données en R et Python
[Introduction à Python] Utilisons les pandas
Introduction à l'analyse d'image opencv python
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie3-
[Introduction à Python] Utilisons les pandas
Puissance des méthodes de prédiction dans l'analyse de données chronologiques Semi-optimisation (SARIMA) [Memo]
Comment obtenir la différence de date et d'heure en secondes avec Python
Analyse des données: application facile des statistiques descriptives et des statistiques d'estimation aux données CSV en Python
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
[Introduction à Udemy Python3 + Application] 18. Méthode List
[Introduction à Python] Comment utiliser la classe en Python?
Lier des méthodes aux classes et instances Python
[Introduction à Python] Utilisons foreach avec Python
Méthodes et champs privés en python [chiffrement]
Introduction facile de la série python3 et d'OpenCV3
Ajouter une série à la colonne dans les pandas python
Comment utiliser is et == en Python
Analyse des séries chronologiques n ° 6 Faux retour et partie républicaine
Introduction aux vecteurs: Algèbre linéaire en Python <1>
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Python: analyse des séries temporelles: création d'un modèle SARIMA
Obtenez des données de séries chronologiques de k-db.com avec Python
Introduction à Python Préparons l'environnement de développement
Comment générer une séquence en Python et C ++
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
Python: Analyse des séries temporelles: Constantity, modèle ARMA / ARIMA
tse --Introduction à l'éditeur de flux de texte en Python
Comment utiliser la bibliothèque d'images Python dans la série python3
J'ai écrit "Introduction à la vérification des effets" en Python
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
Une manière intelligente de chronométrer le traitement avec Python
Envoyer un message à Skype et Chatwork en Python
Analyse de survie apprise avec Python 2 - Estimation Kaplan-Meier
[Introduction à l'application Udemy Python3 +] 64. Espace de noms et portée
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
Lissage des séries temporelles et des données de forme d'onde 3 méthodes (lissage)
Comment lire les données de séries chronologiques dans PyTorch
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python