2017-07-03 22 views
-3

我有一個數據幀名稱data爲此,我通過使用如果相關性大於0.75從熊貓

corr = data.corr() 

我想如果柱corr兩者之間是大於0.75繪製相關矩陣的數據幀中刪除列中,除去其中一個來自數據框data。我試過一些選項

raw =corr[(corr.abs()>0.75) & (corr.abs() < 1.0)] 

但它沒有幫助,我需要從原始值非零的列號。基本上,一些蟒蛇命令替換以下R指令

{hc=findCorrelation(corr,cutoff = 0.75) 

hc = sort(hc) 

data <- data[,-c(hc)]} 

如果有人可以幫助我獲得類似蟒蛇大熊貓上面提到的R指令命令的,這將是有益的。

回答

3

使用np.eye忽略對角線值並找到所有具有某個值的絕對值大於閾值的列。使用邏輯否定作爲索引和列的掩碼。


你的榜樣

m = ~(corr.mask(np.eye(len(corr), dtype=bool)).abs() > 0.75).any() 

raw = corr.loc[m, m] 

工作實例

np.random.seed([3,1415]) 
data = pd.DataFrame(
    np.random.randint(10, size=(10, 10)), 
    columns=list('ABCDEFGHIJ')) 
data 

    A B C D E F G H I J 
0 0 2 7 3 8 7 0 6 8 6 
1 0 2 0 4 9 7 3 2 4 3 
2 3 6 7 7 4 5 3 7 5 9 
3 8 7 6 4 7 6 2 6 6 5 
4 2 8 7 5 8 4 7 6 1 5 
5 2 8 2 4 7 6 9 4 2 4 
6 6 3 8 3 9 8 0 4 3 0 
7 4 1 5 8 6 0 8 7 4 6 
8 3 5 8 5 1 5 1 4 3 9 
9 5 5 7 0 3 2 5 8 8 9 

corr = data.corr() 
corr 

     A  B  C  D  E  F  G  H  I  J 
A 1.00 0.22 0.42 -0.12 -0.17 -0.16 -0.11 0.35 0.13 -0.06 
B 0.22 1.00 0.10 -0.08 -0.18 0.07 0.33 0.12 -0.34 0.17 
C 0.42 0.10 1.00 -0.08 -0.41 -0.12 -0.42 0.55 0.20 0.34 
D -0.12 -0.08 -0.08 1.00 -0.05 -0.29 0.27 0.02 -0.45 0.11 
E -0.17 -0.18 -0.41 -0.05 1.00 0.47 0.00 -0.38 -0.19 -0.86 
F -0.16 0.07 -0.12 -0.29 0.47 1.00 -0.62 -0.67 -0.08 -0.54 
G -0.11 0.33 -0.42 0.27 0.00 -0.62 1.00 0.22 -0.40 0.07 
H 0.35 0.12 0.55 0.02 -0.38 -0.67 0.22 1.00 0.50 0.59 
I 0.13 -0.34 0.20 -0.45 -0.19 -0.08 -0.40 0.50 1.00 0.40 
J -0.06 0.17 0.34 0.11 -0.86 -0.54 0.07 0.59 0.40 1.00 

m = ~(corr.mask(np.eye(len(corr), dtype=bool)).abs() > 0.5).any() 
m 

A  True 
B  True 
C False 
D  True 
E False 
F False 
G False 
H False 
I  True 
J False 
dtype: bool 

raw = corr.loc[m, m] 
raw 

     A  B  D  I 
A 1.00 0.22 -0.12 0.13 
B 0.22 1.00 -0.08 -0.34 
D -0.12 -0.08 1.00 -0.45 
I 0.13 -0.34 -0.45 1.00 
+0

當應用上面的代碼中,我得到NAS進行一些細胞是否正常? –

+0

取決於。爲了讓我知道,我需要想象一個可能發生的情景,或者你可以提出一個問題,你在哪裏提供一個它發生的樣本數據集。步驟如下:1.提供最小的數據集以產生問題。 2.描述你正在嘗試做什麼。 3.你用來嘗試你正在嘗試的代碼。 4.爲什麼結果不符合你的預期。 5.代表您所期望的數據集。 – piRSquared