zoukankan      html  css  js  c++  java
  • seaborn分类数据可视化

    转载:https://cloud.tencent.com/developer/article/1178368

    seaborn针对分类型的数据有专门的可视化函数,这些函数可大致分为三种:

    • 分类数据散点图:swarmplot(), stripplot()
    • 分类数据的分布图: boxplot(), violinplot()
    • 分类数据的统计估算图 : barplot(), pointplot()
    import numpy as np
    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    sns.set(style="whitegrid", color_codes=True)
    np.random.seed(sum(map(ord, "categorical")))
    
    #下载三个数据集
    titanic = sns.load_dataset("titanic")
    tips = sns.load_dataset("tips") #panda DataFrame结构
    iris = sns.load_dataset("iris")
    #分类数据散点图:stripplot();x是分类特征day,y是目标变量,连续值 sns.stripplot(x="day",y="total_bill",data=tips)

     

    横坐标是分类数据,一些数据点上会互相重叠,不便于观察,一个简单的解决办法是加入 jitter 参数,调整横坐标位置:

    sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)

     

    #分类数据散点图:swarmplot(),这个函数的好处就是所有的点都不会重叠,这样可以很清晰的观察到数据的分布
    sns.swarmplot(x="day", y="total_bill", data=tips)

     

    通过 hue 参数加入另一个嵌套的分类变量,而且嵌套的分类变量可以以不同的颜色区别

    sns.swarmplot(x="day", y="total_bill", hue="sex", data=tips)

    seaborn 会尝试推断出分类变量的顺序。数据是 pandas 的分类数据类型,那么就是使用默认的分类数据顺序,如果是其他的数据类型,字符串类型的类别将按照它们在DataFrame中显示的顺序进行绘制,但是数组类别将被排序:

    sns.swarmplot(x="size", y="total_bill", data=tips)

     

    将分类变量放在垂直轴上是非常有用的(当类别名称相对较长或有很多类别),可以使用 orient 关键字强制定向,但通常可以互换x和y的变量的数据类型来完成:

    sns.swarmplot(x="total_bill", y="day", hue="time", data=tips)

     

    分类数据分布图:

    箱型图:箱型图可以直观观察到数据的四分位分布(1/4分位,中位数,3/4分位,以及四分位距),这种可视化对于在机器学习的预处理阶段(尤其是发现数据异常离散值)十分有效。

    sns.boxplot(x="day", y="total_bill", hue="time", data=tips)

     

      使用 hue 参数的假设是这个变量嵌套在x或者y轴内。所以默认的情况下,hue 变量的不同类型值会保持偏置状态(两类或几类数据共同在x轴数据类型的一个类中),就像上面那个图所示。但是如果 hue 所使用的变量不是嵌套的,那么你可以使用 dodge 参数来禁止这个默认的偏置状态。

    tips["weekend"] = tips["day"].isin(["Sat", "Sun"])
    sns.boxplot(x="day", y="total_bill", hue="weekend", data=tips, dodge=False)

    提琴图:它结合了箱体图和分布教程中描述的核心密度估计过程

    sns.violinplot(x="total_bill", y="day", hue="time", data=tips)

    这种方法使用核密度估计来更好地描述值的分布。此外,小提琴内还显示了箱体四分位数和四分位距。由于小提琴使用KDE,还有一些其他可以调整的参数,相对于简单的boxplot增加了一些复杂性:

    sns.violinplot(x="total_bill", y="day", hue="time", data=tips, bw=.1, scale="count", scale_hue=False)

    当 hue 的嵌套类型只有两类的时候,也可以使用 split 参数将小提琴分割:

    sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True)

    可以在提琴图内使用 inner 参数以横线的形式来展示每个观察点的分布,来代替箱型的整体分布:

    sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True, inner="stick", palette="Set3")

    可以将 swarmplot(),violinplot(),或 boxplot() 混合使用,这样可以结合多种绘图的特点展示更完美的效果:

    sns.violinplot(x="day", y="total_bill", data=tips, inner=None)
    sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5)

    分类数据统计估计图:展示每一类的集中趋势

      Seaborn中 barplot() 函数会在整个数据集上显示估计,默认情况下使用均值进行估计。 当在每个类别中有多个类别时(使用了 hue),它可以使用引导来计算估计的置信区间,并使用误差条来表示置信区间:

    sns.barplot(x="sex", y="survived", hue="class", data=titanic)

    条形图的特殊情况是当想要显示每个类别的数量,而不是计算统计量,使用 countplot() 函数:

    sns.countplot(x="deck", data=titanic, palette="Greens_d")

    更多内容见:

    seaborn_1

    seaborn_2

    seaborn_3

    seaborn_4 

  • 相关阅读:
    一个基于STM32F429 HAL库的学习工程模板
    STM32F4 SPI 学习笔记
    STM32 相同头文件名称的路径问题
    STM32F429基于CUBEMX的串口中断接收
    STM32F429 使用ESP8266通讯心得
    Zabbix 配置通过sendEmail发送邮件报警
    CentOS 7 下安装Zabbix 3.0
    centOS 6.5下Zabbix RPM安装
    Java安装和配置(jdk)
    centos7.2 系统基础优化
  • 原文地址:https://www.cnblogs.com/wzdLY/p/9703943.html
Copyright © 2011-2022 走看看