Python 等效R";findcorrelation(corr,截止值=0.75)";巨蟒熊猫

Python 等效R";findcorrelation(corr,截止值=0.75)";巨蟒熊猫,python,r,pandas,numpy,scikit-learn,Python,R,Pandas,Numpy,Scikit Learn,我有一个名为“数据”的数据帧。我计算了数据的相关性: corr = data.corr() 我想从“数据”文件中删除相关性大于0.75的列。 可以使用以下命令在R中轻松完成此操作: hc=findCorrelation(corr,cutoff = 0.75) data <- data[,-c(hc)] hc=find相关(corr,cutoff=0.75) 数据第1步。准备一些数据 from scipy.stats import multivariate_normal covs =

我有一个名为“数据”的数据帧。我计算了数据的相关性:

corr = data.corr()
我想从“数据”文件中删除相关性大于0.75的列。 可以使用以下命令在R中轻松完成此操作:

hc=findCorrelation(corr,cutoff = 0.75)
data <- data[,-c(hc)]
hc=find相关(corr,cutoff=0.75)

数据第1步。准备一些数据

from scipy.stats import multivariate_normal

covs = np.eye(10)
for i in range(10):
    for j in range(10):
        if i!=j:
            covs[i,j] = (i*j)/100

mvn = multivariate_normal(cov=covs)
data = mvn.rvs(size = 100)
data.shape
(100, 10)
第2步。将相关性可视化。

这里,你有一个2-d的相关阵列。数据按列组织,案例按行组织。为了对列数据运行关联,您需要首先转置数组(提示:numpy按行运行关联):

正如您可能看到的,某些列(如统计或ML中所说的特性)是高度相关的

第3步。删除相关列

让我们找出哪些元素的相关性超过
.5
阈值,不包括对角线元素,对角线元素显然是完全自相关的:

idx = np.abs(np.tril(r, k= -1)) < .5
idx_drop = np.all(idx, axis=1)
data_uncorr = data[:, idx_drop]
data_uncorr.shape
(100, 8)


pandas中是否也有任何等效选项@Sergey,一个小问题是,我们能否从列中任何值为非零的文件中找到列名/编号。colNamesToDrop=df.columns[~idx_drop],从任何datframe中查找值为非零的列的或多或少的命令。我不明白。。。“值为非零的列”是什么意思???按我的理解,列是一系列值……假设我有一个5x10的矩阵。现在对于第2列,所有5行的所有值都为零,但是对于第4列,每行的所有值都为零,除了第3行的值不是零。我需要一个命令来打印列号,列4的值为非零。以列id的形式将输出提供给我
idx = np.abs(np.tril(r, k= -1)) < .5
idx_drop = np.all(idx, axis=1)
data_uncorr = data[:, idx_drop]
data_uncorr.shape
(100, 8)
plt.imshow(np.corrcoef(data_uncorr.T), cmap = "coolwarm")
plt.colorbar();
np.sum(np.abs(np.tril(np.corrcoef(data_uncorr.T), k=-1)) >.5)
0