web-dev-qa-db-ja.com

複数のカテゴリー変数間の相関関係(パンダ)

my original dataset

22個のカテゴリ変数(非順序)で構成されるデータセットがあります。ニースヒートマップでそれらの相関関係を視覚化したいと思います。 Pandas組み込み関数

DataFrame.corr(method='pearson', min_periods=1)

数値変数(Pearson、Kendall、Spearman)の相関係数のみを実装します。カイ二乗などを実行するために自分で集計する必要があり、どの関数を使用して1つのエレガントなステップ(cat1 * cat2のすべてのペアを繰り返すのではなく)。明確にするために、これは(adataframe)になりたいものです:

         cat1  cat2  cat3  
  cat1|  coef  coef  coef  
  cat2|  coef  coef  coef
  cat3|  coef  coef  coef

pd.pivot_tableまたは何か同じようなアイデアはありますか?

事前に感謝しますD.

5
zar3bski

pd.factorizeを使用できます

df.apply(lambda x : pd.factorize(x)[0]).corr(method='pearson', min_periods=1)
Out[32]: 
     a    c    d
a  1.0  1.0  1.0
c  1.0  1.0  1.0
d  1.0  1.0  1.0

データ入力

df=pd.DataFrame({'a':['a','b','c'],'c':['a','b','c'],'d':['a','b','c']})

更新

from scipy.stats import chisquare

df=df.apply(lambda x : pd.factorize(x)[0])+1

pd.DataFrame([chisquare(df[x].values,f_exp=df.values.T,axis=1)[0] for x in df])

Out[123]: 
     0    1    2    3
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
3  0.0  0.0  0.0  0.0

df=pd.DataFrame({'a':['a','d','c'],'c':['a','b','c'],'d':['a','b','c'],'e':['a','b','c']})
5
YO and BEN_W

この投稿で、すてきできれいなソリューションを見つけました。これは1つのステップではありませんが、必要なものを提供します。 カテゴリ変数の相関に関する投稿

2
Shashwat Tiwary

結局、私が見つけた唯一の解決策は、すべてのfactor * factorペアを反復処理することです。

factors_paired = [(i,j) for i in df.columns.values for j in df.columns.values] 

chi2, p_values =[], []

for f in factors_paired:
    if f[0] != f[1]:
        chitest = chi2_contingency(pd.crosstab(df[f[0]], df[f[1]]))   
    chi2.append(chitest[0])
    p_values.append(chitest[1])
else:      # for same factor pair
    chi2.append(0)
    p_values.append(0)

chi2 = np.array(chi2).reshape((23,23)) # shape it as a matrix
chi2 = pd.DataFrame(chi2, index=df.columns.values, columns=df.columns.values) # then a df for convenience
0
zar3bski