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

zar*_*ski 5 python statistics heatmap pandas categorical-data

我的原始数据集

我有一个由22个分类变量(无序)组成的数据集。我想在一个不错的热图中可视化它们的相关性。自熊猫内置功能

DataFrame.corr(method='pearson', min_periods=1)
Run Code Online (Sandbox Code Playgroud)

仅实现数值变量的相关系数(Pearson,Kendall,Spearman),我必须自己对其进行汇总以执行卡方或类似操作,而且我不太确定哪个函数可以一步一步完成操作(而不是遍历所有cat1 * cat2对)。需要明确的是,这就是我想要的最终结果(一个dataframe):

         cat1  cat2  cat3  
  cat1|  coef  coef  coef  
  cat2|  coef  coef  coef
  cat3|  coef  coef  coef
Run Code Online (Sandbox Code Playgroud)

有与pd.pivot_table相同的想法吗?

先谢谢了。

WeN*_*Ben 5

您可以使用 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
Run Code Online (Sandbox Code Playgroud)

数据输入

df=pd.DataFrame({'a':['a','b','c'],'c':['a','b','c'],'d':['a','b','c']})
Run Code Online (Sandbox Code Playgroud)

更新资料

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']})
Run Code Online (Sandbox Code Playgroud)

  • @robertotomás 有一种叫做皮尔逊卡方检验的东西(有时会导致一些混乱(https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test)),是的,它的目的是衡量之间的相关性分类变量(如常规 Chi2)。然而,在我看来,它与旨在应用于数值变量的所谓皮尔逊相关性(resp. Kendall,Spearman)(参见(https://en.wikipedia.org/wiki/Pearson_correlation_coefficient))不同。在 pandas 中调用 .corr(method='pearson') 方法涉及后者。 (2认同)