2017-11-25 15 views
2

데이터 프레임 (df)에서 열 이름을 가져 와서 spearmanr 상관 관계 함수에 의해 생성 된 결과 배열에 연결하려고합니다. 상관 관계 값 (spearman)과 p 값 (spearman_pvalue)에 다시 열 이름 (a-j)을 연관시켜야합니다. 이 작업을 수행하는 직관적 인 방법이 있습니까? 것 같다python scipy spearman correlations

from scipy.stats import pearsonr,spearmanr 
import numpy as np 
import pandas as pd 

df=pd.DataFrame(np.random.randint(0,100,size= (100,10)),columns=list('abcdefghij')) 

def binary(row): 
    if row>=50: 
     return 1 
    else: 
     return 0 
df['target']=df.a.apply(binary) 

spearman,spearman_pvalue=spearmanr(df.drop(['target'],axis=1),df.target) 
print(spearman) 
print(spearman_pvalue) 

답변

2

당신이 필요합니다

from scipy.stats import spearmanr 

df=pd.DataFrame(np.random.randint(0,100,size= (100,10)),columns=list('abcdefghij')) 
#print (df) 

#faster for binary df 
df['target'] = (df['a'] >= 50).astype(int) 
#print (df) 

spearman,spearman_pvalue=spearmanr(df.drop(['target'],axis=1),df.target) 

df1 = pd.DataFrame(spearman.reshape(-1, 11), columns=df.columns) 
#print (df1) 

df2 = pd.DataFrame(spearman_pvalue.reshape(-1, 11), columns=df.columns) 
#print (df2) 

### Kyle, we can assign the index back to the column names for the total matrix: 
df2=df2.set_index(df.columns) 
df1=df1.set_index(df.columns) 

또는 :

df1 = pd.DataFrame(spearman.reshape(-1, 11), 
        columns=df.columns, 
        index=df.columns) 
df2 = pd.DataFrame(spearman_pvalue.reshape(-1, 11), 
        columns=df.columns, 
        index=df.columns) 
+0

안녕 Jezrael, 내가 안양 [ '대상'] 이것을 다시 구현하기 위해 노력했다, 그러나 그것은 모양 변경에 실패 . spearman이 다음과 같이되도록 코드를 조정하십시오 : spearman, spearman_pvalue = spearmanr (df.drop ([ 'target'], axis = 1), df.target). spearman corrlelation에 대한 이진 목표에 통계를 연결해야합니다. 그렇지 않으면 피어슨 (이산 대 연속)을 활용했을 것입니다. – Kyle

+0

oops, 나는'target' 칼럼을 잊어 버린다. 이제는 잘 작동해야합니다. – jezrael