我正在尝试编写一个函数,它可以从最适合下面的线返回梯度
dataframe
在浏览了谷歌的几个资源之后,我仍然不确定这是如何完成的。
我明白最佳拟合线的计算公式为:
y = mx + b
将因变量 (y) 设置为
foos
,将自变量 (x) 设置为
DateTime
Dataframe
DateTime foos
2019-06-02 11:10:00.000000 0.01693508247952
2019-06-02 11:09:00.000000 0.5880636280067069
2019-06-02 11:08:00.000000 0.039372713999924
2019-06-02 11:07:00.000000 0.0695437258183455
2019-06-02 11:05:00.000000 1.5659431108801645
2019-06-02 11:04:00.000000 0.557622107242239
2019-06-02 11:03:00.000000 1.636076943844067
2019-06-02 11:02:00.000000 0.95229579554872
2019-06-02 11:01:00.000000 4.140446615946458
2019-06-02 11:00:00.000000 1.9773540525390418
2019-06-02 10:59:00.000000 0.4339180765629633
2019-06-02 10:58:00.000000 0.9779139666335716
...
如何/使用什么才能返回时间序列数据的梯度值?
import pandas as pd
from scipy.stats import linregress
# 创建你的示例数据
data = {'DateTime': pd.to_datetime([
'2019-06-02 11:10:00.000000',
'2019-06-02 11:09:00.000000',
'2019-06-02 11:08:00.000000',
'2019-06-02 11:07:00.000000',
'2019-06-02 11:05:00.000000',
'2019-06-02 11:04:00.000000',
'2019-06-02 11:03:00.000000',
'2019-06-02 11:02:00.000000',
'2019-06-02 11:01:00.000000',
'2019-06-02 11:00:00.000000',
'2019-06-02 10:59:00.000000',
'2019-06-02 10:58:00.000000'
]),
'foos': [
0.01693508247952,
0.5880636280067069,
0.039372713999924,
0.0695437258183455,
1.5659431108801645,
0.557622107242239,
1.636076943844067,
0.95229579554872,
4.140446615946458,
1.9773540525390418,
0.4339180765629633,
0.9779139666335716
]
}
df = pd.DataFrame(data)
# 将“DateTime”列转换为数值类型,以进行线性回归
df['DateTime'] = pd.to_numeric(df['DateTime'])
# 使用 scipy.stats.linregress 计算斜率(梯度)
slope, intercept, r_value, p_value, std_err = linregress(df['DateTime'], df['foos'])
print(f"梯度(斜率)为:{slope}")
这段代码首先将你的“DateTime”列转换为数值格式,这是线性回归所必需的。然后,它使用
scipy.stats.linregress
函数计算最佳拟合线的斜率(代表梯度)和截距,以及其他统计数据,如 R 平方值、p 值和标准误差。
在此代码中,
梯度
由线性回归的
斜率
表示。较大的正斜率表示随着时间的推移,
foos
值快速增加,而较小的正斜率或负斜率表示
foos
值增加缓慢或随时间减少。