数据:http://www.sharecsv.com/s/3a7dd199f2ecf08bcfce0de26376fe9a/data.csv
我正在尝试编写峰值检测算法。我一直在尝试使用此答案Intelligent Peak Detection Method中的示例。我不确定如何更改他们的示例数据。
代码:
data = data.iloc[:, 0].tolist()
dy_lim = 0.001
di_lim = 5
targets = []
in_lock = False
i_l, d_l = 0, data[0]
for i, d in enumerate(data[1:]):
if abs(d_l - d) > dy_lim:
if in_lock:
in_lock = False
if i - i_l > di_lim:
# here we check whether the start of the period was a peak
if abs(d_l - data[i_l]) > dy_lim:
# assure minimal distance if previous target exists
if targets:
if i_l - targets[-1] > di_lim:
targets.append(i_l)
else:
targets.append(i_l)
# and here whether the end is a peak
if abs(d - data[i]) > dy_lim:
targets.append(i + 1)
i_l, d_l = i, d
else:
in_lock = True
plt.plot(range(len(data)), data)
plt.scatter(targets, [data[t] for t in targets], c='red')
plt.show()
此数据生成此图。红色圆圈是代码生成的峰值。我试图找到与该线总体趋势不同的最剧烈的峰值。这些最剧烈的峰值的例子是黑圈。
我还找到了这个示例Peak detection algorithm in Python。我喜欢它们如何使用阈值线,但是对于我的示例,我不确定如何做到这一点。我无法定义明确的上限和下限阈值指标,因为我有成千上万张图表。每个图都有对应于该图的峰。
例如:
数据:http://www.sharecsv.com/s/ca69f125f2ad41a9a70b8d959bfce02b/data.csv
此数据将生成图形:
任何提示或指导将不胜感激!非常感谢。