時系列データと機械学習の組み合わせ

Pythonで学ぶMachine Learningによる時系列データ解析

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

データの理解

  • このコースで使用するデータセットはすべてオンラインで無料公開されています
  • 利用するデータセットはKaggleから入手したものです
Pythonで学ぶMachine Learningによる時系列データ解析

心音音響データ

  • さまざまな患者の心音の多数の録音データ
  • 正常な心臓と異常のある心臓が含まれます
  • データは音声ファイルとラベルで構成されています
  • 「異常な」心拍を検出できるでしょうか?
Pythonで学ぶMachine Learningによる時系列データ解析

音声データの読み込み

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で学ぶMachine Learningによる時系列データ解析

音声データの読み取り

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 であり、1秒あたり 2205 サンプルが存在することを意味します

Pythonで学ぶMachine Learningによる時系列データ解析

サンプルから時刻を推定する

  • 時系列のサンプリングレートがわかれば、最初のデータポイントを基準とした各データポイントのタイムスタンプを求めることができます
  • 注:サンプリングレートが一定でデータの欠損がないことが前提です
Pythonで学ぶMachine Learningによる時系列データ解析

時間配列の作成(I)

  • サンプルごとのインデックス配列を作成し、サンプリング周波数で割ります

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Pythonで学ぶMachine Learningによる時系列データ解析

時間配列の作成(II)

  • N-1番目のデータポイントのタイムスタンプを求め、linspace() で0からその時刻まで補間します

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Pythonで学ぶMachine Learningによる時系列データ解析

ニューヨーク証券取引所データセット

  • 10年分の企業株価データセットです
  • 過去の記録からパターンを検出し、将来の株価を予測できるでしょうか?
Pythonで学ぶMachine Learningによる時系列データ解析

データの確認

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で学ぶMachine Learningによる時系列データ解析

Pandas DataFrameの時系列データ

  • dtypes 属性にアクセスすることで、各列のオブジェクト型を確認できます
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Pythonで学ぶMachine Learningによる時系列データ解析

列を時系列に変換する

  • 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で学ぶMachine Learningによる時系列データ解析

練習しましょう!

Pythonで学ぶMachine Learningによる時系列データ解析

Preparing Video For Download...