详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图

文章目录

  • catplot(): 用分类型数据(categorical data)绘图
  • 一、分类散点图
  • “分类坐标轴”
    • 1.catplot(kind="strip")默认
    • 2、蜂群图:catplot(kind="swarm")
    • hue参数:利用不同颜色区分
    • order参数:指定分类值顺序
    • 有些时候把分类变量放在垂直坐标轴上会更有帮助(尤其是当分类名称较长或者分类较多时)
  • 二、分类分布图
    • 1.箱线图:catplot(kind="box")
    • box的进阶:catplot(kind="boxen")
    • 2.小提琴图:catplot(kind="violin")
      • 参数split=Ture
  • 三、分类统计估计图
    • 1.条形图:catplot(kind="bar")
    • 2、catplot(kind="count"):展示每个分类下观测值的数量
  • 使用子图展示多重关系

catplot(): 用分类型数据(categorical data)绘图

在关系图教程中,我们了解了如何使用不同的可视化表示来显示数据集中多个变量之间的关系。在这些例子中,我们关注的主要关系是两个数值变量之间的情况。如果其中一个主要变量是“分类”(分为不同的组),那么使用更专业的可视化方法可能会有所帮助。

  • 下面所有函数的最高级别的整合接口:catplot()

  • Categorical scatterplots:

    • stripplot() (with kind=“strip”; the default)
    • swarmplot() (with kind=“swarm”)
  • Categorical distribution plots:

    • boxplot() (with kind=“box”)
    • violinplot() (with kind=“violin”)
    • boxenplot() (with kind=“boxen”)
  • Categorical estimate plots:

    • pointplot() (with kind=“point”)
    • barplot() (with kind=“bar”)
    • countplot() (with kind=“count”)
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(style="ticks", color_codes=True)

一、分类散点图

“分类坐标轴”

1.catplot(kind=“strip”)默认

tips= sns.load_dataset("tips")
print(tips.head())
print(tips.dtypes)
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4
total_bill     float64
tip            float64
sex           category
smoker        category
day           category
time          category
size             int64
dtype: object

当在同一个类别中出现大量取值相同或接近的观测数据时,他们会挤到一起。seaborn中有两种分类散点图,分别以不同的方式处理了这个问题。
catplot()使用的默认方式是stripplot(),它给这些散点增加了一些随机的偏移量,更容易观察:

