小编dav*_*idr的帖子

使用statsmodels进行预测

我有一个包含5年时间序列的.csv文件,每小时分辨率(商品价格).根据历史数据,我想创建第六年的价格预测.

我在www上阅读了几篇关于这些类型的程序的文章,我基本上将我的代码基于那里发布的代码,因为我对Python(尤其是statsmodels)和统计数据的了解最多.

对于那些感兴趣的人来说,这些是链接:

http://www.seanabu.com/2016/03/22/time-series-seasonal-ARIMA-model-in-python/

http://www.johnwittenauer.net/a-simple-time-series-analysis-of-the-sp-500-index/

首先,这是.csv文件的示例.在这种情况下,数据以月分辨率显示,它不是真实数据,只是随机选择数字来举例说明(在这种情况下,我希望一年足以开发第二年的预测;如果没有,完整的csv文件可用):

              Price
2011-01-31    32.21
2011-02-28    28.32
2011-03-31    27.12
2011-04-30    29.56
2011-05-31    31.98
2011-06-30    26.25
2011-07-31    24.75
2011-08-31    25.56
2011-09-30    26.68
2011-10-31    29.12
2011-11-30    33.87
2011-12-31    35.45
Run Code Online (Sandbox Code Playgroud)

我目前的进展如下:

读取输入文件并将日期列设置为日期时间索引后,使用以下脚本开发可用数据的预测

model = sm.tsa.ARIMA(df['Price'].iloc[1:], order=(1, 0, 0))  
results = model.fit(disp=-1)  
df['Forecast'] = results.fittedvalues  
df[['Price', 'Forecast']].plot(figsize=(16, 12))  
Run Code Online (Sandbox Code Playgroud)

,它给出以下输出:

5年时间序列,每小时分辨率数据

现在,正如我所说,我没有统计技能,我几乎不知道如何得到这个输出(基本上,改变第一行内的order属性会改变输出),但'实际'预测看起来非常好,我想再延长一年(2016年).

为此,在数据框中创建了其他行,如下所示:

start = datetime.datetime.strptime("2016-01-01", "%Y-%m-%d")
date_list = pd.date_range('2016-01-01', freq='1D', periods=366)
future = pd.DataFrame(index=date_list, columns= df.columns)
data = pd.concat([df, future])
Run Code Online (Sandbox Code Playgroud)

最后,当我使用statsmodels的.predict函数时:

data['Forecast'] = results.predict(start = 1825, end = 2192, dynamic= True) …
Run Code Online (Sandbox Code Playgroud)

python forecasting statsmodels

7
推荐指数
1
解决办法
6694
查看次数

使用 xarray 滚动分位数

有没有xArray办法在DataArray.rolling窗口上计算分位数?列出的可用方法包括meanmedian,但没有关于分位数/百分位数。我想知道这是否可以以某种方式完成,即使没有直接的方法。

目前,我正在本地将xArray数据迁移到 a pandas.DataFrame,我在其中应用了rolling().quantile()序列。之后,我采用新的值DataFramexArray.DataArray从中构建一个。可重现的代码:

import xarray as xr
import pandas as pd
import numpy as np

times = np.arange(0, 30)
locs = ['A', 'B', 'C', 'D'] 

signal = xr.DataArray(np.random.rand(len(times), len(locs)), 
                      coords=[times, locs], dims=['time', 'locations'])
window = 5

df = pd.DataFrame(data=signal.data)
roll = df.rolling(window=window, center=True, axis=0).quantile(.25).dropna()
window_array = xr.DataArray(roll.values, 
            coords=[np.arange(0, signal.time.shape[0] - window + 1), signal.locations], 
            dims=['time', 'locations'])
Run Code Online (Sandbox Code Playgroud)

欢迎任何xArray尽可能多地坚持的线索。

让我们考虑同样的问题,只是规模更小(10 个时间实例,2 个位置)。 …

python quantile python-xarray

2
推荐指数
1
解决办法
640
查看次数