Att kombinera tidsseriedata med maskininlärning

Maskininlärning för tidsseriedata i Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Lär känna våra data

  • Datamängderna vi använder i den här kursen är fritt tillgängliga online
  • Det finns många datamängder att ladda ner på webben – de vi använder kommer från Kaggle
Maskininlärning för tidsseriedata i Python

Hjärtljudsdata

  • Många inspelningar av hjärtljud från olika patienter
  • Vissa hade normalt fungerande hjärtan, andra hade avvikelser
  • Data består av ljudfiler med tillhörande etiketter
  • Kan vi hitta de "onormala" hjärtslagen?
Maskininlärning för tidsseriedata i Python

Läsa in ljuddata

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']
Maskininlärning för tidsseriedata i Python

Läsa in ljuddata

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

Här är samplingsfrekvensen 2205, vilket innebär 2205 sampel per sekund

Maskininlärning för tidsseriedata i Python

Härled tid från sampel

  • Om vi känner till samplingsfrekvensen kan vi beräkna tidsstämpeln för varje datapunkt relativt den första datapunkten
  • Obs: detta förutsätter att samplingsfrekvensen är konstant och att inga datapunkter saknas
Maskininlärning för tidsseriedata i Python

Skapa en tidsarray (I)

  • Skapa en array med index, ett per sampel, och dividera med samplingsfrekvensen

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Maskininlärning för tidsseriedata i Python

Skapa en tidsarray (II)

  • Hitta tidsstämpeln för den N-1:e datapunkten. Använd sedan linspace() för att interpolera från noll till den tidpunkten

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Maskininlärning för tidsseriedata i Python

New York Stock Exchange-datamängden

  • Den här datamängden innehåller aktiekurser för företag under 10 år
  • Kan vi hitta mönster i historiska data som gör det möjligt att förutsäga framtida aktievärden?
Maskininlärning för tidsseriedata i Python

Utforska data

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
Maskininlärning för tidsseriedata i Python

Tidsserier med Pandas DataFrames

  • Vi kan undersöka objekttypen för varje kolumn via attributet dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Maskininlärning för tidsseriedata i Python

Konvertera en kolumn till en tidsserie

  • För att en kolumn i en DataFrame ska behandlas som en tidsserie använder du funktionen 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]
Maskininlärning för tidsseriedata i Python

Nu kör vi en övning!

Maskininlärning för tidsseriedata i Python

Preparing Video For Download...