开发者社区> 问答> 正文

如何轻松地将值分组以改善热图可视化

我正在制作热图。给了我一个数据帧,现在比较值“ Age”和“ purch_bike”(这是一个“是”或“否”变量)。我想清理此视觉效果,因为当前在热图上显示的值太多。因此,我想通过将年龄段分成11个间隔/间隔来创建更大范围的年龄段,我该怎么做?

数据集:http://www.ishelp.info/data/bikebuyers_original.csv

当前代码和输出(通过Google Colab):

sns.heatmap(pd.crosstab(df.Age, df.purch_bike), annot=True, fmt='d');
chi1, p_value1, dof1, expected1 = chi2_contingency(pd.crosstab(df['Age'], df['purch_bike']))
print(f'X square:\t\t{round(chi1, 4)}') # this code simply displays the Chi-square stat and p-value
print(f'p-value:\t\t{round(p_value1, 6)}')
plt.show()

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 20:26:15 461 0
1 条回答
写回答
取消 提交回答
  • 每个范围内来自熊猫组的pd.cut。它可以用来创建一个新的列'AgeGroup'用作pd.crosstab的输入。pd.cut的标签参数可以设置适当的文本作为y标记。right = False会照顾到等于垃圾箱边界的年龄,并将它们放在较高的垃圾箱中。一些示例代码:

    import matplotlib.pyplot as plt
    import pandas as pd
    import seaborn as sns
    
    df = pd.read_csv('http://www.ishelp.info/data/bikebuyers_original.csv')
    df.rename(columns={"Purchased Bike": "purch_bike"}, inplace=True)
    
    # bins = list(range(0, 80, 10)) + [120]
    bins = [20, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 120]
    labels = [f'{a0}-{a1 - 1}' for a0, a1 in zip(bins[:-2], bins[1:-1])] + [f'≥{bins[-2]}']
    df['AgeGroup'] = pd.cut(df.Age, bins=bins, labels=labels, right=False)
    
    sns.heatmap(pd.crosstab(df.AgeGroup, df.purch_bike), annot=True, fmt='d')
    plt.yticks(rotation=0)
    plt.show()
    

    回答来源:stackoverflow

    2020-03-23 20:26:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据展现:可视化报表及嵌入应用 立即下载
BigGraph:大规模在线图分析平台 立即下载
关系网络分析(I+) 立即下载