什么是最好和更好的选择?
在 DataFrame 或数组上使用相关方法 (.corr())? 我知道我们可以在 DataFrame 上使用 .corr() 方法,但是对于数组呢?可以吗?
我这样做的原因是因为我想看看在数据集上实现 StandardScaler() 后不同变量之间的相关性是否会改变;也就是说,将变量和/或特征降低到相同的规模水平。
非常感谢!
我知道我们可以在 DataFrame 上使用 .corr() 方法,但是怎么样 数组?可以吗?
是的,您正在寻找的函数是 numpy 的
corrcoef
。
让我们考虑这个示例数据集:
import pandas as pd
import numpy as np
data = {
... 'name': ['Hildegarde', 'Buba', 'Virginie', 'Eustache', 'Robin', 'Nasredine', 'Maurice'],
... 'age': [41, 28, 35, 44, 55, 11, 37],
... 'score': [88.0, 59.0, 81.0, 50.0, 58.0, 61.0, 84.0]
... }
df = pd.DataFrame(data=data)
array1 = df['age'].to_numpy()
array2 = df['score'].to_numpy()
df.corr('pearson')
返回:
age score
age 1.000000 0.013343
score 0.013343 1.000000
np.corrcoef(array1, array2)
返回包含相同值的数组:
array([[1. , 0.01334299],
[0.01334299, 1. ]])
如果您的输入数据存储在 pandas 数据框中,那么我会坚持使用 pandas 的
corr()
函数以避免不必要的操作。此外,corr()
允许您尝试其他相关方法(例如 kendall
),而 corrcoef
仅限于 Pearon 相关。
编辑:为了让自己相信标准定标器不会影响您的相关系数,您可以在 stats Stack Exchange 上查看此演示或通过运行亲自尝试:
from sklearn.preprocessing import StandardScaler
std_scaler = StandardScaler()
df_scaled = std_scaler.fit_transform(df[['age','score']].to_numpy())
np.corrcoef(df_scaled[:,0], df_scaled[:,1])
返回:
array([[1. , 0.01334299],
[0.01334299, 1. ]])