前面的文章里,我们简单介绍了Seaborn的相关知识(Seaborn——让图表更美观、更智能),从本期开始,我将用10个案例来介绍10种Seaborn不同的图,这10种不同的图分别为:
- Barplot(柱状图)
- Countplots(计数图)
- Histograms(直方图)
- Catplots (Box, Violin, Swarm, Boxen)分类图表
- Multiple Plots using FacetGrid(使用FacetGrid的多个绘图)
- Joint Plots(联合图)
- KDE Plots(Kernel Density Estimate,核密度估计图)
- Pairplots(变量关系组图)
- Heatmaps(热力图)
- Scatter Plots(散点图)
本期,我们就先来介绍第一种Seaborn图,也是Seaborn最常用的图——Barplot(柱状图),我们采用的案例是titanic.csv(泰坦尼克号数据集)。具体链接我放在了如下网址:
通过百度网盘分享的文件:titanic.csv
链接:https://pan.baidu.com/s/1UtcWOhHON5pYs7hqHlPeow
提取码:6666
一、Barplot(柱状图)的基本介绍在Seaborn官方文档中,我们可以看到seaborn.barplot的基本参数为:
seaborn.barplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None, estimator='mean', errorbar=('ci', 95), n_boot=1000, seed=None, units=None, weights=None, orient=None, color=None, palette=None, saturation=0.75, fill=True, hue_norm=None, width=0.8, dodge='auto', gap=0, log_scale=None, native_scale=False, formatter=None, legend='auto', capsize=0, err_kws=None, ci=<deprecated>, errcolor=<deprecated>, errwidth=<deprecated>, ax=None, **kwargs)
其中,这里面参数很多,我挑主要的给大家介绍一下。
-
data:数据源,即你需要画图的数据来源,可以是
DataFrame, Series, dict, array, 或者list of arrays;
x, y, hue:
在数据集中的变量名
estimator:
用于对每个条形图高度进行估计的统计函数,默认为mean即平均值。
palette:
样式,可以为deep, muted, bright, pastel, dark, colorblind等
想要了解更多Barplot的功能可以参考官方文档:
seaborn.barplot — seaborn 0.13.2 documentation (pydata.org)
下面,我们通过一个具体的案例来具体学习一下Barplot的4个不同的图形。
二、Titanic数据集的Seaborn绘图
1. 导入数据集
import pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt # 设置中文字体plt.rcParams['font.family'] = 'SimHei' df=pd.read_csv('titanic.csv') df.head(10)
导入数据集,我们发现,这个数据集中共有15列,其中一些跟本文相关的字段解释分别为:
PassengerId:用户idsurvival:是否生还,0-否,1-是pclass:舱位,1-头等舱,2-二等,3-三等name:姓名sex:性别Age:年龄sibsp:在船上的兄弟/配偶数parch:在船上父母/孩子数ticket:票号fare:票价cabin:Cabin number;客舱号embarked:登船地点
2. 数据清洗
统计缺失值并补充相关缺失值
#缺失值统计df.isnull().sum()
发现,age一列中缺失了177个数据,这个我们用平均值来补充。deck(甲板)这一列缺失了688个数据,不重要,我们把整列删掉;embark_town(出发地点)中缺失了2个数据,我们用southampton来填充;embarked同样缺失了2个数据,我们用S来填充。
df["age"]=df["age"].fillna(df['age'].median())del df["deck"] df['embark_town']=df['embark_town'].fillna('Southampton')df['embarked']=df['embarked'].fillna('S') df.isnull().sum()
数据补充完整 。
3. Barplot作图
3.1 船上男女小孩平均年龄的barplot图形分析
我们对titanic号上人员年龄做个平均分析并作出相应的Seaborn图。
df['who'].unique()
array(['man', 'woman', 'child'], dtype=object),有三种类型:男人、女人、孩子。
#聚合并统计平均年龄df.groupby('who').agg({'age':'mean'})
# barplot绘图sns.barplot(data=df, x="who", y="age", estimator='mean', errorbar=None, palette='Blues')plt.title('船上人员的年龄分析')plt.xlabel('人员类型')plt.ylabel('平均年龄')
3.2 船上不同舱位等级的乘客平均年龄进行Barplot图形分析
#对class和sex进行聚合df.groupby(['class','sex']).agg({'age':'mean'})
Barplot绘制分组条形图
#绘制分组条形图sns.barplot(data=df, x='class', y='age', hue='sex', estimator='mean', errorbar=None, palette='plasma')plt.title('舱位等级的分组条形图')plt.xlabel('舱位等级')plt.ylabel('平均年龄')
分组条形图中,我们看到,我们使用了hue这个参数作为分组,这点是barplot与众不同的地方。
3.3 船上乘客不同等级舱位的平均票价Barplot图形分析
#聚合df.groupby('class').agg({"fare":'mean'})
# 水平的barplotsns.barplot(data=df, x="fare", y="class", estimator='mean', errorbar=None, palette='Blues')plt.title('平均票价的水平柱状图')plt.xlabel('平均票价')plt.ylabel('舱位类型')
这是个水平的barplot图,与3.1相比,这是最大的不同。
3.4 从不同城市出发的男性乘客占比的Barplot图形分析
#重新生成数据data = df.groupby('embark_town').agg({'who':'count','sex': lambda x: (x=='male').sum()}).reset_index()data.rename(columns={'who':'total', 'sex':'male'}, inplace=True)data.sort_values('total', inplace=True)data
# Barplot画出堆叠图sns.set_color_codes("colorblind")sns.barplot(x="total", y="embark_town", data=data, label="Total", color="b") # Plot the total crashes sns.set_color_codes("deep")sns.barplot(x="male", y="embark_town", data=data, label="Male", color="b",) # Plot the crashes where alcohol was involvedplt.title('从不同城市出发的乘客中男性比例')plt.xlabel('乘客数量')plt.ylabel('出发城市')plt.legend(loc='upper right')plt.show()
3.5 小结
从上面4副Barplot图中,我们可以简单的做如下总结:
- 从第一张图中,我们发现泰坦尼克号上男性和女性的平均年龄几乎在31-32岁左右,而儿童的平均年龄为6岁;
- 从第二张聚类条形图中,我们可以看到二等舱的乘客平均年龄大于三等舱的乘客。同样,头等舱的乘客年龄比二等舱的乘客大(男性和女性的趋势相似);
- 第三张水平图显示一等舱、二等舱和三等舱的平均票价之间的差异。一等舱平均票价是二等舱平均票价的4倍以上
- 第四张图显示大多数乘客从南安普敦出发。男性比例接近75%。
三、总结Seaborn的Barplot是一种用于比较不同类别数据的平均值或其它统计量的图表。它通过条形的高度来表示数值大小,非常适合于展示分类变量的分布情况或不同类别间的比较。比如:学生成绩、网站访问量统计、销售额统计等等,本文通过titanic数据集对Barplot的4种图形进行了归纳总结,感兴趣的朋友继续通过这个数据集来持续学习Barplot功能吧?