Pandas有一个非常好的功能,为您的数据DataFrame pd.DataFrame.corr()提供相关矩阵数据框。
然而,相关性的r并不总是提供信息。根据您的应用,线性回归的斜率可能同样重要。是否有任何函数可以为输入矩阵或数据帧返回该函数?除了用scipy.stats.linregress()进行迭代,这会很痛苦,我不知道有什么方法可以做到这一点吗?
答案 0 :(得分:2)
回归线的斜率y = b 0 + b 1 * x也可以使用相关系数计算:b 1 = corr(x,y)*σ x /σ y
使用numpy的newaxis创建σ x /σ y 矩阵:
df.corr() * (df.std().values / df.std().values[:, np.newaxis])
Out[59]:
A B C
A 1.000000 -0.686981 0.252078
B -0.473282 1.000000 -0.263359
C 0.137670 -0.208775 1.000000
其中df
是:
df
Out[60]:
A B C
0 5 6 9
1 4 4 2
2 7 3 5
3 4 3 9
4 6 5 3
5 3 8 6
6 2 8 1
7 7 2 7
8 4 1 5
9 1 6 6
这是为了验证:
res = []
for col1, col2 in itertools.product(df.columns, repeat=2):
res.append(linregress(df[col1], df[col2]).slope)
np.array(res).reshape(3, 3)
Out[72]:
array([[ 1. , -0.68698061, 0.25207756],
[-0.47328244, 1. , -0.26335878],
[ 0.1376702 , -0.20877458, 1. ]])