获得较少相关的变量名称

时间:2018-05-05 09:03:17

标签: pandas numpy

我有一个数据集(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))

结果是50(所有变量!),这是意料之外的。 怎么解决这个问题,伙计们?

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,你的问题有点含糊不清。首先,有可能没有列对相关。其次,拆散没有意义,因为您创建了一个不能直接在2D阵列上使用的索引数组。第三,这应该是第一,但我对此视而不见 - 正如@AmiTavory所提到的那样,#34;关联名称&#34;没有意义。

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

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)

输出:

[[0 2]
 [1 2]
 [2 3]]

正如预期的那样,第2列是唯一一个与任何其他列无关的词,意思是所有其他列彼此相关。