用機器學習結合時間序列資料

Python 的時間序列資料機器學習

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

認識我們的資料

  • 本課會用的資料集都可在網路上免費取得。
  • 網路上有很多可下載的資料集;我們將使用來自 Kaggle 的資料。
Python 的時間序列資料機器學習

心跳聲學資料

  • 來自不同病患的多段心音錄音。
  • 有些心臟功能正常,另一些有異常。
  • 資料為音訊檔,加上每個檔案的標籤。
  • 我們能找出「異常」心跳嗎?
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']
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 個樣本。

Python 的時間序列資料機器學習

由樣本推回時間

  • 若知道時間序列的取樣率,就能得知每個資料點相對於第一個資料點的時間戳。
  • 注意:這假設取樣率固定且沒有遺失資料點。
Python 的時間序列資料機器學習

建立時間陣列(I)

  • 建立與樣本數相同的索引陣列,並除以取樣頻率。

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Python 的時間序列資料機器學習

建立時間陣列(II)

  • 先找第 N-1 個資料點的時間戳,然後用 linspace() 從 0 插值到該時間。

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Python 的時間序列資料機器學習

紐約證券交易所資料集

  • 這個資料集包含公司 10 年的股價。
  • 我們能從歷史紀錄找出可用來預測未來公司價值的模式嗎?
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
Python 的時間序列資料機器學習

以 Pandas DataFrame 處理時間序列

  • 可透過 dtypes 屬性查看各欄位的物件型別。
df['date'].dtypes
0    object
1    object
2    object
dtype: object
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]
Python 的時間序列資料機器學習

一起來練習吧!

Python 的時間序列資料機器學習

Preparing Video For Download...