如何为分类特征绘制Cramer V热图?

时间:2018-08-15 13:42:22

标签: python-3.x data-visualization bokeh heatmap categorical-data

应该使用Crammer的V计算类别变量之间的关联。因此,我找到了以下code进行绘制,但我不知道他为什么为“贡献”绘制它,这是一个数字变量?

def cramers_corrected_stat(confusion_matrix):
    """ calculate Cramers V statistic for categorical-categorical association.
        uses correction from Bergsma and Wicher, 
        Journal of the Korean Statistical Society 42 (2013): 323-328
    """
    chi2 = ss.chi2_contingency(confusion_matrix)[0]
    n = confusion_matrix.sum().sum()
    phi2 = chi2/n
    r,k = confusion_matrix.shape
    phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))    
    rcorr = r - ((r-1)**2)/(n-1)
    kcorr = k - ((k-1)**2)/(n-1)
    return np.sqrt(phi2corr / min( (kcorr-1), (rcorr-1)))


cols = ["Party", "Vote", "contrib"]
corrM = np.zeros((len(cols),len(cols)))
# there's probably a nice pandas way to do this
for col1, col2 in itertools.combinations(cols, 2):
    idx1, idx2 = cols.index(col1), cols.index(col2)
    corrM[idx1, idx2] = cramers_corrected_stat(pd.crosstab(df[col1], df[col2]))
    corrM[idx2, idx1] = corrM[idx1, idx2]

corr = pd.DataFrame(corrM, index=cols, columns=cols)
fig, ax = plt.subplots(figsize=(7, 6))
ax = sns.heatmap(corr, annot=True, ax=ax); ax.set_title("Cramer V Correlation between Variables");

我还发现了Bokeh。但是,我不确定它是否使用Crammer的V绘制热图?

真的,我有两个分类特征:第一个具有2个类别,第二个具有37个类别。您能否让我知道如何绘制Crammer的V热图?

我的数据集的某些部分是here

谢谢。

1 个答案:

答案 0 :(得分:1)

出什么问题了?该代码是绝对正确的。

ax在这种情况下是一个相关矩阵,构成变量。 使用“贡献”是不正确的,但是您可以在the article下面看到 引用

*

  

“这对Contribution变量不正确,但我们会做   稍后再提供模型。”

* 作者仅显示此变量。 在您的情况下,制作情节Crammer's V的原因是什么?您只有两个变量(如我所见),并且只会获得一个相关系数Crammer的V

当然,您可以在数据上重复代码并获得Crammer的V热图。