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 

  • 相关阅读:
    【Elasticsearch 技术分享】—— ES 常用名词及结构
    【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?
    除了读写锁,JUC 下面还有个 StampedLock!还不过来了解一下么?
    小伙伴想写个 IDEA 插件么?这些 API 了解一下!
    部署Microsoft.ReportViewe
    关于TFS强制undo他人check out
    几段查看数据库表占用硬盘空间的tsql
    How to perform validation on sumbit only
    TFS 2012 Disable Multiple Check-out
    在Chrome Console中加载jQuery
  • 原文地址:https://www.cnblogs.com/wzdLY/p/9703943.html
Copyright © 2011-2022 走看看