【发布时间】:2019-03-18 14:47:41
【问题描述】:
我一直在使用这个函数在 Pandas 中创建时间序列特征,它返回给定点范围的(OLS?)最佳拟合斜率:
def best_fit(X, Y):
xbar = sum(X)/len(X)
ybar = sum(Y)/len(Y)
n = len(X)
numer = sum([xi*yi for xi,yi in zip(X, Y)]) - n * xbar * ybar
denum = sum([xi**2 for xi in X]) - n * xbar**2
b = numer / denum
return b
这是一个显示结果的简单示例(请参阅下面的最终 df):
import pandas as pd
import numpy as np
import random
cols = ['x_vals','y_vals']
df = pd.DataFrame(columns=cols)
for i in range(0,20):
df.loc[i,'x_vals'] = i
df.loc[i,'y_vals'] = 0.05 * i**2 + 0.1 * i + random.uniform(-1,1) #some random parabolic points
然后我应用 best_fit 函数得到前面 5 个点的斜率:
for i,row in df.iterrows():
if i>=5:
X = df['x_vals'][i-5:i]
Y = df['y_vals'][i-5:i]
df.loc[i,'slope'] = best_fit(X, Y)
df
这给了我这个:
x_vals y_vals slope
0 -0.648205 NaN
1 0.282729 NaN
2 0.785474 NaN
3 1.48546 NaN
4 0.408165 NaN
5 1.61244 0.331548
6 2.60868 0.228211
7 3.77621 0.377338
8 4.08937 0.678201
9 4.34625 0.952618
10 5.47554 0.694832
11 7.90902 0.630377
12 8.83912 0.965180
13 9.01195 1.306227
14 11.8244 1.269497
15 13.3199 1.380057
16 15.2751 1.380692
17 15.3959 1.717981
18 18.454 1.621861
19 20.0773 1.533528
我需要从 pyspark 数据框而不是 Pandas 中获取相同的斜率列,只是我正在努力寻找一个起点(pyspark 窗口?OLS 内置函数?udf?)。
【问题讨论】:
-
应该结合使用pyspark window和udf,这个参考(基于scala)将帮助你实现stackoverflow.com/questions/23402303/…
标签: pandas pyspark user-defined-functions least-squares