Re-muestreo e interpolación con .resample()

Manipulación de series temporales en Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Conversión de frecuencia y métodos de transformación

  • .resample(): similar a .groupby()

  • Agrupa datos dentro del periodo y aplica uno o varios métodos a cada grupo

  • Nueva fecha según el desplazamiento: inicio, fin, etc.

  • Upsampling: rellenar desde existentes o interpolar valores

  • Downsampling: agregar datos existentes

Manipulación de series temporales en Python

Inicio: tasa de desempleo mensual

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 # sin información de frecuencia
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
  • Fecha de referencia: día 1 de cada mes
Manipulación de series temporales en Python

Periodo de remuestreo y desplazamientos de frecuencia

  • Resample crea nuevas fechas según el desplazamiento de frecuencia
  • Varias alternativas al fin de mes calendario

 

Frecuencia Alias Fecha de muestra
Fin de mes calendario M 2017-04-30
Inicio de mes MS 2017-04-01
Fin de mes laboral BM 2017-04-28
Inicio de mes laboral BMS 2017-04-03
Manipulación de series temporales en Python

Lógica de remuestreo

Lógica de remuestreo

Manipulación de series temporales en Python

Lógica de remuestreo

Lógica de remuestreo

Manipulación de series temporales en Python

Asignar frecuencia con .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') # crea un objeto Resampler
DatetimeIndexResampler [freq=<MonthBegin>, axis=0, closed=left, 
                        label=left, convention=start, base=0]
Manipulación de series temporales en Python

Asignar frecuencia con .resample()

unrate.asfreq('MS').equals(unrate.resample('MS').asfreq())
True
  • .resample(): devuelve datos solo al llamar a otro método
Manipulación de series temporales en Python

PIB real trimestral (crecimiento)

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 # sin info de frecuencia
dtypes: float64(1)
gdp.head(2)
            gpd
DATE
2000-01-01  1.2
2000-04-01  7.8
Manipulación de series temporales en Python

Interpolar crecimiento mensual del PIB real

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
Manipulación de series temporales en Python

Interpolar crecimiento mensual del PIB real

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(): calcula puntos en la línea recta entre datos existentes
Manipulación de series temporales en Python

Concatenar dos 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
Manipulación de series temporales en Python

Concatenar dos DataFrames

pd.concat([df1, df2], axis=1)
   df1  df2
0    1    4
1    2    5
2    3    6
  • axis=1: concatena en horizontal
Manipulación de series temporales en Python

Graficar crecimiento del PIB interpolado

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

ch2_3_v2 - Upsampling & Interpolation.032.png

Manipulación de series temporales en Python

Combinar crecimiento del PIB y desempleo

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

ch2_3_v2 - Upsampling & Interpolation.034.png

Manipulación de series temporales en Python

¡Vamos a practicar!

Manipulación de series temporales en Python

Preparing Video For Download...