Seaborn 可视化

2023-10-26

Seaborn 可视化

1.简介

Seaborn是一个在Python中制作有吸引力和信息丰富的统计图形的库。它建立在matplotlib之上,并与PyData堆栈紧密集成,包括支持来自scipystatsmodels的numpypandas数据结构和统计例程。 Seaborn旨在将可视化作为探索和理解数据的核心部分。绘图函数对包含整个数据集的数据框和数组进行操作,并在内部执行必要的聚合和统计模型拟合以生成信息图。如果matplotlib“试图让事情变得简单容易和难以实现”,seaborn会试图使一套明确的方案让事情变得容易。 Seaborn可以认为是对matplotlib的补充,而不是它的替代品。在数据可视化方面能够很好的表现。

2. seaborn入门

2.1 单变量分布

%matplotlib inline
import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "distributions")))

2.1.1 灰度图

最方便快捷的方式~

# kde表示生成核密度估计
x = np.random.normal(size=100)
sns.distplot(x, kde=True)

png

更精细的刻画,调节bins,对数据更具体的做分桶操作。

sns.distplot(x, kde=True, bins=20)

png

使用rug生成实例:

sns.distplot(x, kde=False, bins=20, rug=True)

png

生成实例的好处:指导你设置合适的bins。

2.1.2 核密度估计

通过观测估计概率密度函数的形状。
有什么用呢?待定系数法求概率密度函数~

核密度估计的步骤:
* 每一个观测附近用一个正态分布曲线近似
* 叠加所有观测的正太分布曲线
* 归一化

在seaborn中怎么画呢?

sns.kdeplot(x)

png

bandwidth的概念:用于近似的正态分布曲线的宽度。

sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend()

png

2.1.3模型参数拟合

x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)

png

2.2 双变量分布

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

两个相关的正态分布~

2.2.1 散点图

sns.jointplot(x="x", y="y", data=df)

png

2.2.2 六角箱图

  • 在数据量很大的时候,用散点图来做可视化的时候效果不是很好,所以引入六角箱图做可视化。
x, y = np.random.multivariate_normal(mean, cov, 1000).T
with sns.axes_style("ticks"):
    sns.jointplot(x=x, y=y, kind="hex")

png

2.2.3 核密度估计

sns.jointplot(x="x", y="y", data=df, kind="kde")

png

f, ax = plt.subplots(figsize=(6, 6))
sns.kdeplot(df.x, df.y, ax=ax)
sns.rugplot(df.x, color="g", ax=ax)
sns.rugplot(df.y, vertical=True, ax=ax)

png

更炫酷的效果:

f, ax = plt.subplots(figsize=(6, 6))
cmap = sns.cubehelix_palette(as_cmap=True, dark=1, light=0)
sns.kdeplot(df.x, df.y, cmap=cmap, n_levels=60, shade=True)

png

先绘制图形图像,然后再往图中添加额外的效果。

g = sns.jointplot(x="x", y="y", data=df, kind="kde", color="m")
g.plot_joint(plt.scatter, c="w", s=30, linewidth=1, marker="+")
g.ax_joint.collections[0].set_alpha(0)
g.set_axis_labels("$X$", "$Y$")

png

2.3 数据集中的两两关系

2.3.1 散点图表示

iris = sns.load_dataset("iris")
iris.head()

sns.pairplot(iris)

png

2.3.2 灰度图表示

g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, cmap="Blues_d", n_levels=20)

png

3. 变量间的关系

  • 这个部分主要是lmplot函数的运用。
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")

3.1 绘制线性回归模型

3.1.1 连续的取值

最简单的方式:散点图 + 线性回归 + 95%置信区间

sns.lmplot(x="total_bill", y="tip", data=tips)

png

3.1.2 离散变量

  • 对于变量离线取值,散点图绘制出来的效果并不好,很难看出各个数据的分布。为了看清数据的分布,一下有两种方式进行处理。
sns.lmplot(x="size", y="tip", data=tips)

png

方法1:加个小的抖动

sns.lmplot(x="size", y="tip", data=tips, x_jitter=.08)

png

方法2:离散取值上用均值和置信区间代替散点,求出均值和方差并在图上表示

sns.lmplot(x="size", y="tip", data=tips, x_estimator=np.mean)

png

3.2 拟合不同模型

有些时候线性拟合效果不错,但有时数据的分布并不适合用线性方式拟合。

anscombe = sns.load_dataset("anscombe")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"), ci=None, scatter_kws={"s": 80})

png

如图,用线性拟合的方式效果不是很好

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"), ci=None, scatter_kws={"s": 80})

png

3.2.1 高阶拟合

  • 改用高阶拟合的方式:order = 2
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"), order=2, ci=None, scatter_kws={"s": 80})

png

3.2.2 异常值处理:

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"), robust=True, ci=None, scatter_kws={"s": 80})

