我有几周的数据,给出了售出的单位 xs [weeks] = [1,2,3,4] ys ['已售出的商品'] = [1043,6582,5452,7571]
从给定的序列中,我们可以看到,尽管从xs [2]到xs [3]有所下降,但总体趋势是不断增加的。如何在小型时间序列数据集中检测趋势。找到直线的斜率是最好的方法吗?以及如何在python中计算直线的倾斜角度?
答案 0 :(得分:3)
我经历了你今天面临的同样问题。为了检测趋势,我找不到处理这种情况的特定功能。
我发现了一个非常有用的功能,即 numpy.polyfit()
numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
[Check this Official Documentation]
您可以使用这样的功能
def trenddetector(list_of_index,array_of_data, order=1):
result = np.polyfit(list_of_index, list(data), order)
slope = result[-2]
return float(slope)
此函数返回一个浮点值,该值指示数据的趋势,并且您也可以通过类似这样的方式对其进行布局
例如,
如果斜率是+ ve值->上升趋势
如果斜率是-ve值->下降趋势
如果斜率是零值->没有趋势
使用此功能,并根据您的问题找出正确的阈值并将其作为条件。
您的解决方案的示例代码
import numpy as np
def trendline(index,data, order=1):
coeffs = np.polyfit(index, list(data), order)
slope = coeffs[-2]
return float(slope)
index=[1,2,3,4]
List=[1043,6582,5452,7571]
resultent=trendline(index,List)
print(resultent)
结果
1845.3999999999999
根据此输出,结果远大于零,因此它表明您的数据正在稳定增长。
答案 1 :(得分:0)
一种方法可能是使用移动平均线(很多变化,您可能会看到EMA或SMA抛出),它会查看当前时间步长和n个先前的步长,将其平均后将其用作某种“平滑”的价值。这将为您更好地指示数据的实际移动方式,因为小幅下降不会对直线的坡度产生重大影响。
根据问题所在的领域,可能还需要检查一下金融部门使用的一些统计信息,例如DMI(方向变动指标)或MACD。
希望这会有所帮助