python - 如何在大时间序列 DataFrame 上应用短时间序列线性回归
问题描述
我有一个大型时间序列数据集,涵盖多年的每日费率。我正在尝试添加两个额外的列,其中包括 Y 截距和基于前 10 天费率的 x 或斜率系数。
在excel中,我使用linest函数来计算Y截距和x或斜率的系数。
我想在 Python 中复制它。
我已经为这个问题提供了一些示例代码。
import pandas as pd
import numpy as np
from datetime import datetime
date_rng = pd.date_range(start='7/1/2018', end='08/31/2018', freq='D')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(76, 100, size=(len(date_rng)))
df['datetime'] = pd.to_datetime(df['date'])
df = df.set_index('datetime')
df.drop(['date'], axis=1, inplace=True)
我希望看到以下结果
datetime data Slope Intercept
1/07/2018 93 NaN NaN
2/07/2018 91 NaN NaN
3/07/2018 76 NaN NaN
5/07/2018 78 NaN NaN
6/07/2018 86 NaN NaN
7/07/2018 94 NaN NaN
8/07/2018 97 NaN NaN
9/07/2018 97 NaN NaN
10/07/2018 96 1.303030303 81.93333333
11/07/2018 82 1.175757576 81.53333333
12/07/2018 95 1.757575758 78.73333333
13/07/2018 95 1.290909091 83.2
14/07/2018 81 0.296969697 88.46666667
15/07/2018 84 -0.842424242 95.33333333
16/07/2018 77 -1.903030303 100.2666667
17/07/2018 78 -2.266666667 100.6666667
解决方案
正如@alkasm 所建议的,您可以使用 Pandas 的rolling
功能。在滚动窗口上,您可以使用apply
Numpy 的linalg.lstsq
.
A = np.vstack([ np.arange(10), np.ones(len(x))]).T
df['slope'] = df['data'].rolling(10).apply(lambda y: np.linalg.lstsq(A, y)[0][0])
df['intercept'] = df['data'].rolling(10).apply(lambda y: np.linalg.lstsq(A, y)[0][1])
要可视化结果,您可以使用 matplotlib
import matplotlib.pyplot as plt
pd.plotting.register_matplotlib_converters()
plt.plot(df.index, df.data)
for i in range(0, len(df) - 10 , 10):
m, c = df.iloc[10 + i][['slope', 'intercept']]
plt.plot([df.index[0 + i], df.index[10 + i]], [c, c + 10 * m])
plt.show()
推荐阅读
- java - 如何过滤charbuffer中两个字符之间的所有内容?
- r - 将具有字符和数字的不同大小对象的列表拆分为 R 中的表
- haxe - Openfl Haxe 项目中未找到类型问题
- scikit-learn - 整个数据集的交叉验证和数据的矢量化
- node.js - 在请求中获取客户端域
- xamarin - SkiaSharp ConicTo 方法不绘制曲线
- android - 单击深层链接 url 打开带有红色边框的应用程序
- javascript - 使用 jest 和 supertest 在 Javascript 中使用 async/await 测试数据库插入
- r - 将不同长度的列表列表与固定列表相结合
- android - android 中是否有一个唯一的设备 id,用于类似于cordova 中的 device.uuid 的设备