Suréchantillonnage et interpolation avec .resample()

Manipuler des séries temporelles en Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Conversion de fréquence et transformations

  • .resample(): similaire à .groupby()

  • Regroupe les données dans la période de rééchantillonnage et applique une ou plusieurs méthodes à chaque groupe

  • Nouvelle date déterminée par l'offset: début, fin, etc.

  • Suréchantillonnage: remplir depuis l'existant ou interpoler

  • Sous-échantillonnage: agréger les données existantes

Manipuler des séries temporelles en Python

Débuter: taux de chômage mensuel

unrate = pd.read_csv('unrate.csv', parse_dates['Date'], index_col='Date')

unrate.info()
DatetimeIndex: 208 entries, 2000-01-01 to 2017-04-01
Data columns (total 1 columns):
UNRATE    208 non-null float64 # pas d'information de fréquence
dtypes: float64(1)
unrate.head()
            UNRATE
DATE
2000-01-01     4.0
2000-02-01     4.1
2000-03-01     4.0
2000-04-01     3.8
2000-05-01     4.0
  • Date de référence: 1er jour du mois
Manipuler des séries temporelles en Python

Période de rééchantillonnage et offsets de fréquence

  • Resample crée une nouvelle date selon l'offset de fréquence
  • Plusieurs alternatives à la fin de mois calendaire

 

Fréquence Alias Date exemple
Fin de mois calendaire M 2017-04-30
Début de mois calendaire MS 2017-04-01
Fin de mois ouvré BM 2017-04-28
Début de mois ouvré BMS 2017-04-03
Manipuler des séries temporelles en Python

Logique du rééchantillonnage

Logique du rééchantillonnage

Manipuler des séries temporelles en Python

Logique du rééchantillonnage

Logique du rééchantillonnage

Manipuler des séries temporelles en Python

Attribuer une fréquence avec .resample()

unrate.asfreq('MS').info()
DatetimeIndex: 208 entries, 2000-01-01 to 2017-04-01
Freq: MS
Data columns (total 1 columns):
UNRATE    208 non-null float64
dtypes: float64(1)
unrate.resample('MS') # crée un objet Resampler
DatetimeIndexResampler [freq=<MonthBegin>, axis=0, closed=left, 
                        label=left, convention=start, base=0]
Manipuler des séries temporelles en Python

Attribuer une fréquence avec .resample()

unrate.asfreq('MS').equals(unrate.resample('MS').asfreq())
True
  • .resample(): ne renvoie des données qu'après appel d'une autre méthode
Manipuler des séries temporelles en Python

Croissance trimestrielle du PIB réel

gdp = pd.read_csv('gdp.csv')

gdp.info()
DatetimeIndex: 69 entries, 2000-01-01 to 2017-01-01
Data columns (total 1 columns):
gpd    69 non-null float64 # pas d'info de fréquence
dtypes: float64(1)
gdp.head(2)
            gpd
DATE
2000-01-01  1.2
2000-04-01  7.8
Manipuler des séries temporelles en Python

Interpoler la croissance mensuelle du PIB réel

gdp_1 = gdp.resample('MS').ffill().add_suffix('_ffill')
       gpd_ffill
DATE
2000-01-01  1.2
2000-02-01  1.2
2000-03-01  1.2
2000-04-01  7.8
Manipuler des séries temporelles en Python

Interpoler la croissance mensuelle du PIB réel

gdp_2 = gdp.resample('MS').interpolate().add_suffix('_inter')
            gpd_inter
DATE
2000-01-01  1.200000
2000-02-01  3.400000
2000-03-01  5.600000
2000-04-01  7.800000
  • .interpolate(): calcule des points sur la droite entre données existantes
Manipuler des séries temporelles en Python

Concaténer deux DataFrames

df1 = pd.DataFrame([1, 2, 3], columns=['df1'])

df2 = pd.DataFrame([4, 5, 6], columns=['df2'])
pd.concat([df1, df2])
   df1  df2
0  1.0  NaN
1  2.0  NaN
2  3.0  NaN
0  NaN  4.0
1  NaN  5.0
2  NaN  6.0
Manipuler des séries temporelles en Python

Concaténer deux DataFrames

pd.concat([df1, df2], axis=1)
   df1  df2
0    1    4
1    2    5
2    3    6
  • axis=1: concaténer horizontalement
Manipuler des séries temporelles en Python

Tracer la croissance du PIB interpolée

pd.concat([gdp_1, gdp_2], axis=1).loc['2015':].plot()

ch2_3_v2 - Upsampling & Interpolation.032.png

Manipuler des séries temporelles en Python

Combiner croissance du PIB et chômage

pd.concat([unrate, gdp_inter], axis=1).plot();

ch2_3_v2 - Upsampling & Interpolation.034.png

Manipuler des séries temporelles en Python

Passons à la pratique !

Manipuler des séries temporelles en Python

Preparing Video For Download...