Amostragem superior e interpolação com .resample()

Manipulando dados de séries temporais em Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Conversão de frequência e transformações

  • .resample(): parecido com .groupby()

  • Agrupa dados no período de reamostragem e aplica um ou vários métodos a cada grupo

  • Nova data definida pelo offset: início, fim etc.

  • Upsampling: preencher a partir do existente ou interpolar valores

  • Downsampling: aplicar agregação aos dados existentes

Manipulando dados de séries temporais em Python

Começando: taxa de desemprego mensal

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 # sem informação de frequência
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
  • Data de referência: 1º dia do mês
Manipulando dados de séries temporais em Python

Período de reamostragem e offsets de frequência

  • Resample cria nova data para o offset de frequência
  • Várias alternativas ao fim de mês do calendário

 

Frequência Atalho Data de exemplo
Fim do mês (calend.) M 2017-04-30
Início do mês MS 2017-04-01
Fim do mês útil BM 2017-04-28
Início do mês útil BMS 2017-04-03
Manipulando dados de séries temporais em Python

Lógica de reamostragem

Lógica de reamostragem

Manipulando dados de séries temporais em Python

Lógica de reamostragem

Lógica de reamostragem

Manipulando dados de séries temporais em Python

Definir frequência com .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') # cria objeto Resampler
DatetimeIndexResampler [freq=<MonthBegin>, axis=0, closed=left, 
                        label=left, convention=start, base=0]
Manipulando dados de séries temporais em Python

Definir frequência com .resample()

unrate.asfreq('MS').equals(unrate.resample('MS').asfreq())
True
  • .resample(): só retorna dados ao chamar outro método
Manipulando dados de séries temporais em Python

Crescimento real do PIB trimestral

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 # sem info de frequência
dtypes: float64(1)
gdp.head(2)
            gpd
DATE
2000-01-01  1.2
2000-04-01  7.8
Manipulando dados de séries temporais em Python

Interpolar crescimento mensal do 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
Manipulando dados de séries temporais em Python

Interpolar crescimento mensal do 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(): encontra pontos na linha reta entre dados existentes
Manipulando dados de séries temporais em Python

Concatenando dois 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
Manipulando dados de séries temporais em Python

Concatenando dois DataFrames

pd.concat([df1, df2], axis=1)
   df1  df2
0    1    4
1    2    5
2    3    6
  • axis=1: concatena na horizontal
Manipulando dados de séries temporais em Python

Plotar crescimento do PIB real interpolado

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

Crescimento do PIB real interpolado

Manipulando dados de séries temporais em Python

Combinar crescimento do PIB e desemprego

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

Combinar PIB e desemprego

Manipulando dados de séries temporais em Python

Vamos praticar!

Manipulando dados de séries temporais em Python

Preparing Video For Download...