我正在制作热图。给了我一个数据帧,现在比较值“ 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
每个范围内来自熊猫组的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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。