[SciPy] 19. scipy.interpolateのinterp1dを使用した時系列データの補間

fitbit

はじめに

本記事では、SciPyのinterpolate.interp1dを使用して時系列データを効果的に補間する方法を解説します。不規則な間隔で取得されたデータポイントから、均等な間隔のデータを生成する技術について、具体的なコード例と共に詳しく説明していきます。データ分析や科学計算における時系列データの前処理として役立つ内容です。

コード

解説

モジュールのインポート

バージョン

データの読み込み

本記事では、Fitbit APIで取得した睡眠データを使用します。Fitbit APIからのデータ取得方法については、下記の記事で解説したデータをpd.read_html()を使って読み込みます。

[fitbit] 2. PythonでFitbit APIを使ってデータ取得 その2 fitbit-pythonによる睡眠データの取得とmatplotlibによる表示
fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。日々の健康状態を把握するのにとても役立っています。ここでは、アプリの登録からtokenの取得までを解説したその1の続きとして、Fitbit APIを使って睡眠データを取得してmatplotlibで表示するところまで解説します。

時間とレベルの抽出

データフレームからデータを抽出します。時間データはto_datetime関数を使用してdatetime64形式に変換しておきます。

時間とレベルの関係を表示すると下記のようになります。各レベルはsecondsの時間だけ継続するため、空いている時間帯を同一データで補間する必要があります。

補間用関数をinterp1dで作成

interp1dはdatetime64形式のデータを受け付けないため、astype(float)で型変換する必要があります。interp1dでは、kind=”previous”パラメータを指定することで、前のデータ値を使用して補間が行われます。

補間データの作成

np.arangeとnp.timedelta64(1,’m’)を使用して1分間隔のデータを作成します。その後、f(new_t.astype(float))を実行することで、補間されたレベルデータを取得できます。

補間データの表示

横軸の時間データはConciseDateFormatterを使用して、簡潔で見やすく表示しています。ConciseDateFormatterについては下記記事で詳しく解説しています。

[matplotlib] 54. ConciseDateFormatterで時系列グラフの軸ラベルをシンプルにする
matplotlib.datesのConciseDateFormatterで時系列グラフの目盛りラベルを簡潔に表示する方法について説明する。
コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

interp1d — SciPy v1.16.1 Manual
[python] 時系列データの補間 - Qiita
目的 pythonで時系列データの補間処理をしたい。下の図はサンプルプログラムの実行結果。1時間間隔のデータを30分間隔に補間している。 サンプルコード numpyとscipyのそれぞれの補間関数を使ったサンプルコード。 interp_sa...

コメント