Python でピークを見つける

Shivam Arora 2023年1月30日
  1. Python で scipy.signal.find_peaks() 関数を使用してピークを検出する
  2. Python で scipy.signal.argrelextrema() 関数を使用してピークを検出する
  3. Python で detecta.detect_peaks() 関数を使用してピークを検出する
Python でピークを見つける

ピークは、ほとんどのローカル値よりも高い値です。単一のグローバル最大ピークまたは複数のピークが存在する可能性があります。グラフのピークは表示および定義されている必要があり、データノイズに隠れてはなりません。

この記事では、Python のさまざまな値のセットのピークを見つけます。

Python で scipy.signal.find_peaks() 関数を使用してピークを検出する

scipy.signal.find_peaks() は、指定されたデータのピークを検出できます。この関数 widththresholddistance、および prominence に関連付けられているパラメーターはほとんどありません。ピークが見つかった値のインデックスを返します。

例えば、

from scipy.signal import find_peaks

lst = [
    5,
    3,
    2,
    19,
    17,
    8,
    13,
    5,
    0,
    6,
    1,
    -5,
    -10,
    -3,
    6,
    9,
    8,
    14,
    8,
    11,
    3,
    2,
    22,
    8,
    2,
    1,
]
peaks, _ = find_peaks(lst, height=0)
print(peaks)

出力:

[ 3  6  9 15 17 19 22]

Python で scipy.signal.argrelextrema() 関数を使用してピークを検出する

この関数は、find_peaks() 関数に似ています。さらに、order パラメーターが含まれています。このパラメーターは、最小化フィルターとして機能する距離パラメーターです。ピークのインデックスを計算するための np.greater メソッドとして comparator 引数を提供する必要があります。

例えば、

import numpy as np
from scipy.signal import argrelextrema

lst = [
    5,
    3,
    2,
    19,
    17,
    8,
    13,
    5,
    0,
    6,
    1,
    -5,
    -10,
    -3,
    6,
    9,
    8,
    14,
    8,
    11,
    3,
    2,
    22,
    8,
    2,
    1,
]
peaks = argrelextrema(np.array(lst), np.greater)
print(peaks)

出力:

(array([ 3,  6,  9, 15, 17, 19, 22], dtype=int64),)

Python で detecta.detect_peaks() 関数を使用してピークを検出する

Marcos Duarte によって作成された資料に基づくアルゴリズムが、detect_peaks() メソッドに実装され、特定の値のセットのピークを見つけます。この機能では、チューニングとフィルタリングのサポートは他の機能ほど完全ではありません。

例えば、

from detecta import detect_peaks

lst = [
    5,
    3,
    2,
    19,
    17,
    8,
    13,
    5,
    0,
    6,
    1,
    -5,
    -10,
    -3,
    6,
    9,
    8,
    14,
    8,
    11,
    3,
    2,
    22,
    8,
    2,
    1,
]
index = detect_peaks(lst)
print(index)

出力:

[ 3  6  9 15 17 19 22]