Łączenie danych szeregów czasowych z uczeniem maszynowym

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Poznajemy nasze dane

  • Wszystkie zbiory danych używane w tym kursie są ogólnodostępne w sieci
  • Wykorzystywane zbiory danych pochodzą z platformy Kaggle
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Dane akustyczne bicia serca

  • Wiele nagrań dźwięków serca od różnych pacjentów
  • Część pacjentów miała zdrowe serca, inni – nieprawidłowości
  • Dane w postaci plików audio z etykietami
  • Czy można wykryć „nieprawidłowe" bicia serca?
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Wczytywanie danych dźwiękowych

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']
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Odczyt danych dźwiękowych

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

Częstotliwość próbkowania wynosi 2205, co oznacza 2205 próbek na sekundę

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Wnioskowanie czasu z próbek

  • Znając częstotliwość próbkowania szeregu czasowego, można ustalić znacznik czasu każdego punktu danych względem pierwszego punktu
  • Uwaga: zakłada to stałą częstotliwość próbkowania i brak utraty danych
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Tworzenie tablicy czasu (I)

  • Utwórz tablicę indeksów (po jednym dla każdej próbki) i podziel przez częstotliwość próbkowania

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Tworzenie tablicy czasu (II)

  • Znajdź znacznik czasu dla punktu N-1. Następnie użyj linspace(), aby interpolować od zera do tego czasu

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Zbiór danych NYSE

  • Zbiór danych zawiera wartości akcji spółek z 10 lat
  • Czy można wykryć wzorce w danych historycznych pozwalające przewidzieć przyszłe wartości spółek?
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Analiza danych

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
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Szeregi czasowe w Pandas DataFrames

  • Typ obiektu każdej kolumny można sprawdzić za pomocą atrybutu dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Konwersja kolumny na szereg czasowy

  • Aby kolumna DataFrame była traktowana jako szereg czasowy, użyj funkcji 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]
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Czas na ćwiczenia!

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Preparing Video For Download...