データ分析において、データの中から特定の傾向や特徴を見つけるために「ピーク検出」は非常に重要です。
Pythonにはこの作業を簡単にするための強力なライブラリがあります。
その一つがSciPyです。
この記事では、SciPyのfind_peaks関数を使って、データからピークを検出する方法について詳しく解説します。
find_peaksとは?
SciPyは科学技術計算をサポートするPythonのライブラリです。
その中でも、find_peaksは時系列データから山(ピーク)を見つけるための便利な関数です。
この関数を使うことで、手動でピークを確認する手間が省けます。
find_peaksの導入方法
まず、SciPyのライブラリをインストールする必要があります。
以下のコマンドを実行してインストールしてください。
pip install scipy
find_peaksの基本的な使い方
ここでは、numpyを使ってサンプルデータを生成し、find_peaksを使ってそのデータからピークを検出する方法を紹介します。
サンプルコード
以下のコードを使ってピーク検出を試してみましょう。
import numpy as np
from scipy.signal import find_peaks
import matplotlib.pyplot as plt
# サンプルデータの生成
x = np.linspace(0, 6 * np.pi, 1000)
y = np.sin(x)
# ピークの検出
peaks, _ = find_peaks(y, height=0)
# データのプロット
plt.plot(x, y)
plt.plot(x[peaks], y[peaks], "x")
plt.show()
上記のコードでは、まずnumpyを使ってサンプルデータを生成しています。
このデータは単純なサイン波です。
その後、find_peaksを使ってデータからピークを検出し、検出されたピークの位置に”×”印をプロットしています。
find_peaksのオプション
find_peaks関数には多くのオプションがあり、様々な条件を設定することができます。
例えば、以下のようなオプションがあります。
- height: ピークの最低高さを指定します。
- distance: ピーク同士の最小間隔を指定します。
- prominence: ピークの控えめ度を指定します。
- width: ピークの最小幅を指定します。
高度な使い方の例
以下のコードでは、peak_prominencesとwidthを使ってより精度の高いピーク検出を行います。
import numpy as np
from scipy.signal import find_peaks, peak_prominences
# サンプルデータの生成
x = np.linspace(0, 6 * np.pi, 1000)
y = np.sin(x) + 0.1 * np.random.normal(size=x.size)
# ピークの検出
peaks, _ = find_peaks(y, height=0.5, distance=20)
# プロミネンスの計算
prominences = peak_prominences(y, peaks)[0]
# ピークのプロット
plt.plot(x, y)
plt.plot(x[peaks], y[peaks], "x")
plt.show()
print("Detected peaks:", peaks)
print("Prominences:", prominences)
このコードでは、ノイズが含まれたサイン波データを用意しました。
find_peaks関数にheightとdistanceのオプションを指定し、ピークの検出精度を向上させています。
また、peak_prominencesを使って各ピークのプロミネンス(目立つ度合い)を計算することで、検出されたピークの特性を詳しく分析できます。
まとめ
SciPyのfind_peaks関数を使えば、Pythonで簡単にデータからピークを検出することができます。
この関数を活用することで、大量のデータから重要な情報を迅速に抽出することができます。
必要に応じて高度なオプションを使いこなすことで、さらに精度の高い検出が可能となります。
ぜひ、あなたのプロジェクトでも試してみてください。
以上、Pythonでピーク検出についてでした。
最後までお読みいただき、ありがとうございました。