时间序列 | 您所在的位置:网站首页 › 数据变化趋势是什么意思 › 时间序列 |
https://machinelearningmastery.com/time-series-trends-in-python/ 趋势是时间序列水平的长期增加或减少 有趋势的时间序列是非平稳的。 可以模拟确定的趋势。建模之后,它可以从时间系列数据集中去除。这就是时间序列去趋势。 该数据集有明显的上升趋势 差分法去趋势时间序列去趋势最简单的方法就是差分。 具体而言,在等时间步长的基础上,计算前一观察点和观察点之差构造出新的序列。 value(t) = observation(t) - observation(t-1) from pandas import read_csv from pandas import datetime from matplotlib import pyplot def parser(x): return datetime.strptime('190'+x, '%Y-%m') series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser) X = series.values diff = list() for i in range(1, len(X)): value = X[i] - X[i - 1] diff.append(value) pyplot.plot(diff) pyplot.show()去趋势之后变成这样 趋势通常可视化为一条直线穿过。 线性趋势可以用线性模型总结,非线性趋势可以用多项式或其它曲线拟合方法概括 例如,一个线性模型适用于时间指标预测。数据集如下所示︰ X,y 1,obs1 2,obs2 3,obs3 4,obs4 5,obs5 这个模型的预测将形成一条直线,可以作为该数据集的趋势线。这些预测也可以从原始时间序列中减去,以提供数据集的去趋势版本。 value(t) = observation(t) - prediction(t) from pandas import read_csv from pandas import datetime from sklearn.linear_model import LinearRegression from matplotlib import pyplot import numpy def parser(x): return datetime.strptime('190'+x, '%Y-%m') series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser) # fit linear model X = [i for i in range(0, len(series))] X = numpy.reshape(X, (len(X), 1)) y = series.values model = LinearRegression() model.fit(X, y) # calculate trend trend = model.predict(X) # plot trend pyplot.plot(y) pyplot.plot(trend) pyplot.show() # detrend detrended = [y[i]-trend[i] for i in range(0, len(series))] # plot detrended pyplot.plot(detrended) pyplot.show()这里用了线性回归的model,当然也可以换成其他 在原始数据集(蓝色)上绘制趋势线 (绿色)
下一步,原始数据集减去这一趋势,然后绘制结果,结果为去趋势数据集。 进一步深入:http://www.ltrr.arizona.edu/webhome/dmeko/notes_7.pdf
|
CopyRight 2018-2019 实验室设备网 版权所有 |