Manipulação de Séries Temporais com Pandas

Seus primeiros passos para trabalhar com Séries Temporais em Ciência de Dados

Julia Pocciotti
Turing Talks
4 min readFeb 28, 2021

--

Olá, seja bem-vindo a mais um Turing Talks! Hoje iremos abordar os principais conceitos básicos envolvendo Séries Temporais e como manuseá-las utilizando uma das principais bibliotecas para Data Science. Vamos lá!

O que é uma série temporal?

De maneira resumida, uma série temporal pode ser definida como um conjunto de observações ordenadas no tempo, como, por exemplo, os valores mensais de temperatura registrados na cidade de São Paulo, o salário mensal de uma pessoa durante um ano, e claro, o preço de ações em um determinado período de tempo.

Exemplos de séries temporais

Datas e horários no Pandas

Conceitos básicos

Antes de qualquer coisa, vamos entender como que o Pandas representa datas e horários.

Nessa biblioteca, uma combinação de objetos nativos do Python são utilizadas, como o datetime e dateutil, além do numpy.datetime64. Com essas ferramentas, o Pandas nos fornece um tipo de objeto chamado Timestamp, que representa um único ponto no tempo.

Vamos ver um exemplo com uma única data:

Uma das maiores utilidades em usar Pandas para trabalhar com Séries Temporais é a facilidade em indexar datas. Com o Pandas, fazemos isso utilizando um objeto DatetimeIndex, que nada mais é do que um agrupamento de vários Timestamps. Com isso, podemos indexar datas em um panda Series ou em um DataFrame:

Como vimos, os objetos fundamentais para trabalhar com Séries Temporais no pandas são Timestamp e DatetimeIndex.

Além de trabalhar com essas classes diretamente, é muito comum utilizar a função pd.to_datetime()para manusear esse tipo de dados. Vamos ver isso em mais detalhes a seguir.

date_range e to_datetime

pd.date_range() é um método que retorna uma frequência fixa de DatetimeIndex. Ele pode ser muito útil quando queremos criar nossa própria série temporal, basta passarmos uma data de início e outra de término, e, se necessário, podemos especificar também a frequência na qual queremos esses dados. Vamos ver alguns exemplos:

Além dos exemplos que já vimos anteriormente, pd.to_datetime() pode ser usado para converter um DataFrame para uma série datetime:

Trabalhando com os dados

Importando os dados

Para exemplo de série temporal, iremos trabalhar aqui com os preços históricos das ações da Google. Temos várias formas diferentes para importar esses dados, mas para esse exemplo vamos utilizar o pandas-datareader:

Resampling, Shifting, Windowing

Resampling (Reamostragem)

Uma necessidade comum em séries temporais é reamostrar os dados em uma frequência maior ou menor. De maneira geral, existem duas formas principais de reamostragem:

  • Upsampling: Séries temporais são reamostradas de uma frequência baixa para uma frequência alta (ex: mensal para diária)
  • Downsampling: Séries temporais são reamostradas de uma frequência alta para uma frequência baixa (ex: semanal para mensal)

Essas duas técnicas podem ser utilizadas em situações nas quais os nossos dados não estão disponíveis na mesma frequência em que queremos as nossas predições. Além disso, a reamostragem pode ser utilizada como um instrumento para feature engineering, pois podemos alterar a frequência dos dados para prover insights em um problema de aprendizado supervisionado, por exemplo.

Com o Pandas, isso pode ser feito utilizando o método resample() ou asfreq(). A diferença principal entre esses dois é que o resample() acaba sendo utilizado como ferramenta de data aggregation , enquanto asfreq() é fundamentalmente utilizado para data selection.

Vamos pegar os preços de fechamento do Google e comparar o retorno dos dois métodos com a reamostragem dos dados no final do ano:

Podemos ver a diferença entre os dois com esse gráfico. Em cada ponto, resample reporta a média do ano anterior, enquanto o asfreq reporta o valor no final do ano.

No código acima usamos a string 'BA' como parâmetro dos dois métodos de reamostragem. Além desse, o Pandas oferece uma série de abreviações para diferentes tipos de frequências (ou offsets), você pode conferir todos na documentação da biblioteca clicando aqui.

Shifting

Outra operação comum em séries temporais é mudar os dados no tempo. Pandas possui dois métodos para isso também: shift() e tshift(). A diferença principal é que o tshift altera apenas o index, enquando o shift faz isso para os dados.

Windowing

Usamos o método rolling() de objetos do tipo Series e DataFrames, que retornam uma view similar a que usamos em um tipo de operação groupby.

Vamos utilizar como exemplo uma rolling view com média e desvio padrão centrada nos preços das ações do Google:

Conclusão

Nesse texto introduzimos os principais conceitos para trabalhar com Séries Temporais utilizando Pandas. Vimos como representar datas e horários e como manipular esses dados utilizando alguns dos principais métodos para Séries Temporais da biblioteca.

Caso você queira se aventurar mais utilizando Pandas em Séries Temporais, você pode acessar a documentação da biblioteca aqui.

Não deixe de acompanhar o Grupo Turing no Facebook, Linkedin e no Instagram! Além disso, também temos uma comunidade no Discord agora! Sinta-se livre para mandar alguma dúvida ou comentário por lá se desejar.

Referências

--

--