Seaborn是比matplotlib功能更强大的绘图套件
是建立在matplotlib的基础之上
主要用来和matplolib搭配使用
这篇的内容专注在类别变数的视觉化
学习的来源是seaborn的官网
User guide and tutorial - seaborn 0.11.2 documentation
章节的安排也是按照里面的tutorial安排
tutorial里面教的很详细
所以我决定用里面教的方法搭配实际数据练习
而数据的部分我则是会依照要分析的数据种类
从kaggle上找到适合的资料库进行分析
Kaggle: Your Machine Learning and Data Science Community
这里也是沿用前面关於学生成绩的数据
在使用前先引入要使用的套件
引入seaborn
使用import seaborn as sns
并且设定图片的样式:sns.set(style="white")
指定要使用白色网格的样式
import seaborn as sns
sns.set(style="white")
接下来引入其他要用到的套件
跟读取资料进来
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("StudentsPerformance.csv")
df.head()
barplot.()
依照类别变数绘图,在default 的情况下是采用各类别的数值平均值
现在假设要看出不同教育程度的数学成绩差异
barplot.()
里常见的参数有
x,y
: 比较的类别和数据ax
: 是否有指定子图data
:使用哪个资料palette
: 调色盘,改变default的配色,我个人蛮喜欢的配色有"Set3","Set2","Paired"#先创建画布和子图
fig = plt.figure(figsize=(25,5))
ax1=fig.add_subplot(121)
# 利用.barplot()作图
sns.barplot(ax=ax1, x='parental level of education',y='math score',data=df,palette="Set3")
若是现在想要再更细分,可以使用hue
增加分类的依据
如果我想再加上性别这个变量:hue="gender"
fig = plt.figure(figsize=(25,5))
ax1=fig.add_subplot(121)
sns.barplot(ax=ax1, x='parental level of education',y='math score',hue="gender",data=df,palette="Set3")
在上篇matplotlib试过利用"'parental level of education'"分组,但是那时候需要经过复杂的.groupby()
跟.dropna()
在seaborn里可以省去这些繁杂的步骤
现在来看不同教育程度在数学成绩的平均值上的分布
fig,ax= plt.subplots(figsize=(10,5))
sns.barplot(ax=ax, x='parental level of education',y="math score",data=df,palette="Set2")
现在还可以利用hue=()
加上其他的比较依据
假如要比较不同组别
fig,ax= plt.subplots(figsize=(20,5))
sns.barplot(ax=ax, x='parental level of education',y='math score',hue="race/ethnicity",data=df,palette="Set3")
可以看到原本类别变数在matplotlib需要经过很多资料的处理才有办法画出图
在seaborn可以很轻松的绘制
.countplot()
这个是用来计算各个类别变数的加总数量,比较类别的数量差距
假如现在想知道不同性别在不同的教育程度上的数量差别
fig,ax= plt.subplots(figsize=(15,5))
sns.countplot(x='parental level of education',hue="gender",data=df,palette="Set3")
上图可以很轻松地看出不同性别分别在不同教育程度上的统计数量差别
catplot()
则是另外一个万能的绘图函示
通常後面会接kind=" "
,引号内放置想要绘制的图表类型
常见的有下面几种,想要更多类型的话可以去官网上查
若是想接续『不同性别在不同的教育程度上的数量差别』
但是想要让男生和女生的数据分别画在两张图上
而且把午餐是否减免的变数
加上去
可以使用col=" "
引号内放上想要分开的类别
sns.catplot(x='parental level of education', hue="gender", col="lunch", data=df, kind="count",height=4, aspect=2,palette="Paired")
利用height
,aspect
调整版面的配置
用短短几个参数就可以根据不同的类别下去绘图看出其中的差别
catplot(kind="box")
练习绘制不同教育程度在数学成绩分布上的box plot
sns.catplot(x="parental level of education", y="math score", kind="box", data=df,height=8,palette="Set3" )
catplot(kind="swarm")
sns.catplot(x="parental level of education", y="reading score", kind="swarm", height=8, data=df)
Seaborn可以节省大量在处理资料分类上的时间
但是每个函式的使用上
参数都不太一样
所以在使用前可以先用shift+tab查看参数的使用方法
这篇只有介绍类别变数
後面就会接续介绍数值变数的绘图
前言 昨天我们已经将资料打包完成了,离完成闹钟功能只差一点点了, 只要把资料回传到首页,就可以实现新...
WebPC 是我刚在 github 上开源(MIT)的一个远控工具,可以作爲 TeamViewer ...
Last Night in Soho线上 《Soho区惊魂夜》是由埃德加·赖特执导,安雅·泰勒-乔伊...
昨天被讨薪水,今天还在躲 ... 唉, 所以今天就不收作业了。 (兔导今天回学校兼课,带即将毕业的...
完赛心得 第13届的铁人赛30天的挑战终於结束了,从参赛至完赛的准备期大约用了二个月。 初期花了大於...