计算数据帧中的斜率

时间:2019-03-16 00:49:50

标签: python pandas

这个问题只是关于计算数据帧中每个时间步的斜率。这里有很多额外的细节,欢迎您阅读或不阅读,但我只想迈出这一步。

我有一个预测和一个观察到的数据框。我正在尝试计算预测中的“有趣”变化。

我想尝试通过以下方式实现这一目标:

  • 计算观测数据的最佳拟合(即线性回归)。
  • 找到坡度
  • 在观察到的数据的每个时刻找到斜率和斜率之差

为此,我需要在时间序列的每个时刻生成斜率。

  • 计算标准差和该差异的平均值
  • 使用它为预测DF中的值生成z分数。

如何计算数据中每个点的斜率?

原始

from sklearn import linear_model

original = series.copy() # the observations
f = y.copy() # the forecast

app = ' app_2'

original.reset_index(inplace=True)
original['date'] = pd.to_timedelta(original['date'] ).dt.total_seconds().astype(int)    

# * calculate the best fit of the observed data (ie, linear regression).
reg = linear_model.LinearRegression()

# * find its slope
reg.fit(original['date'].values.reshape(-1, 1), original[app].values)
slope = reg.coef_

# * find the difference between the slope and the slope at each moment of the observed data
delta = original[app].apply(lambda x: abs(slope - SLOPE_OF(x)))

# * calculate the stddev and mean of that difference
odm = delta.mean()
ods = delta.std(ddof=0)

# * use that to generate z-scores for the values in the forecast DF. 
# something like
f['test_delta'] = np.cumsum(f[app]).apply(lambda x: abs(slope - x))
f['z'] = f['test_delta'].apply(lambda x: x - odm / ods)

# from that I might find interesting segments of the forecast:
sig = f.index[f['z'] > 2].tolist()

1 个答案:

答案 0 :(得分:1)

要“计算数据中每个点的斜率”,最简单的方法是使用Series.diff()如下计算每个相邻行的“超出行程”。由此产生的系列给出(估计)上一行与当前行之间的瞬时变化率(IROC)。

iroc = original[app].diff() / original['date'].diff()

此外,您不需要apply。多亏了numpy向量化,scalar - array的行为符合预期:

delta = slope - iroc

希望这行得通。正如Wen-Ben所说,这确实有助于查看实际数据和预期输出。