我有一个一维时间序列数据或线。我想知道它的切片趋势是什么。图片:
有些板块是相等的,有些是上升趋势,有些是下降趋势。图中绿色标记表示上升趋势,红色标记表示下降趋势
我想要一个列表或数组来显示每个索引在哪个切片中。 例如,我想要这样的东西: [equal,equal,…,up,up,…,down,down] 每个项目只是一个显示其切片方向的标记。例如,如果列表中的第二项是“向上”,这意味着实例被放置在向上趋势的切片中
我试过很多方法,其中最好的是scipy的ArgreExtrema
我使用arglextrema查找局部最大值和最小值,然后按索引中的出现顺序进行比较
from scipy.signal import argrelextrema
d = data['tenkan_sen'].fillna(1)
h1 = d.append(pd.Series([5, 4, 3, 2, 1]), ignore_index=True)
g = argrelextrema(h1.values, np.greater)[0]
l = argrelextrema(h1.values, np.less)[0]
e = argrelextrema(h1.values, np.equal)[0]
extermas = dict()
extermas[0] = 'start'
for item in g:
extermas[item] = 'greater'
for item in l:
extermas[item] = 'less'
extermas = dict(sorted(extermas.items()))
idx_extermas = list(extermas.keys())
status = []
for item in range(len(idx_extermas)-1):
if extermas[idx_extermas[item+1]] == 'less':
stat = 'down'
if extermas[idx_extermas[item+1]] == 'greater':
stat = 'up'
for _ in range(idx_extermas[item], idx_extermas[item+1]):
#print(_)
status.append(stat)
#print(len(status))
for item in e:
#print(item)
status[item] = 'equal'
此方法无法找到线的结束切片的方向。为了解决这个问题,我已经在行的末尾手动添加了五个点,但它不起作用。 我找了很多东西,但找不到合适的解决办法
首先,如果要平滑数据,请运行
这将消除噪声,但也会模糊数据,并在这样做时稍微缩小数据。 然后跑
这将为您提供一个数组,当数据向上倾斜至少间隙时为1,当向下倾斜时为-1。(通常情况下,在大多数数据集中很少出现完全恒定的情况,您只希望拾取陡坡。) 调整间距,直到只选择所需的陡度
相关问题 更多 >
编程相关推荐