sns.catplot(x="day", y="total_bill", data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第1张图片

jitter参数控制着偏移量的大小,或者我们可以直接禁止他们偏移:

sns.catplot(x="day", y="tip", jitter=False,data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第2张图片

2、蜂群图:catplot(kind=“swarm”)

相当于swarmplot()
避免了散点之间的重合,提供更好的方式来呈现观测点的分布。
但仅适用于较小的数据集。

sns.catplot(kind="swarm", x="day", y="tip", data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第3张图片

hue参数:利用不同颜色区分

与关系图类似,也可以通过hue来增加一个维度。BUT分类图不支持size和style

sns.catplot(kind="swarm", x="day", y="tip", hue="sex", data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第4张图片

关于x(分类型数据)轴的分类值的顺序,函数会自己推断。
如果数据是pandas的Categorical类型,那么默认的分类顺序可以在pandas中设置;
如果数据看起来是数值型的(比如1,2,3…),那他们也会被排序。
即使我们使用数字作为不同分类的标签,它们仍然是被当做分类型数据按顺序绘制在分类变量对应的坐标轴上的:

# 注意,2和4之间的距离与1和2之间的距离是一样的,它们是不同的分类,只会排序,但是并不会改变它们在坐标轴上的距离
sns.catplot(x="size", y="tip", kind="swarm", data=tips.query("size!=3"))

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第5张图片

order参数:指定分类值顺序

sns.catplot(kind="swarm",x="size", y="tip", order=[6,5,4,3,2,1],data=tips.query("size!=3"))

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第6张图片

sns.catplot(kind="swarm", x="smoker",y="tip", order=["No","Yes"], data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第7张图片

有些时候把分类变量放在垂直坐标轴上会更有帮助(尤其是当分类名称较长或者分类较多时)

只需要交换x和y分配的变量即可:

sns.catplot(x="total_bill", y="day", hue="time", kind="swarm", data=tips);

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第8张图片

二、分类分布图

当数据量越来越大时,散点图在表现不同分类的观测值的分布信息就越来越捉襟见肘了。
此时,有其他的方式:

  • 箱线图:catplot(kind=“box”)
  • 小提琴图:catplot(kind=“violin”)

1.箱线图:catplot(kind=“box”)

展现了:离群点、上界、上四分位数、均值、中位数、下四分位数、下界、离群点

sns.catplot(kind="box", x="day", y="total_bill", data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第9张图片

增加一个维度的信息:

sns.catplot(kind="box", x="day", y="total_bill", hue="smoker", data=tips)#增加一个维度的信息

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第10张图片

上面的图中,默认了hue参数对应的变量smoker与坐标轴上的分类变量day是相互嵌套的(如,周四吸烟、周四不吸烟),这种操作叫**“dodging”**。
如果不是这种情形,应该禁用dodging,看下面的例子:
hue的Weekend和day不是相互嵌套的:

× 错误的图:

tips["Weekend"]= tips["day"].isin(["Sat","Sun"])
sns.catplot(kind="box", x="day", y="total_bill", hue="Weekend", data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第11张图片

√ 正确的图(禁用dodge,dodge=False):

sns.catplot(kind="box", x="day", y="total_bill", hue="Weekend",dodge=False, data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第12张图片

box的进阶:catplot(kind=“boxen”)

与箱线图相似但是能展示更多关于数据分布形状的信息,它对大数据更加友好

sns.catplot(kind="boxen", x="day", y="total_bill", data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第13张图片

2.小提琴图:catplot(kind=“violin”)

它将箱线图和核密度估计(kde: kernel density estimation)结合起来

sns.catplot(kind="violin", y="day", x="total_bill",hue="time", data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第14张图片

参数split=Ture

当一个额外的分类变量仅有2个水平时,我们也可以将它赋给hue参数,并且设置split=True,这样我们可以更加充分地利用空间来表达更多信息:

sns.catplot(kind="violin", y="day", x="total_bill",hue="time",split=True, data=tips)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第15张图片

三、分类统计估计图

在某些应用场景中,相对于展示每类的分布情况,更像展示每类的数据的集中趋势估计(统计量,如均值、中位数、方差等)。
有以下方式:

  • 条形图:catplot(kind=“bar”)
  • 直方图:catplot(kind=“count”)
  • 点图:catplot(kind=“point”)

1.条形图:catplot(kind=“bar”)

在seaborn中,barplot()函数在整个数据集上运行,并且应用一个函数来获得那些统计量(默认为均值)。当每个分类中有多个观测值时,它还可以通过自助采样法计算出一个置信区间,并且通过误差棒的方式绘制出来。

titanic = sns.load_dataset("titanic")
print(len(titanic))
titanic.head()
survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone
0 0 3 male 22.0 1 0 7.2500 S Third man True NaN Southampton no False
1 1 1 female 38.0 1 0 71.2833 C First woman False C Cherbourg yes False
2 1 3 female 26.0 0 0 7.9250 S Third woman False NaN Southampton yes True
3 1 1 female 35.0 1 0 53.1000 S First woman False C Southampton yes False
4 0 3 male 35.0 0 0 8.0500 S Third man True NaN Southampton no True
sns.catplot(kind="bar", x="sex", y="survived", hue="class", data=titanic)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第16张图片

可以清晰明了地看出来:
女性幸存者高于男性;
舱级高的幸存者高于舱级低的。

2、catplot(kind=“count”):展示每个分类下观测值的数量

“属于分类变量而非连续变量的直方图”

想要展示每个分类下观测值(样本)的数量而非统计量。这就像是“属于分类变量而非连续变量的直方图”。

仅给一个轴哦(要水平方向画就x:你的分类变量;垂直方向就y:你的分类变量),另一个轴默认为count了:

如,展示买各个class票的人数:

sns.catplot(kind="count", x="class",data=titanic)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第17张图片

sns.catplot(kind="count", x="class", hue="alive",data=titanic)

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第18张图片

#也可以将连续型变量当成分类型变量
sns.catplot(kind="count", y="size",data=tips,color='c')

详细的数据可视化库之Seaborn教程(二)——catplot:分类型数据作坐标轴画图_第19张图片

使用子图展示多重关系

仍然是参数row、col

你可能感兴趣的:(python数据分析,catplot,分类型数据,可视化)