누군가 나를 도울 수 있습니까?
선형 회귀를 수행하려면 두 그룹이 필요합니다.
예:
pdf = pd.DataFrame({'group_id':[1,1,1,2,2,2,3,3,3,3],
'sex':['M','M','F','F','M','F','M','F','F','M'],
'x':[0,1,2,0,1,5,2,3,4,5],
'y':[2,1,0,0,0.5,2.5,3,4,5,6]})
df = sqlContext.createDataFrame(pdf)
result_schema =StructType([
StructField('group_id',DoubleType()),
StructField('sex',StringType()),
StructField('x',DoubleType())
])
@pandas_udf(result_schema, PandasUDFType.GROUPED_MAP)
def ols(df):
group_id = df['group_id'].iloc[0]
sex = df['sex'].iloc[0]
y = df['y'].astype(int)
X = df['x'].astype(int)
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
return pd.DataFrame([[group_id] + [sex] + [model.params[1]]], columns=['group_id'] + ['sex'] + ['x'])
beta = df.groupby('group_id', 'sex').apply(ols)
beta.show()
반환 오류 :
PythonException : UDF에서 예외가 발생했습니다. 'IndexError : index out of bounds',
점이 하나 뿐인 일부 그룹이있어 선형 회귀를 수행 할 수 없습니다. 함수에서이를 포착하기 위해 데이터 프레임의 행 수 확인을 추가하고 행 null
이 하나만있는 경우 반환 할 수 있습니다 .
@pandas_udf(result_schema, PandasUDFType.GROUPED_MAP)
def ols(df):
group_id = df['group_id'].iloc[0]
sex = df['sex'].iloc[0]
if len(df) == 1:
return pd.DataFrame([[group_id] + [sex] + [None]], columns=['group_id'] + ['sex'] + ['x'])
else:
y = df['y'].astype(int)
X = df['x'].astype(int)
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
return pd.DataFrame([[group_id] + [sex] + [model.params[1]]], columns=['group_id'] + ['sex'] + ['x'])
df.groupby('group_id', 'sex').apply(ols).show()
+--------+---+-------------------+
|group_id|sex| x|
+--------+---+-------------------+
| 2.0| M| null|
| 3.0| F| 1.0|
| 1.0| M|-1.0000000000000002|
| 1.0| F| null|
| 2.0| F|0.39999999999999986|
| 3.0| M| 0.9999999999999998|
+--------+---+-------------------+
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다