Pythonはデータ分析に広く用いられています。その中でも、ノイズの多いデータを滑らかにするための一つの手法として、Savitzky-Golay(SG)フィルタがあります。
Savitzky-Golayフィルタとは
Savitzky-Golayフィルタは、データの平滑化と微分を同時に行うことができる手法です。このフィルタは、データのノイズを抑制し、データの本質的なパターンを見えやすくするために使用されます。
Pythonでの実装
PythonのSciPyライブラリには、Savitzky-Golayフィルタを適用するための関数scipy.signal.savgol_filter
が含まれています。この関数を使用すると、データの平滑化と微分が簡単に行えます。
以下に、Savitzky-Golayフィルタを用いたデータの平滑化と微分のPythonコードを示します。
import numpy as np
from scipy import signal
def SG(x, y, N, m, d=0):
dx = x[1] - x[0]
X = (np.c_[-N:N+1] * dx) ** np.r_[:m+1]
C = np.linalg.pinv(X)
x_ = x[N:-N]
y_ = np.convolve(y[::-1], C[d], 'valid')[::-1]
return x_, y_
この関数SG
は、入力値y
に対し、y[i]
の前後N
個のデータ点y[i-N],...,y[i],...y[i+N]
をm
次多項式で近似した際の(d/dx)^d y
の1/d!
倍を求めます。
まとめ
PythonとSavitzky-Golayフィルタを用いることで、ノイズの多いデータを滑らかにし、微分を行うことが可能です。これにより、データ分析の精度を向上させることができます。