Python可视化:一文玩转Seaborn数据可视化

Seaborn是一个用Python制作统计图形的库。 它建立在matplotlib之上,并与pandas数据结构紧密集成,功能强大到无法想象。

本文主要使用一下几种函数绘图:

  1. displot:灵活绘制单变量观测分布
  2. boxplot:绘制箱型图
  3. countplot:使用条形显示每个分类箱中的观察计数
  4. jointplot:用双变量和单变量图绘制两个变量的图
  5. pairplot:绘制数据集中的成对关系
  6. relplot:绘制关系图
  7. scatterplot:绘制具有多个语义分组可能性的散点图
  8. regplot:线性回归模型拟合图
  9. catplot:绘制分类图
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

1.单变量分析

单变量分布可视化是通过将单变量数据进行统计从而实现画出概率分布的功能,同时概率分布有直方图与概率分布曲线两种形式。利用displot()对单变量分布画出直方图(可以取消),并自动进行概率分布的拟合(也可以使用参数取消)。

sns.set_style('darkgrid')
x = np.random.randn(200)
sns.distplot(x);

Python可视化:一文玩转Seaborn数据可视化_第1张图片

 

sns.distplot(x,hist = False);

Python可视化:一文玩转Seaborn数据可视化_第2张图片

#boxplot绘制单变量箱型图
tips = sns.load_dataset("tips")
ax = sns.boxplot(x=tips["total_bill"])

 Python可视化:一文玩转Seaborn数据可视化_第3张图片

#绘制数量统计图
titanic = sns.load_dataset("titanic")
ax = sns.countplot(x="class", data=titanic)

 Python可视化:一文玩转Seaborn数据可视化_第4张图片

2.双变量分布

双变量分布通俗来说就是分析两个变量的联合概率分布和每一个变量的分布。

import pandas as pd
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
sns.jointplot(x="x", y="y", data=df);

Python可视化:一文玩转Seaborn数据可视化_第5张图片

# 同样可以使用曲线来拟合分布密度
sns.jointplot(x="x", y="y", data=df, kind="kde");

Python可视化:一文玩转Seaborn数据可视化_第6张图片

我们可以将某一个想要观测的类别,按照指定字段分类统计总数分布:

ax = sns.countplot(x="class", hue="who", data=titanic)

Python可视化:一文玩转Seaborn数据可视化_第7张图片

3.数据集中成对双变量分析

对于数据集有多个变量的情况,如果每一对都要画出相关关系可能会比较麻烦,利用Seaborn可以很简单的画出数据集中每个变量之间的关系。

iris = sns.load_dataset("iris")
sns.pairplot(iris);    # 对角线化的是单变量的分布

Python可视化:一文玩转Seaborn数据可视化_第8张图片

 

4.双变量-三变量散点图

统计分析是了解数据集中的变量如何相互关联以及这些关系如何依赖于其他变量的过程,有时候在对数据集完全不了解的情况下,可以利用散点图和连线图对其进行可视化分析,这里主要用到的函数是relplot函数。

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", data=tips);

Python可视化:一文玩转Seaborn数据可视化_第9张图片

 

# 除了画出双变量的散点图外,还可以利用颜色来增加一个维度将点分离开
sns.relplot(x="total_bill", y="tip", hue="smoker", data=tips);

 

Python可视化:一文玩转Seaborn数据可视化_第10张图片

 

# 为了强调数据之间的差异性,除了颜色也可以使用图形的不同来分类数据点(颜色和形状互相独立)
sns.relplot(x="total_bill", y="tip", hue="smoker", style="smoker",data=tips);

Python可视化:一文玩转Seaborn数据可视化_第11张图片

也可用scatterplot方法实现同样的功能:

ax = sns.scatterplot(x="total_bill", y="tip", hue="smoker", style="smoker", data=tips)

Python可视化:一文玩转Seaborn数据可视化_第12张图片

但是scatterplot功能更加强大,可以通过修改style参数,实现更多参数同时显示效果:

#实现四个参数同时展示
ax = sns.scatterplot(x="total_bill", y="tip", hue="smoker", style="time", data=tips)

Python可视化:一文玩转Seaborn数据可视化_第13张图片

5.双变量-三变量连续图

为了进行数据分析,除了散点图,同样可以使用连续的线形来描述变化趋势。

df = pd.DataFrame(dict(time=np.arange(500),value=np.random.randn(500).cumsum()))
sns.relplot(x="time", y="value", kind="line", data=df);

 

Python可视化:一文玩转Seaborn数据可视化_第14张图片

# 可以选择不对x进行排序,仅仅需要修改sort参数即可
df = pd.DataFrame(np.random.randn(500, 2).cumsum(axis=0), columns=["x", "y"])
sns.relplot(x="x", y="y", sort=False, kind="line", data=df);

Python可视化:一文玩转Seaborn数据可视化_第15张图片

 

# 为了使线形更加的平滑可以使用聚合功能,表示对x变量的相同值进行多次测量,取平均,并取可信区间
fmri = sns.load_dataset("fmri")
plt.figure();
sns.relplot(x="timepoint", y="signal", kind="line", data=fmri);
plt.figure();
sns.relplot(x="timepoint", y="signal",estimator=None,kind="line", data=fmri);

 

