{DAY 29} Seaborn

前言

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()

  1. 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可以很轻松的绘制

  2. .countplot()

    这个是用来计算各个类别变数的加总数量,比较类别的数量差距

    假如现在想知道不同性别在不同的教育程度上的数量差别

    fig,ax= plt.subplots(figsize=(15,5))
    sns.countplot(x='parental level of education',hue="gender",data=df,palette="Set3")
    

    上图可以很轻松地看出不同性别分别在不同教育程度上的统计数量差别

    1. catplot()

      则是另外一个万能的绘图函示

      通常後面会接kind=" ",引号内放置想要绘制的图表类型

      常见的有下面几种,想要更多类型的话可以去官网上查

      • "count"
      • "point"
      • "bar"
      • "swarm"
      • "box"
      • "violin"

      若是想接续『不同性别在不同的教育程度上的数量差别』

      但是想要让男生和女生的数据分别画在两张图上

      而且把午餐是否减免的变数加上去

      可以使用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查看参数的使用方法

这篇只有介绍类别变数

後面就会接续介绍数值变数的绘图


<<:  Day26-实作(列表区) (part1)

>>:  Day 26 - 建立自己的K线资料库 (上)

Swift纯Code之旅 Day29. 「新增闹钟功能(2) - 如何使用Delegate传值」

前言 昨天我们已经将资料打包完成了,离完成闹钟功能只差一点点了, 只要把资料回传到首页,就可以实现新...

开源的WebPC让你使用浏览器远程控制 linux or windows

WebPC 是我刚在 github 上开源(MIT)的一个远控工具,可以作爲 TeamViewer ...

Last Night in Soho线上

Last Night in Soho线上 《Soho区惊魂夜》是由埃德加·赖特执导,安雅·泰勒-乔伊...

Day 06:「爱排队的兔兔有红萝卜!」- Flex 与 Grid

昨天被讨薪水,今天还在躲 ... 唉, 所以今天就不收作业了。 (兔导今天回学校兼课,带即将毕业的...

ITHOME IRONMAN体验 Day 30-完赛心得

完赛心得 第13届的铁人赛30天的挑战终於结束了,从参赛至完赛的准备期大约用了二个月。 初期花了大於...