Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques

Gérez les données de séries chronologiques avec les pandas

Chargement et affichage des données

Pour analyser les données de séries chronologiques, un certain traitement doit être effectué sur les données données.

Vous apprendrez à gérer les données de séries chronologiques fournies au format CSV.

Tout d'abord, lisons les données avec les pandas et affichons-les. Pour charger les pandas

pd.read_csv()Comme argument
filepath_or_buffer="Spécifiez le chemin et l'URL du fichier à lire"Est utilisé.
#Lorsque vous souhaitez vérifier le début des données lues
df.head(Le nombre de données)

#Quand tu veux vérifier la queue
df.tail(Le nombre de données)

# head,tail était une fonction pour extraire 5 données du début et de la fin, respectivement.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime


#Chargement et organisation des données
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")

#Afficher les 5 premières données
print(sales_sparkling.head(5))
#Afficher 5 données à la queue
print(sales_sparkling.tail(5))

Indexer les informations de temps

Lors de l'analyse des données de séries chronologiques, utilisez les informations de temps (données du mois dans l'exemple précédent) En en faisant l'index des pandas (la partie de 0, 1, 2 ...... à l'extrême gauche dans l'exemple précédent) Rend les données plus faciles à gérer.

Ce traitement

1.informations d'index pd.date_range("Au début", "Une fois terminé", freq="intervalle")Résumer dans
2.Remplacez ces informations par l'index des données d'origine
3.Des données originales"Month"Supprimer
Suivez la procédure dans.
Par exemple, 2017/1/1~2018/1/Si vous souhaitez collecter la période de 1 par intervalle de jour
pd.date_range("2017-01-01", "2018-01-01", freq = "D")Passons l'argument comme ça.

Donnez à freq un acronyme pour l'intervalle que vous souhaitez collecter. (Second➡S, Minute➡min, Hour➡H, Day➡D, Month➡M)

Vérifiez et déterminez "au début", "à la fin" et "intervalle" avec df.head () et df.tail ().

Aussi, dans le cas de données mensuelles comme ce vin mousseux C'est plus facile à gérer si vous définissez vous-même la date de fin de mois.

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


#Chargement et organisation des données
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")
#Création de données d'index
index = pd.date_range("1980-01-31", "1995-07-31", freq = "M")
#Affectation des données d'index
sales_sparkling.index = index
# "Month"Supprimer la colonne
del sales_sparkling["Month"]
#Affichage des données
print(sales_sparkling.head())

S'affiche sous forme de graphique en ligne brisée

Affichons-le une fois sous forme de graphique en ligne brisée.

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


#Chargement et organisation des données
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")
#Création de données d'index
index = pd.date_range("1980-01-31", "1995-07-31", freq = "M")
#Affectation des données d'index
sales_sparkling.index = index
# "Month"Supprimer la colonne
del sales_sparkling["Month"]


#Représenter les données sous forme de graphique linéaire
#Définir le titre du graphique
plt.title("monthly-australian-wine-sales-th-sparkling")
#Nommer l'axe des x et l'axe des y du graphique
plt.xlabel("date")
plt.ylabel("sales")
#Graphique de données
plt.plot(sales_sparkling)
plt.show()

Données de séries chronologiques non stationnaires

Ces deux facteurs peuvent être considérés comme la raison de ne pas avoir de constance.

Rappelant la condition de constance des tendances, la condition que la valeur attendue soit constante. Si les données ont une tendance positive, leur valeur attendue est également à la hausse, donc on ne peut pas dire qu'elle est stationnaire.

Pour les fluctuations saisonnières, le coefficient d'autocorrélation (c'est-à-dire le degré de dispersion des valeurs de données), qui est une condition de stabilité, Quand je me souviens de la condition d'être constant Les données chronologiques telles que Oden, dont les ventes augmentent rapidement à un certain moment, ne remplissent pas cette condition.

Pour convertir des données de série chronologique non stationnaires en données de série chronologique stationnaire Éliminez les tendances et les fluctuations saisonnières.

1,Supprimer les tendances et les fluctuations saisonnières
2,Effectuer une analyse après avoir rendu les données de la série chronologique stationnaires
3,Construisez un modèle de données stables.
4,Puis, en synthétisant à nouveau les tendances et les fluctuations saisonnières, un modèle de la série originale est construit.

