Combinarea datelor de tip serie temporală cu machine learning

Machine Learning pentru Date de Tip Șir de Timp în Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Prezentarea datelor

  • Seturile de date utilizate în acest curs sunt disponibile gratuit online
  • Există numeroase seturi de date pe web; cele folosite provin de pe Kaggle
Machine Learning pentru Date de Tip Șir de Timp în Python

Datele acustice de bătăi cardiace

  • Numeroase înregistrări ale sunetelor cardiace de la diferiți pacienți
  • Unii aveau inimi sănătoase, alții prezentau anomalii
  • Datele constau în fișiere audio + etichete pentru fiecare fișier
  • Putem identifica bătăile cardiace „anormale"?
Machine Learning pentru Date de Tip Șir de Timp în Python

Încărcarea datelor 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 pentru Date de Tip Șir de Timp în Python

Citirea datelor 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

În acest caz, frecvența de eșantionare este 2205, adică 2205 de eșantioane pe secundă

Machine Learning pentru Date de Tip Șir de Timp în Python

Inferarea timpului din eșantioane

  • Dacă cunoaștem rata de eșantionare a unei serii temporale, putem determina marca de timp a fiecărui punct relativ la primul
  • Notă: se presupune că rata de eșantionare este fixă și că nu se pierde niciun punct de date
Machine Learning pentru Date de Tip Șir de Timp în Python

Crearea unui array de timp (I)

  • Creați un array de indici, câte unul pentru fiecare eșantion, și împărțiți la frecvența de eșantionare

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Machine Learning pentru Date de Tip Șir de Timp în Python

Crearea unui array de timp (II)

  • Găsiți marca de timp pentru al N-1-lea punct de date, apoi utilizați linspace() pentru interpolare de la zero până la acel moment

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Machine Learning pentru Date de Tip Șir de Timp în Python

Setul de date New York Stock Exchange

  • Acest set de date conține valorile acțiunilor unor companii pe o perioadă de 10 ani
  • Putem detecta tipare în datele istorice care să permită predicția valorilor viitoare?
Machine Learning pentru Date de Tip Șir de Timp în Python

Explorarea datelor

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 pentru Date de Tip Șir de Timp în Python

Serii temporale cu Pandas DataFrames

  • Putem examina tipul obiectului din fiecare coloană accesând atributul dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Machine Learning pentru Date de Tip Șir de Timp în Python

Conversia unei coloane în serie temporală

  • Pentru a trata o coloană dintr-un DataFrame ca serie temporală, utilizați funcția 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 pentru Date de Tip Șir de Timp în Python

Să exersăm!

Machine Learning pentru Date de Tip Șir de Timp în Python

Preparing Video For Download...