Timeseries-gegevens combineren met Machine Learning

Machine Learning voor tijdreeksgegevens in Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Maak kennis met onze data

  • De gegevenssets in deze course zijn vrij beschikbaar online
  • Er zijn veel gegevenssets te downloaden; wij gebruiken die van Kaggle
Machine Learning voor tijdreeksgegevens in Python

De Heartbeat Acoustic Data

  • Veel opnames van hartgeluiden van verschillende patiënten
  • Sommigen hadden een normaal werkend hart, anderen afwijkingen
  • Data komt als audiobestanden + labels per bestand
  • Kunnen we de "abnormale" hartslagen vinden?
Machine Learning voor tijdreeksgegevens in Python

Auditieve data laden

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 voor tijdreeksgegevens in Python

Auditieve data inlezen

import librosa as lr
# `load` accepteert een pad naar een audiobestand
audio, sfreq = lr.load('data/heartbeat-sounds/proc/files/murmur__201101051104.wav')

print(sfreq)
2205

In dit geval is de samplefrequentie 2205, dus 2205 samples per seconde

Machine Learning voor tijdreeksgegevens in Python

Tijd afleiden uit samples

  • Als we de samplerate van een timeseries kennen, kennen we de tijdstempel van elk datapunt, relatief aan het eerste datapunt
  • Let op: dit veronderstelt een vaste samplerate en geen verloren datapunten
Machine Learning voor tijdreeksgegevens in Python

Een tijdarray maken (I)

  • Maak een array met indices, één per sample, en deel door de samplefrequentie

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Machine Learning voor tijdreeksgegevens in Python

Een tijdarray maken (II)

  • Zoek de tijdstempel van het N-1e datapunt. Gebruik daarna linspace() om van nul tot die tijd te interpoleren

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Machine Learning voor tijdreeksgegevens in Python

De New York Stock Exchange-gegevensset

  • Deze gegevensset bevat aandelenkoersen van bedrijven over 10 jaar
  • Kunnen we patronen in historische data vinden om toekomstige koersen te voorspellen?
Machine Learning voor tijdreeksgegevens in Python

De data bekijken

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 voor tijdreeksgegevens in Python

Timeseries met pandas DataFrames

  • We kunnen het objecttype van elke kolom bekijken via het attribuut dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Machine Learning voor tijdreeksgegevens in Python

Een kolom omzetten naar een tijdreeks

  • Zorg dat een kolom in een DataFrame als tijdreeks wordt behandeld met 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 voor tijdreeksgegevens in Python

Laten we oefenen!

Machine Learning voor tijdreeksgegevens in Python

Preparing Video For Download...