Indexation et rééchantillonnage de séries chronologiques

Manipuler des séries chronologiques en Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Transformation de séries chronologiques

Transformations de base des séries chronologiques :

  • Analyser des dates en chaîne et convertir en datetime64

  • Sélectionner et découper des sous-périodes précises

  • Définir et modifier la fréquence du DateTimeIndex

    • Suréchantillonnage vs sous-échantillonnage
Manipuler des séries chronologiques en Python

Obtenir les prix de l'action GOOG

google = pd.read_csv('google.csv')  # import pandas as pd

google.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 504 entries, 0 to 503
Data columns (total 2 columns):
date     504 non-null object
price    504 non-null float64
dtypes: float64(1), object(1)
google.head()
         date   price
0  2015-01-02  524.81
1  2015-01-05  513.87
2  2015-01-06  501.96
3  2015-01-07  501.10
4  2015-01-08  502.68
Manipuler des séries chronologiques en Python

Convertir des dates en chaîne en datetime64

  • pd.to_datetime() :
    • Analyser une date en chaîne
    • Convertir en datetime64
google.date = pd.to_datetime(google.date)

google.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 504 entries, 0 to 503
Data columns (total 2 columns):
date     504 non-null datetime64[ns]
price    504 non-null float64
dtypes: datetime64[ns](1), float64(1)
Manipuler des séries chronologiques en Python

Convertir des dates en chaîne en datetime64

  • .set_index() :
    • Mettre la date à l'index
    • inplace :
      • ne pas créer de copie
google.set_index('date', inplace=True)

google.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 504 entries, 2015-01-02 to 2016-12-30
Data columns (total 1 columns):
price    504 non-null float64
dtypes: float64(1)
Manipuler des séries chronologiques en Python

Tracer la série temporelle de Google

google.price.plot(title='Google Stock Price')

plt.tight_layout(); plt.show()

ch1_2_v2 - Indexing & Resampling Time Series.013.png

Manipuler des séries chronologiques en Python

Indexation partielle par chaîne

  • Sélection/indexation avec des chaînes interprétables comme dates
google['2015'].info() # Passer une chaîne pour une partie de date
DatetimeIndex: 252 entries, 2015-01-02 to 2015-12-31
Data columns (total 1 columns):
price    252 non-null float64
dtypes: float64(1)
google['2015-3': '2016-2'].info() # La tranche inclut le dernier mois
DatetimeIndex: 252 entries, 2015-03-02 to 2016-02-29
Data columns (total 1 columns):
price    252 non-null float64
dtypes: float64(1)
memory usage: 3.9 KB
Manipuler des séries chronologiques en Python

Indexation partielle par chaîne

google.loc['2016-6-1', 'price'] # Utiliser la date complète avec .loc[]
734.15
Manipuler des séries chronologiques en Python

.asfreq() : définir la fréquence

  • .asfreq('D') :
    • Convertir le DateTimeIndex en fréquence jours civils
google.asfreq('D').info() # définir la fréquence jours civils
DatetimeIndex: 729 entries, 2015-01-02 to 2016-12-30
Freq: D
Data columns (total 1 columns):
price    504 non-null float64
dtypes: float64(1)
Manipuler des séries chronologiques en Python

.asfreq() : définir la fréquence

  • Suréchantillonnage :
    • Fréquence plus élevée ⇒ nouvelles dates ⇒ données manquantes
google.asfreq('D').head()
             price
date              
2015-01-02  524.81
2015-01-03     NaN
2015-01-04     NaN
2015-01-05  513.87
2015-01-06  501.96
Manipuler des séries chronologiques en Python

.asfreq() : réinitialiser la fréquence

  • .asfreq('B') :
    • Convertir le DateTimeIndex en fréquence jours ouvrables
google = google.asfreq('B') # Changer pour la fréquence jours civils

google.info()
DatetimeIndex: 521 entries, 2015-01-02 to 2016-12-30
Freq: B
Data columns (total 1 columns):
price    504 non-null float64
dtypes: float64(1)
Manipuler des séries chronologiques en Python

.asfreq() : réinitialiser la fréquence

google[google.price.isnull()] # Sélectionner les valeurs 'price' manquantes
            price
date             
2015-01-19    NaN
2015-02-16    NaN
...
2016-11-24    NaN
2016-12-26    NaN
  • Jours ouvrables sans séance de négociation
Manipuler des séries chronologiques en Python

Passons à la pratique !

Manipuler des séries chronologiques en Python

Preparing Video For Download...