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

新手上路,请多包涵

我的原始数据集

我有一个由 22 个分类变量(无序)组成的数据集。我想在一个漂亮的 热图 中可视化它们的相关性。由于 Pandas 内置函数

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 的任何想法或相同的东西?

先谢谢了。

原文由 zar3bski 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 588
2 个回答

您可以使用 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']})

原文由 BENY 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 association-metrics python 包从 pandas.DataFrame 对象计算 Cramér 的系数矩阵非常简单;让我演示给你看:

首先安装 association_metrics 使用:

 pip install association-metrics

然后,您可以使用以下伪代码

# Import association_metrics
import association_metrics as am
# Convert you str columns to Category columns
df = df.apply(
        lambda x: x.astype("category") if x.dtype == "O" else x)

# Initialize a CamresV object using you pandas.DataFrame
cramersv = am.CramersV(df)
# will return a pairwise matrix filled with Cramer's V, where columns and index are
# the categorical variables of the passed pandas.DataFrame
cramersv.fit()

原文由 Heber Trujillo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