绘制熊猫 DataframeGroupbySeries 的 HIST
Posted
技术标签:
【中文标题】绘制熊猫 DataframeGroupbySeries 的 HIST【英文标题】:Plot HIST of a pandas DataframeGroupbySeries 【发布时间】:2021-10-31 03:18:42 【问题描述】:我正在使用 codecademy: data 处理一个小型数据框
我正在尝试打印数据以使用以下代码进行小分析:
data = pd.read_csv('insurance.csv')
age sex bmi children smoker region charges
0 19 female 27.900 0 yes southwest 16884.92400
1 18 male 33.770 1 no southeast 1725.55230
2 28 male 33.000 3 no southeast 4449.46200
3 33 male 22.705 0 no northwest 21984.47061
4 32 male 28.880 0 no northwest 3866.85520
data.groupby('sex').region.hist()
代码返回一个熊猫系列,其中第一个元素是 subplot1,第二个是 subplot2。
代码将它们绘制在同一个图上,我无法分别绘制它们。
【问题讨论】:
【参考方案1】: 要根据性别为每列生成直方图:'children'
和 'smoker'
看起来不同,因为数字是离散的,分别只有 6 个和 2 个唯一值。
单独data.groupby('sex').hist(layout=(1, 4), figsize=(12, 4), ec='k', grid=False)
将生成图表,但没有简单的方法来添加标题。
生成正确的可视化效果通常涉及为绘图 API 重塑数据。
在python 3.8.11
、pandas 1.3.2
、matplotlib 3.4.2
、seaborn 0.11.2
中测试
import pandas as pd
# load data
data = pd.read_csv('insurance.csv')
# convert smoker from a string to int value; hist doesn't work on object type columns
data.smoker = data.smoker.map('no': 0, 'yes': 1)
# group each column by sex; data.groupby(['sex', 'region']) is also an option
for gender, df in data.groupby('sex'):
# plot a hist for each column
axes = df.hist(layout=(1, 5), figsize=(15, 4), ec='k', grid=False)
# extract the figure object from the array of axes
fig = axes[0][0].get_figure()
# add the gender as the title
fig.suptitle(gender)
关于 OP 中的data.groupby('sex').region.hist()
,这是一个计数图,显示了每个区域的性别计数;它不是直方图。
pandas.crosstab
默认计算因子的频率表
ax = pd.crosstab(data.region, data.sex).plot(kind='bar', rot=0)
ax.legend(title='gender', bbox_to_anchor=(1, 1.02), loc='upper left')
使用seaborn.displot
这需要将数据从宽格式转换为长格式,这是通过pandas.DataFrame.melt
完成的
import pandas as pd
import seaborn as sns
data = pd.read_csv('insurance.csv')
data.smoker = data.smoker.map('no': 0, 'yes': 1)
# convert the dataframe from a wide to long form
df = data.melt(id_vars=['sex', 'region'])
# plot
p = sns.displot(data=df, kind='hist', x='value', col='variable', row='region', hue='sex',
multiple='dodge', common_bins=False, facet_kws='sharey': False, 'sharex': False)
【讨论】:
以上是关于绘制熊猫 DataframeGroupbySeries 的 HIST的主要内容,如果未能解决你的问题,请参考以下文章