多个分类变量(熊猫)之间的相关性

时间:2017-12-30 15:43:43

标签: python pandas statistics heatmap categorical-data

my original dataset

我的数据集由22个分类变量(非有序)组成。我想在漂亮的热图中可视化它们的相关性。由于大熊猫内置功能

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

只实现数值变量的相关系数(Pearson,Kendall,Spearman),我必须自己聚合以执行卡方或类似的东西,我不太确定巫婆函数用于一个优雅的步骤(而不是遍历所有cat1 * cat2对)。需要说明的是,这就是我想要的结果(数据框):

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

pd.pivot_table 的任何想法或同样的东西?

提前谢谢 d。

3 个答案:

答案 0 :(得分:4)

您可以使用template <class Container> struct bound_checked : private Container { using Container::Container; auto operator[] (typename Container::size_type i) -> decltype(this->at(i)) { return this->at(i); } auto operator[] (typename Container::size_type i) const -> decltype(this->at(i)) { return this->at(i); } using Container::begin; using Container::end; using Container::at; using Container::insert; // ... you get the idea };

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']})

答案 1 :(得分:0)

事实证明,我发现的唯一解决方案是迭代所有因子*因子对。

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

答案 2 :(得分:0)

在这篇文章中找到了一个不错的解决方案。这不是一步,而是提供了所需的内容。Post on correlation for categorical variables