如何为分类特征绘制类似热图的图?

数据挖掘 Python 统计数据 可视化 分类数据 热图
2022-02-25 04:30:51

我将非常感谢让我知道如何heatmap为分类特征绘制类似的图?

事实上,根据这篇文章,分类变量之间的关联应该使用Crammer's V计算。因此,我找到了以下代码来绘制它,但我不知道他为什么将它绘制为“贡献”,这是一个数字多变的?

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");

我还发现了散景但是,我不确定它是否使用 Crammer 的 V 来绘制heatmap

真的,我有两个分类特征:第一个有 2 个类别,第二个有 37 个类别。

我需要这个图就像这里展示的最后两个图一样,但也要在上面显示关联值。
提前致谢。

1个回答

绘制分类特征之间的关系可能没有用。可视化意味着对分类值进行排序,这可能不会导致错误的解释。

一个更有用的选项可能是列联表一个特征将在行中,另一个特征将在列中。单元格将是共现的计数。