запустить статистику линейной регрессии на всех данных - PullRequest
0 голосов
/ 29 июня 2018

У меня есть фрейм данных со списком координат x и y. Я пытаюсь не запускать на нем функцию линейной регрессии статистики, но в целом она дает мне няни.

Фрейм данных выглядит следующим образом

  x1  x2  x3  x4  y1  y2  y3  y4 
0 6   5   4   1   2   3   7   6 
1 5   5   4   9   4   3   8   2 

и мой код выглядит так:

#slope,_,_,_,_=stats.linregress([-7,55,12,-38],[5,40,-10,-20]) #tested:works 

df.loc[:,'slope1'] = df[['x1','x2','y1','y2']].apply(lambda x: stats.linregress([x[0],x[1]],[x[2],x[3]])[0])
df.loc[:,'slope2'] = df[['x3','x4','y3','y4']].apply(lambda x: stats.linregress([x[0],x[1]],[x[2],x[3]])[0])

# not working until linregress above works:
#df['angle'] = np.arctan((df['slope1'] - df['slope2']) / (1 + (df['slope1'] * df['slope2'])))

это производит:

  x1  x2  x3  x4  y1  y2  y3  y4  slope1  slope2 
0 6   5   4   1   2   3   7   6   NaN     NaN  
1 5   5   4   9   4   3   8   2   NaN     NaN

Как я должен применить функцию к столбцу данных, чтобы он дал что-то отличное от nan?

1 Ответ

0 голосов
/ 29 июня 2018

Я думаю, нужно определить axis=1 для функции процессов в строках:

from scipy import stats

f = lambda x: stats.linregress([x[0],x[1]],[x[2],x[3]])[0]
df['slope1'] = df[['x1','x2','y1','y2']].apply(f, axis=1)
df['slope2'] = df[['x3','x4','y3','y4']].apply(f, axis=1)

df['angle'] = np.arctan((df['slope1'] - df['slope2']) / (1 + (df['slope1'] * df['slope2'])))
print (df)
   x1  x2  x3  x4  y1  y2  y3  y4  slope1    slope2     angle
0   6   5   4   1   2   3   7   6    -1.0  0.333333 -1.107149
1   5   5   4   9   4   3   8   2     NaN -1.200000       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...