Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 获取相关性较小的变量名_Pandas_Numpy - Fatal编程技术网

Pandas 获取相关性较小的变量名

Pandas 获取相关性较小的变量名,pandas,numpy,Pandas,Numpy,我有一个数据集(50列,100行)。 还有50个变量名,0,1,2…49代表50列。 我必须找到相关性较小的变量,比如相关性

我有一个数据集(50列,100行)。 还有50个变量名,0,1,2…49代表50列。 我必须找到相关性较小的变量,比如相关性<0.7。 我做了如下尝试:

import os, glob, time, numpy as np, pandas as pd
data = np.random.randint(1,99,size=(100, 50))
dataframe = pd.DataFrame(data)
print (dataframe.shape)

codes = np.arange(50).astype(str)
dataframe.columns = codes

corr = dataframe.corr()
corr = corr.unstack().sort_values()
print (corr)
corr = corr.values
indices = np.where(corr < 0.7)
print (indices)
res = codes[indices[0]].tolist() + codes[indices[1]].tolist()
print (len(res))
res = list(set(res))
print (len(res))
导入操作系统、全局、时间、numpy作为np、pandas作为pd
data=np.random.randint(1,99,size=(100,50))
dataframe=pd.dataframe(数据)
打印(dataframe.shape)
代码=np.arange(50).aType(str)
dataframe.columns=代码
corr=dataframe.corr()
corr=corr.unstack().sort_值()
印刷品(corr)
corr=corr.values
指数=np,其中(corr<0.7)
印刷品(索引)
res=代码[索引[0]].tolist()+代码[索引[1]].tolist()
打印(镜头(分辨率))
res=列表(集合(res))
打印(镜头(分辨率))
结果是,50(所有变量!),这是出乎意料的。
如何解决这个问题,伙计们?

正如评论中提到的,你们的问题有点模棱两可。首先,有一种可能性,即没有列对是相关的。其次,取消堆叠没有意义,因为您创建的索引数组不能直接用于二维数组。第三,这应该是第一个,但我对此视而不见——正如@AmiTavory提到的,“关联名字”没有任何意义

关联过程本身是有效的,如以下示例所示:

import numpy as np
import pandas as pd

A = np.arange(100).reshape(25, 4)
#random order in column 2, i.e. a low correlation to the first columns
np.random.shuffle(A[:,2])
#flip column 3 to create a negative correlation with the first columns
A[:,3] = np.flipud(A[:,3])
#column 1 is unchanged, therefore positively correlated to column 0
df = pd.DataFrame(A)
print(df)
#establish a correlation matrix
corr = df.corr()
#retrieve index of pairs below a certain value
#use only the upper triangle with np.triu to filter for symmetric solutions
#use np.abs to take also negative correlation into account
res = np.argwhere(np.triu(np.abs(corr.values) <0.7))
print(res)

正如所料,第2列是唯一一个与任何其他列不相关的列,这意味着所有其他列都是相互关联的。

是什么确保存在相关性?您是否引入了一个与另一列明显相关的列,以查看该列是否不会出现在索引列表中?您还应该使用
abs(corr)
,因为-1的相关性表示变量名的相关性没有任何合理的定义。另外,在您的示例中,
out
是未定义的。我一点也不明白你的问题。@AmiTavory outs是数据,很抱歉输入错误。你试过发布的代码了吗?您应该会收到一条错误消息,因为无论出于何种原因,您都会取消相关矩阵的堆栈,并在2D数据帧的列和行上使用较长1D数组的索引。这不起作用,是吗?np.triu的作用是什么?那么,如何获得相关性较小的列数据?我还需要与其他列相关性较小的列的索引?如上所述,防止出现对称解。如果列0与列2不相关,那么显然列2与列0不相关。为了只提取一对,我使用了
np.triu
。把它移开,看看我的意思。第二个问题没有意义。在对[0,2]中,列0与列2不相关。您要提取哪个号码?两者之间没有关联。
[[0 2]
 [1 2]
 [2 3]]