はじめに
scipyのsavgol_filterを使って、ノイズの多いデータを滑らかにする方法について説明する。
コード&解説
モジュールのインポート
バージョン
データの作成
指数関数的減衰にノイズを加えたデータを作成する。
フィルタ適用範囲 (window_length)
window_lengthでフィルタを適用する範囲を設定する。window_length は奇数の整数である必要がある。
window_lengthを5, 15,25としてフィルターをかけたデータを作成した。
データを表示すると以下のようになる。window_lengthが大きいほどデータが滑らかになる。

近似式の次数 (polyorder)
多項式近似のための多項式の次数をpolyorderで指定する。ここでは、window_lengthを25として、polyorderを1,2,4とした。つまり、1次、2次、4次の多項式で近似を行うことになる。
結果を表示すると以下のようになる。
1次式近似ではフィルタデータは直線的になり、4次だとデータに追従した感じの結果となった。

境界近傍データの計算について (mode)
modeでデータの境界におけるフィルタの処理を設定する。
modeは‘mirror’, ‘constant’, ‘nearest’, ‘wrap’ または ‘interp'(default)といずれかにする。
mirrorは境界の値を逆順に繰り返して計算を行う。
constantは定数を適用する。定数の値はcvalで設定する。
nearestは境界の値を繰り返して計算を行う。
wrapは配列のもう一方の端にある値を用いて計算する。つまり、同じ配列を直列に結合して計算を行うことになる。
それぞれのmodeの結果を表示すると以下のようになる。

参考
savgol_filter — SciPy v1.15.1 Manual
コメント