Python可视化:一文玩转Seaborn数据可视化_第16张图片

Python可视化:一文玩转Seaborn数据可视化_第17张图片

 

# 同时也可以使用颜色来区别不同种类
sns.relplot(x="timepoint", y="signal", hue="event", kind="line", data=fmri);
# 也可以使用样式来区分,这里不加赘述

 

Python可视化:一文玩转Seaborn数据可视化_第18张图片

 

6.简单线性拟合

seaborn的目标是通过可视化快速简便地探索数据集,因为这样做比通过统计探索数据集更重要。用统计模型来估计两组噪声观察之间的简单关系可能会非常有用,因此就需要用简单的线性来可视化。

线性模型可视化

主要用regplot()进行画图,这个函数绘制两个变量的散点图,x和y,然后拟合回归模型并绘制得到的回归直线和该回归一个95%置信区间。

sns.set_style('darkgrid')
sns.regplot(x="total_bill", y="tip", data=tips);

 

Python可视化:一文玩转Seaborn数据可视化_第19张图片

拟合不同类型的模型

线性模型对某些数据可能适应不够好,可以使用高阶模型拟合。

anscombe = sns.load_dataset("anscombe")
sns.regplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),ci=None);

Python可视化:一文玩转Seaborn数据可视化_第20张图片

# 利用order2阶模型来拟合
sns.regplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),ci=None,order = 2);

Python可视化:一文玩转Seaborn数据可视化_第21张图片

# 如果数据中有明显错误的数据点可以进行删除
sns.regplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),ci=None);
plt.figure()
sns.regplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),ci=None,robust = True);

 

Python可视化:一文玩转Seaborn数据可视化_第22张图片

Python可视化:一文玩转Seaborn数据可视化_第23张图片

7.类型数据特殊绘图

我们之前学习了如何使用散点图和回归模型拟合来可视化两个变量之间的关系。但是,如果感兴趣的主要变量之一类别的,那该怎么办?在这种情况下,散点图和回归模型方法将不起作用,就需要利用专门的分类可视化函数进行拟合。

注:画图函数分为两种形式: 底层的类似于scatterplot(),swarmplot()来分别实现功能
高层的类似于catplot()通过修改参数来实现上面底层的功能

分类散点图

可以使用两种方法来画出不同数据的分类情况,第一种是每个类别分布在对应的横轴坐标上,而第二种是为了展示出数据密度的分布从而将数据产生少量随即抖动进行可视化的方法。

# 微小抖动来展示出数据分布
sns.catplot(x="day", y="total_bill", data=tips);

 

Python可视化:一文玩转Seaborn数据可视化_第24张图片

# 利用jitter来控制抖动大小或者是否抖动
sns.catplot(x="day", y="total_bill", jitter = False,data=tips);

 

Python可视化:一文玩转Seaborn数据可视化_第25张图片

# 同时可以使用swarm方法来使得图形分布均匀
sns.catplot(x="day", y="total_bill", kind="swarm", data=tips);

Python可视化:一文玩转Seaborn数据可视化_第26张图片

# 值得注意的是,与上面的scatter相同,catplot函数可以使用hue来添加一维,但是暂不支持style
sns.catplot(x="day", y="total_bill", hue="sex", kind="swarm", data=tips);

 

Python可视化:一文玩转Seaborn数据可视化_第27张图片

分类分布图

随着数据的增加,分类数据的离散图更为复杂,这时候需要对每类数据进行分布统计。这里同样使用高级函数catplot()。

# 箱线图
# 显示了分布的三个四分位数值以及极值
sns.catplot(x="day", y="total_bill", kind="box", data=tips);

Python可视化:一文玩转Seaborn数据可视化_第28张图片

#使用boxplot实现多维箱型图分析
ax = sns.boxplot(x="day", y="total_bill", data=tips)

Python可视化:一文玩转Seaborn数据可视化_第29张图片

# 同样可以使用hue来增加维度
sns.catplot(x="day", y="total_bill", hue="smoker", kind="box", data=tips);

Python可视化:一文玩转Seaborn数据可视化_第30张图片

# 小提琴图事实上是密度图和箱型图的结合
# 分别表示箱型图的含义和任意位置的概练密度
sns.catplot(x="day", y="total_bill", hue="time",kind="violin", data=tips);

Python可视化:一文玩转Seaborn数据可视化_第31张图片

 

分类估计图

如果我们更加关心类别之间的变化趋势,而不是每个类别内的分布情况,同样可以使用catplot来进行可视化。

# 条形图,利用bar来画出每个类别的平均值
# 黑色表示估计区间
titanic = sns.load_dataset("titanic")
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic);

Python可视化:一文玩转Seaborn数据可视化_第32张图片

 

# 如果更加关心的是类别的数量而不是统计数据的话可以使用count
sns.catplot(x="deck", kind="count", data=titanic);

Python可视化:一文玩转Seaborn数据可视化_第33张图片

 

参考文章:

https://zhuanlan.zhihu.com/p/40303932

https://seaborn.pydata.org/api.html

 

你可能感兴趣的:(数据分析,Seaborn,Python数据可视化)