png

3.2.3 二值变量拟合

  • 二值变量拟合:对于运用线性来拟合效果并不是很好,所以一下运用logistic的方式对二类进行分类。
tips["big_tip"] = (tips.tip / tips.total_bill) > .15
sns.lmplot(x="total_bill", y="big_tip", data=tips, y_jitter=.05)

png

sns.lmplot(x="total_bill", y="big_tip", data=tips, logistic=True, y_jitter=.03, ci=None)

png

3.2.3 残差曲线

sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'I'"), scatter_kws={"s": 80})

png

拟合的好,就是白噪声的分布 N(0,σ2) N ( 0 , σ 2 )
拟合的差,就能看出一些模式

sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'II'"), scatter_kws={"s": 80})

png

3.3 变量间的条件关系

# 指定hue参数
sns.lmplot(x="total_bill", y="tip", hue = "day", data=tips)

png

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"])

png

尝试增加更多的分类条件

# hue与col配合
sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips)

png

# hue、col与row一起使用
sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", row="sex", data=tips)

png

3.4 控制图片的大小和形状

  • 多个图在同一个区域显示,默认的方式显示的图片可能会很小,所以需要对图片的大小进行控制。
sns.lmplot(x="total_bill", y="tip", col="day", data=tips, col_wrap=2, size=5)

png

sns.lmplot(x="total_bill", y="tip", col="day", data=tips, aspect=0.5)

png

4. 分类数据的可视化分析

  • 观测点的直接展示:swarmplot, stripplot
  • 观测近似分布的展示:boxplot, violinplot
  • 均值和置信区间的展示:barplot, pointplot
%matplotlib inline
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(2017)
titanic = sns.load_dataset("titanic")
tips = sns.load_dataset("tips")
iris = sns.load_dataset("iris")
titanic
sns.barplot(x="sex", y="survived", hue="class", data=titanic)

png

4.1 分类散点图

当有一维数据是分类数据时,散点图成为了条带形状。

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

png

散点图绘制的时候很多点集中在一起,为了更清楚的表示,需要进行如下两种方法的操作。

法一:抖动。

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

png

法二:生成蜂群图,避免散点重叠

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

png

在每一个一级分类内部可能存在二级分类

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

png

4.2 分类分布图

4.2.1 箱图

上边缘、上四分位数、中位数、下四分位数、下边缘

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

png

4.2.2 提琴图

箱图 + KDE(Kernel Distribution Estimation)

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

png

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

png

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

png

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

png

非对称提琴图

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

png

4.3 分类统计估计图

4.3.1 统计柱状图

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

png

4.3.2 灰度柱状图

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

png

4.3.3 点图

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

png

修改颜色、标记、线型

sns.pointplot(x="class", y="survived", hue="sex", data=titanic,
              palette={"male": "g", "female": "m"},
              markers=["^", "o"], linestyles=["-", "--"])

png

4.4 分类子图

  • 通过调整factorplot的参数可以绘制出很多不同类型的图
sns.factorplot(x="day", y="total_bill", hue="smoker", col="time", data=tips, kind="swarm")

png

多分类标准的子图

g = sns.PairGrid(tips,
                 x_vars=["smoker", "time", "sex"],
                 y_vars=["total_bill", "tip"],
                 aspect=.75, size=3.5)
# 对网格中的每一个图做violinplot
g.map(sns.violinplot, palette="bright");

png

总结

通过seaborn对数据可视化可以看出数据的分布等情况。

更具体的代码这里

参考文献:

寒老师课件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Seaborn 可视化 的相关文章

