如何检测大熊猫的上升和下降趋势?

时间:2019-05-17 21:08:40

标签: python pandas numpy

对于使用以下代码生成的图,我想获得通过熊猫逻辑生成的信号。

当曲线比上一个局部最小值高3个点(或更多)时,输出信号应从-4变为-2。当曲线比上一个局部最大值低2点(或小于2个点)时,它应从-2更改为-4。

图1显示了以下代码生成的曲线。图2大致显示了输出信号的外观。

图1: Plot 1

图2: Plot 2

代码:

var testConnectie = function (){
   console.log("test")
}

window.onload = testConnectie;

$('#fresh').one('click', testConnectie);

2 个答案:

答案 0 :(得分:2)

IIUC:

s = pd.Series([0, 5, 0, -4, -1, 2, 4, 7, 2, 3, 4, 5, 6, -3, -2, -1, 0, 1, 2])

s.plot()
ax = s.diff().ge(0).mul(1).plot(drawstyle='steps', c='r', secondary_y=True)
ax.set_ylim(0, 8)

enter image description here

答案 1 :(得分:2)

我想你想要这个:

s = pd.Series(np.concatenate((a,b,c,d,e,f,g,)))

# is increasing
incr = s.diff().ge(0)

# shifted trend (local minima)
shifted = incr.ne(incr.shift())

# local max
local_max = shifted & (~incr)


# thresholding function
def thresh(x, threshold=3, step=2):
    ret = pd.Series([0]*len(x), index=x.index)
    t = x.min() + threshold
    ret.loc[x.gt(t)] = step
    return ret

signal = s.groupby(local_max.cumsum()).apply(thresh)
signal += s.min()

# draw
fig, ax = plt.subplots(figsize=(10,6))
s.plot(ax=ax)
signal.plot(drawstyle='steps', ax=ax)
plt.show()

输出:

enter image description here