Combinando dados de séries temporais com machine learning

Machine Learning para dados de séries temporais em Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Conhecendo os dados

  • Os conjuntos de dados deste curso são todos gratuitos e disponíveis online
  • Há muitos conjuntos de dados para baixar na web; os que usaremos vêm do Kaggle
Machine Learning para dados de séries temporais em Python

Dados acústicos de batimentos cardíacos

  • Muitas gravações de sons cardíacos de pacientes diferentes
  • Alguns tinham corações funcionando normalmente; outros, anormalidades
  • Dados no formato de arquivos de áudio + rótulos por arquivo
  • Será que conseguimos achar as batidas "anormais"?
Machine Learning para dados de séries temporais em Python

Carregando dados de áudio

from glob import glob
files = glob('data/heartbeat-sounds/files/*.wav')

print(files)
['data/heartbeat-sounds/proc/files/murmur__201101051104.wav',
 ...
 'data/heartbeat-sounds/proc/files/murmur__201101051114.wav']
Machine Learning para dados de séries temporais em Python

Lendo dados de áudio

import librosa as lr
# `load` accepts a path to an audio file
audio, sfreq = lr.load('data/heartbeat-sounds/proc/files/murmur__201101051104.wav')

print(sfreq)
2205

Neste caso, a frequência de amostragem é 2205, ou seja, há 2205 amostras por segundo

Machine Learning para dados de séries temporais em Python

Inferindo tempo a partir das amostras

  • Se conhecemos a taxa de amostragem de uma série temporal, sabemos o timestamp de cada ponto de dados em relação ao primeiro
  • Observação: isso supõe taxa fixa de amostragem e nenhum ponto perdido
Machine Learning para dados de séries temporais em Python

Criando um array de tempo (I)

  • Crie um array de índices, um por amostra, e divida pela frequência de amostragem

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Machine Learning para dados de séries temporais em Python

Criando um array de tempo (II)

  • Encontre o timestamp do ponto de dados N-1. Depois use linspace() para interpolar de zero até esse tempo

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Machine Learning para dados de séries temporais em Python

Conjunto de dados da New York Stock Exchange

  • Este conjunto de dados traz valores de ações de empresas por 10 anos
  • Dá para detectar padrões históricos que ajudem a prever valores futuros?
Machine Learning para dados de séries temporais em Python

Explorando os dados

data = pd.read_csv('path/to/data.csv')

data.columns
Index(['date', 'symbol', 'close', 'volume'], dtype='object')
data.head()
         date symbol       close       volume
0  2010-01-04   AAPL  214.009998  123432400.0
1  2010-01-04    ABT   54.459951   10829000.0
2  2010-01-04    AIG   29.889999    7750900.0
3  2010-01-04   AMAT   14.300000   18615100.0
4  2010-01-04   ARNC   16.650013   11512100.0
Machine Learning para dados de séries temporais em Python

Séries temporais com DataFrames do pandas

  • Podemos investigar o tipo de cada coluna acessando o atributo dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Machine Learning para dados de séries temporais em Python

Convertendo uma coluna em série temporal

  • Para garantir que uma coluna do DataFrame seja tratada como série temporal, use a função to_datetime()
df['date'] = pd.to_datetime(df['date'])

df['date']
0   2017-01-01
1   2017-01-02
2   2017-01-03
Name: date, dtype: datetime64[ns]
Machine Learning para dados de séries temporais em Python

Vamos praticar!

Machine Learning para dados de séries temporais em Python

Preparing Video For Download...