随机推荐

  • AIX7.2系统安装openssh7.5

    目录 前言 备份当前版本的ssh文件 创建openssh安装包目录 进入目录解压 开始安装 前言 最开始对服务器做过一次安全检查 查出openssh的scp存在高危漏洞 于是就把包含scp服务的openssh client卸载了 后来再做安
  • VSCode 的 C/C++ 调试环境的 launch.json、 tasks.json 文件

    launch json Configuring tasks json for C C debugging author huihut repo https gist github com huihut 9548fe7e1084cf8e844
  • 在Bottle框架中返回静态文件和JSON对象的方法

    Bottle是一个轻量级的Python Web框架 提供了简单而灵活的方式来构建Web应用程序 在Bottle框架中 我们可以使用以下方法来返回静态文件和JSON对象 返回静态文件 要返回静态文件 我们可以使用static file函数 该
  • 交叉编译-18:解决arm-none-eabi-gcc交叉编译问题

    在项目中使用arm none eabi gcc交叉编译链编译程序时报错 checking host system type arm none eabi checking for a BSD compatible install usr bi
  • Docker进阶学习:其他命令以及扩展

    Docker Stack docker compose 单机部署项目 docker stack 集群部署 单机 docker compose up d wordpress yaml 集群 docker stack deploy wordpr
  • sqlserver 2012中实现字符串连接的新方法

    sqlserver 2012之前的版本 处理not null字符 DECLARE t1 varchar 10 a DECLARE t2 varchar 10 b DECLARE t3 varchar 10 c DECLARE t4 varc
  • 在线json解析工具 在线js解析加密混合工具

    https www sojson com json解析工具 js工具 https www jsjiami com tool
  • 风车IM即时通讯聊天系统源码_聊天APP_附APP_带安装教程

    风车IM即时通讯聊天系统源码 聊天APP 附APP 带安装教程 风车im 是一款独立服务器部署的即时通讯解决方案 可以帮助你快速拥有一套自己的移动社交 企业办公 多功能业务产品 独立部署 加密通道 牢牢掌握通讯信息 前端开发语言 VUE 安
  • kafka集群部署(最新版本kafka_2.13-3.1.0)

    集群环境 节点名 ip地址 OS版本 部署服务 broker信息 kafka01 192 168 96 10 CentOS Linux release 7 9 2009 Core jdk zookeeper kafka broker 0 k
  • Python字典及基本操作(超级详细)

    字典也是 Python 提供的一种常用的数据结构 它用于存放具有映射关系的数据 比如有份成绩表数据 语文 79 数学 80 英语 92 这组数据看上去像两个列表 但这两个列表的元素之间有一定的关联关系 如果单纯使用两个列表来保存这组数据 则
  • 一文教你懂得什么什么是EMC(电磁兼容)

    EMC 电磁兼容 是什么 EMC 电磁兼容 一直是电路设计和PCB设计中的难题 EMS是指设备在电磁环境中可以正常工作并且不对其它的设备造成干扰 EMS可以分为两部分 一个是EMI 电磁干扰 一个是EMS 电磁敏感度 EMI是设备本身对于其
  • qt for android存储文本文件到本地

    本博主要分享如何用qt for android 非qml形势存储文本文件到本地 本来以为很麻烦 后来发现和qt在window上使用是一样的 只是用手机存储excel应该要麻烦一些或者不行 但是我是用的是t xt文件 所以很容易就实现了这个功
  • 关于CATALINA_HOME 和 CATALINA_BASE 的区别

    官方文档 以下内容从官方复制出来的 目录和文件 这些是一些重要的tomcat目录 bin 启动 关闭和其他脚本 conf 配置文件和相关DTD 这里最重要的文件是server xml 它是容器的主要配置文件 logs 日志文件默认目录 we
  • 论文图片格式要求具体有哪些?

    经过多年发展 无论是论文发表还是各个院校 科研机构都已经形成了自身的科研系统 对论文格式都有了一些约定俗成的规矩 这也是我们在撰写论文时必须遵守的 尤其是刚接触论文写作的同学 经常只顾着研究论文的内容 对论文的格式问题根本没有重视 导致虽然
  • Android中切换到主线程执行的方法

    方法一 view post Runnable runnable 使用view对象 调用post方法即可在主线程中执行里边的代码 postDelayed是延时执行 也可以达到相同的效果 例如 textView post new Runnabl
  • chatgpt赋能Python-python_aorb

    Python a vs b 选择正确的Python版本 Python是一种流行的编程语言 广泛应用于数据分析 机器学习 Web开发和自动化等领域 在Python的发展历程中 出现了不同版本 其中最流行的是Python 2和Python 3
  • MySQL中int(M)和tinyint(M)数值类型中M值的意义

    MySQL中int M 和tinyint M 数值类型中M值的意义 mysql的基本数据类型里几个int如下 类型 大小 范围 有符号 范围 无符号 用途 TINYINT 1字节 128 127 0 255 小整数值 SMALLINT 2
  • rabbitMQ的生产与消费由Kettle实现

    文章目录 一 Kettle为什么可以读取流数据 二 rabbitMQ中启动MQTT插件并创建队列和路由键 三 Kettle实现rabbitMQ的生产与消费 Kettle是一款非常强大的ETL工具 不仅可以使用图形化界面 还可以处理各种数据
  • 解决网页无法复制粘贴(生活小妙招)

    事情缘由 今天在写学习通的作业的时候 发现答案不能复制粘贴 这种有答案 而无法复制粘贴的痛 谁又能懂呢 每当我们复制题目和粘贴答案的时候 就会跳出一个窗口 但是这种问题是难不倒一个学计算机的学生的 我们知道像这种复制粘贴的拦截都是通过JS脚
  • Seaborn 可视化

    Seaborn 可视化 1 简介 Seaborn是一个在Python中制作有吸引力和信息丰富的统计图形的库 它建立在matplotlib之上 并与PyData堆栈紧密集成 包括支持来自scipy和statsmodels的numpy和pand