使用pandas时间序列的线性回归

van*_*lay 3 python pandas

我有一个dataframe对象,其中包含EUR_USD货币对的1秒间隔.但理论上它可以是任何间隔,在这种情况下它可能看起来像这样:

2015-11-10 01:00:00+01:00    1.07616
2015-11-10 01:01:00+01:00    1.07605
2015-11-10 01:02:00+01:00    1.07590
2015-11-10 01:03:00+01:00    1.07592
2015-11-10 01:04:00+01:00    1.07583
Run Code Online (Sandbox Code Playgroud)

我想使用线性回归从数据框中的数据中绘制趋势线,但我不确定使用时间序列,甚至是如此小的时间序列间隔,最好的方法是什么.

到目前为止,我已经把时间替换为(这只是为了显示我想要去的地方)一个从0到时间序列列表长度的列表.

x = list(range(0, len(df.index.tolist()), 1))
y = df["closeAsk"].tolist()
Run Code Online (Sandbox Code Playgroud)

使用numpy做数学魔术

fit = np.polyfit(x,y,1)
fit_fn = np.poly1d(fit)
Run Code Online (Sandbox Code Playgroud)

最后,我将函数与df ["closeAsk"]一起绘制,以了解趋势.

plt.plot(x,df["closeAsk"], '-')
plt.plot(x,y, 'yo', x, fit_fn(x), '--k')
plt.show()
Run Code Online (Sandbox Code Playgroud)

然而现在x轴只是无意义的数字,而是我希望它们能够显示时间序列.

lan*_*ery 8

详细说明我的评论:

假设您有一些均匀间隔的时间序列数据,time以及一些相关数据data,正如您在问题中所述.

time = pd.date_range('9:00', '10:00', freq='1s')
data = np.cumsum(np.random.randn(time.size))

df = pd.DataFrame({'time' : time,
                   'data' : data})
Run Code Online (Sandbox Code Playgroud)

如您所示,您可以使用线性拟合数据np.polyfit并创建趋势线np.poly1d.

x = np.arange(time.size) # = array([0, 1, 2, ..., 3598, 3599, 3600])
fit = np.polyfit(x, df['data'], 1)
fit_fn = np.poly1d(fit)
Run Code Online (Sandbox Code Playgroud)

然后绘制数据和拟合df['time']作为x轴.

plt.plot(df['time'], fit_fn(x), 'k-')
plt.plot(df['time'], df['data'], 'go', ms=2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述