Поєднання часових рядів із машинним навчанням

Machine Learning для часових рядів у Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Знайомимося з даними

  • Усі набори даних у цьому курсі вільно доступні онлайн
  • Є багато даних для завантаження в мережі; ми використаємо набори з Kaggle
Machine Learning для часових рядів у Python

Акустичні дані серцебиття

  • Багато записів серцевих звуків від різних пацієнтів
  • У частини серце працювало нормально, в інших — були відхилення
  • Дані — це аудіофайли плюс мітки для кожного файлу
  • Чи зможемо знайти «абнормальні» серцеві удари?
Machine Learning для часових рядів у Python

Завантаження аудіоданих

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 для часових рядів у Python

Зчитування аудіоданих

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

У цьому випадку частота дискретизації — 2205, тобто 2205 відліків за секунду

Machine Learning для часових рядів у Python

Виведення часу з відліків

  • Якщо відома частота дискретизації часового ряду, то можна визначити мітку часу кожної точки даних — відносно першої точки
  • Зауважте: це припускає сталу частоту дискретизації і відсутність втрат точок
Machine Learning для часових рядів у Python

Створення масиву часу (I)

  • Створіть масив індексів по одному на кожен відлік і поділіть на частоту дискретизації

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Machine Learning для часових рядів у Python

Створення масиву часу (II)

  • Знайдіть мітку часу для N-1-ї точки. Потім використайте linspace() для інтерполяції від нуля до цього часу

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Machine Learning для часових рядів у Python

Набір даних Нью-Йоркської фондової біржі

  • Цей набір містить котирування акцій компаній за 10 років
  • Чи можемо знайти закономірності в історичних даних, щоб прогнозувати майбутню вартість компаній?
Machine Learning для часових рядів у Python

Ознайомлення з даними

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 для часових рядів у Python

Часові ряди в датафреймах Pandas

  • Тип об'єкта кожного стовпця можна перевірити через атрибут dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Machine Learning для часових рядів у Python

Перетворення стовпця на часовий ряд

  • Щоб стовпець у DataFrame трактувався як часовий ряд, скористайтеся функцією 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 для часових рядів у Python

Давайте потренуємось!

Machine Learning для часових рядів у Python

Preparing Video For Download...