我有几周的销售量数据
xs[weeks] = [1,2,3,4]
ys['Units Sold'] = [1043,6582,5452,7571]
从给定的系列中,我们可以看到,虽然从xs2到xs3有下降的趋势,但总体趋势是增加的。如何在小的时间序列数据集中检测趋势。
找到直线的坡度是最好的方法吗?在python中如何计算直线的倾斜角?
发布于 2019-04-12 18:36:32
我已经经历了你今天面临的同样的问题。为了检测趋势,我找不到一个特定的函数来处理这种情况。
我发现了一个非常有用的函数,即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(array_of_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
根据这一输出,结果远远大于零,因此它表明您的数据正在稳步增加。
发布于 2019-04-12 18:40:09
一种方法可以是使用移动平均值(许多变化,你可能会看到EMA或SMA抛来抛去),它查看当前的时间步长和n个先前的步数,对这些进行平均,并将其用作一种“平滑”值。这将给你一个更好的指示数据实际移动的方式,因为一个小的减少不会对线的梯度产生显著的影响。
根据您的问题所在的领域,可能还值得查看金融部门中使用的一些统计数据,例如DMI (方向性移动指标)或MACD。
希望这能有所帮助
https://stackoverflow.com/questions/55649356
复制相似问题