Le modèle ARIMA modélise les données de séries chronologiques de cette manière. (Pour être précis, s'il y a des fluctuations saisonnières, nous traiterons un modèle appelé le modèle SARIMA)

Comment rendre les données de séries chronologiques stationnaires

Élimination des tendances et des fluctuations saisonnières

Comment faire de la série chronologique un processus stationnaire

1,Par transformation logarithmique, la dispersion des fluctuations peut être uniformisée.

2,Après avoir estimé la tendance en prenant une moyenne mobile, supprimez la composante de tendance

3,Éliminez les tendances et les fluctuations saisonnières en convertissant en une série de différences

4,Utiliser la désaisonnalisation

Etc.

Méthode utilisant la conversion logarithmique

En effectuant une conversion logarithmique, les fluctuations des données peuvent être modérées. En prenant un logarithme, plus le nombre est grand, plus le nombre sera petit.

En d'autres termes, l'auto-covariance peut être uniformisée pour une série chronologique volatile. Convertissons en fait la série chronologique en logarithmique.

Si la tendance ne peut pas être supprimée par conversion logarithmique, la tendance doit être supprimée davantage.

Np pour la conversion logarithmique.log()Est utilisé.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
import numpy as np


#Lire les données
sunspots = sm.datasets.sunspots.load_pandas().data
sunspots.index = pd.Index(sm.tsa.datetools.dates_from_range("1700", "2008"))
del sunspots["YEAR"]

#Conversion de journal
sunspots_log = np.log(sunspots)#Veuillez écrire ici

#Graphique après conversion logarithmique
plt.title("Sunspots")
plt.xlabel("date")
plt.ylabel("sunspots_log")
plt.plot(sunspots_log)
plt.show()

Utiliser la moyenne mobile

Pour prendre une moyenne mobile, prenez la moyenne de k valeurs consécutives. Qu'est-ce qu'une moyenne mobile? Prenez une «moyenne» dans une certaine section de données chronologiques. C'est à répéter en "déplaçant" la section.

Cela permettra aux données d'être lissées tout en conservant les caractéristiques des données d'origine.

Par exemple, si les données mensuelles présentent des fluctuations saisonnières, vous pouvez trouver la moyenne mobile de 12 valeurs consécutives. Les fluctuations saisonnières peuvent être supprimées et les composantes de tendance peuvent être extraites.

Soustrayez ensuite la moyenne mobile calculée de la série d'origine. Ce faisant, la composante de tendance de la série peut être supprimée.

Prenons une moyenne mobile toutes les 51 semaines (juste un an) pour les données de concentration de CO2 à l'observatoire du Mauna Loa et vérifions la tendance. Vérifiez également que les données obtenues en soustrayant la moyenne mobile de la série originale se rapprochent du processus stable.

La moyenne mobile est
DATA.rolling(window=Combien de moyennes mobiles prendre).mean()Par
Peut être demandé
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
#Gestion des valeurs manquantes
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Graphique de la série originale
plt.subplot(6, 1, 1)
plt.xlabel("date")
plt.ylabel("co2")
plt.plot(co2_tsdata2)
#Trouvez la moyenne mobile
co2_moving_avg = co2_tsdata2.rolling(window=51).mean()
#Graphique de moyenne mobile
plt.subplot(6, 1, 3)
plt.xlabel("date")
plt.ylabel("co2")
plt.plot(co2_moving_avg)
#Série originale-Graphique de moyenne mobile
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()

Faites la différence

La conversion en série de différences est la méthode la plus couramment utilisée pour assurer la constance. Les tendances et les fluctuations saisonnières peuvent être éliminées en prenant la différence.

La série de différences était une série obtenue en soustrayant des données adjacentes dans les données de séries chronologiques. Par exemple, la série de différences de données de séries chronologiques [1, 5, 3, 5, 3, 2, 2, 9] est [4, -2, 2, -2, -1, 0, 7].

La principale différence est DATA.diff()Est requis par.

Si vous prenez la série de différences de la série de différences générée, ce sera la série de différences de deuxième ordre.

Conversion des données de concentration de dioxyde de carbone de l'observatoire du Mauna Loa en une série de différences de premier ordre Vérifions que la série originale se rapproche d'un processus régulier.

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
#Gestion des valeurs manquantes
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Tracé de la série originale
plt.subplot(2, 1, 1)
plt.xlabel("date")
plt.ylabel("co2")
plt.plot(co2_tsdata2)
#Faites la différence
plt.subplot(2, 1, 2)
plt.xlabel("date")
plt.ylabel("co2_diff")

co2_data_diff = co2_tsdata2.diff()#Veuillez écrire ici

#Graphique des séries de différences
plt.plot(co2_data_diff)
plt.show()

Utilisation de la désaisonnalisation

J'ai appris la série des différences. À cette époque, la série originale était divisée en tendances, fluctuations saisonnières et résidus.

Cette conversion est
(Série originale=tendance+Fluctuation saisonnière+Erreur résiduelle)
Puisqu'il est exprimé comme
Série originale-tendance-Fluctuation saisonnière=Erreur résiduelle
Ce sera.

En d'autres termes, les résidus sont des données de séries chronologiques stationnaires sans tendances et fluctuations saisonnières. Vérifions que le résidu est un processus régulier.

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


#Lire les données
co2_tsdata = sm.datasets.co2.load_pandas().data
#Gestion des valeurs manquantes
co2_tsdata2 = co2_tsdata.dropna()
#Ajustement saisonnier et tracé graphique
res = sm.tsa.seasonal_decompose(co2_tsdata2,freq=51)
fig = res.plot()
plt.show()

Recommended Posts

Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Python: analyse des séries chronologiques
[Python] Tracer des données de séries chronologiques
Analyse de données python
Modèle de prétraitement pour l'analyse des données (Python)
Analyse de données avec python 2
Présentation de l'analyse de données python
Question sur la série chronologique Python
Analyse des séries chronologiques RNN_LSTM1
Analyse des séries chronologiques 1 Principes de base
Modèle d'analyse de données Python
Analyse de données avec Python
Obtenez des données de séries chronologiques de k-db.com avec Python
Python: Analyse des séries temporelles: Constantity, modèle ARMA / ARIMA
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
Mon conteneur d'analyse de données python
Python pour l'analyse des données Chapitre 4
[Python] Notes sur l'analyse des données
Notes d'apprentissage sur l'analyse des données Python
Analyse des séries chronologiques partie 4 VAR
Analyse de séries chronologiques Partie 3 Prévisions
Python pour l'analyse des données Chapitre 2
Analyse de séries chronologiques Partie 1 Autocorrélation
Analyse de données à l'aide de pandas python
Python pour l'analyse des données Chapitre 3
Python 3.4 Créer un environnement Windows7-64bit (pour l'analyse des séries chronologiques financières)
Analyse des séries chronologiques
[Comprendre au plus court] Principes de base de Python pour l'analyse des données
Notes personnelles de prétraitement des données Python Pandas
L'intrigue de séries temporelles a commencé ~ édition python ~
À propos des données de séries chronologiques et du surentraînement
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Différenciation des données de séries chronologiques (discrètes)
Analyse de données à partir de python (visualisation de données 1)
Analyse de données à partir de python (visualisation de données 2)
"Analyse des séries chronologiques de mesure des données économiques et financières" Résolution du problème de fin de chapitre avec Python
Prédiction des données de séries chronologiques par projection simplex
Analyse des séries chronologiques 2 Stabilité, modèle ARMA / ARIMA
Prédire les données de séries chronologiques avec un réseau neuronal
Outil de visualisation Python pour le travail d'analyse de données
J'ai essayé l'analyse de séries chronologiques! (Modèle AR)
Analyse des séries chronologiques Partie 2 AR / MA / ARMA
Python: prétraitement en machine learning: acquisition de données
[Python] Accélère le chargement du fichier CSV de séries chronologiques
[Python] Première analyse de données / apprentissage automatique (Kaggle)
Analyse des séries chronologiques 4 Construction du modèle SARIMA
Détection d'anomalies de données chronologiques pour les débutants
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Python: prétraitement dans l'apprentissage automatique: conversion de données
J'ai suivi une formation à l'analyse de données Python à distance
Comment gérer les données de séries chronologiques (mise en œuvre)
Préparation à l'examen d'analyse de données certifié Python 3 Engineer
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Lecture des données de séries chronologiques OpenFOAM et des ensembles de données
Analyse des séries chronologiques n ° 6 Faux retour et partie républicaine
Premier Python
Analyse des données Titanic 2