Combinare dati di serie temporali con il Machine Learning

Machine Learning per dati di serie temporali in Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Conosciamo i dati

  • I dataset che useremo in questo corso sono tutti disponibili gratis online
  • Sul web ci sono molti dataset scaricabili; quelli che useremo arrivano da Kaggle
Machine Learning per dati di serie temporali in Python

Heartbeat Acoustic Data

  • Molte registrazioni di suoni cardiaci di pazienti diversi
  • Alcuni con cuore normale, altri con anomalie
  • Dati sotto forma di file audio + etichette per ciascun file
  • Riusciamo a trovare i battiti "anomali"?
Machine Learning per dati di serie temporali in Python

Caricare dati audio

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 per dati di serie temporali in Python

Leggere dati audio

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

In questo caso, la frequenza di campionamento è 2205, cioè 2205 campioni al secondo

Machine Learning per dati di serie temporali in Python

Deducere il tempo dai campioni

  • Se conosci la frequenza di campionamento di una serie temporale, conosci il timestamp di ogni punto dati rispetto al primo
  • Nota: questo presuppone frequenza fissa e nessuna perdita di punti
Machine Learning per dati di serie temporali in Python

Creare un array dei tempi (I)

  • Crea un array di indici, uno per campione, e dividilo per la frequenza di campionamento

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Machine Learning per dati di serie temporali in Python

Creare un array dei tempi (II)

  • Trova il timestamp del punto dati N-1-esimo. Poi usa linspace() per interpolare da zero a quel tempo

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Machine Learning per dati di serie temporali in Python

Il dataset del New York Stock Exchange

  • Questo dataset contiene i valori azionari di aziende per 10 anni
  • Riusciamo a rilevare pattern storici che ci permettano di prevedere i valori futuri?
Machine Learning per dati di serie temporali in Python

Esplorare i dati

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 per dati di serie temporali in Python

Serie temporali con Pandas DataFrame

  • Possiamo verificare il tipo di ciascuna colonna accedendo all'attributo dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Machine Learning per dati di serie temporali in Python

Convertire una colonna in serie temporale

  • Per fare in modo che una colonna di un DataFrame sia trattata come serie temporale, usa la funzione 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 per dati di serie temporali in Python

Esercitiamoci!

Machine Learning per dati di serie temporali in Python

Preparing Video For Download...