2017-11-25 10 views
2

私は、データフレーム(df)から列名を取得し、spearmanr相関関数によって生成された結果の配列に関連付けることを試みています。列名(a-j)と相関値(spearman)とp値(spearman_pvalue)の両方に関連付ける必要があります。このタスクを実行する直感的な方法はありますか?python scipy spearman correl

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、私はDF [ 'ターゲット']で、このバックを実装してみました。スピアマンがspearman、spearman_pvalue = spearmanr(df.drop(['target']、axis = 1)、df.target)になるようにコードを調整してください。私はspearman corrlelationのためにstatをバイナリターゲットに関連付ける必要があります。それ以外の場合は、ピアソン(離散対連続)を利用しただけです。 – Kyle

+0

おっと、私は 'target'カラムを忘れてしまいます。今それはうまくいくはずです – jezrael

関連する問題