3. seaborn-可视化数据分布

在处理一组数据时,通常想做的第一件事就是了解变量的分布情况。这一章将简要介绍 seaborn 中用于检查单变量和双变量分布的一些工具。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats
import warningswarnings.filterwarnings('ignore')
sns.set(color_codes=True)

绘制单变量分布

seaborn中想要快速查看单变量分布的最方便的方法是使用distplot()函数。默认情况下,该方法将会绘制直方图histogram并拟合[内核密度估计] kernel density estimate (KDE).

x = np.random.normal(size=100)
sns.distplot(x)
<Axes: ylabel='Density'>

在这里插入图片描述

直方图

对于直方图我们可能很熟悉,而且matplotlib中已经存在hist函数。 直方图首先确定数据区间,然后观察数据落入这些区间中的数量来绘制柱形图以此来表征数据的分布情况。 为了说明这一点,让我们删除密度曲线并添加一个rug plot,它在每个观察值上画一个小的垂直刻度。您可以使用rugplot()函数来创建rugplot本身,但是也可以在distplot()中使用:

sns.distplot(x, kde=False, rug=True)
<Axes: >

在这里插入图片描述

在绘制柱状图时,您的主要选择是要使用的“桶”的数量和放置它们的位置。distplot()使用一个简单的规则来很好地猜测默认情况下正确的数字是多少,但是尝试更多或更少的“桶”可能会揭示数据中的其他特性:

sns.distplot(x, bins=20, kde=False, rug=True)
<Axes: >

在这里插入图片描述

核密度估计

可能你对核密度估计不太熟悉,但它可以是绘制分布形状的有力工具。和直方图一样,KDE 图沿另一个轴的高度,编码一个轴上的观测密度:

sns.distplot(x, hist=False, rug=True)
<Axes: ylabel='Density'>

在这里插入图片描述

我们可以看到,如果在seaborn中使用kdeplot()函数, 我们可以得到相同的曲线。这个函数也被distplot()所使用, 但是当您只想要密度估计时,它提供了一个更直接的接口,可以更容易地访问其他选项:

sns.kdeplot(x, shade=True)
<Axes: ylabel='Density'>

在这里插入图片描述

KDE的带宽(bw)参数控制估计与数据的拟合程度,就像直方图中的bin大小一样。 它对应于我们在上面绘制的内核的宽度。 默认行为尝试使用常用参考规则猜测一个好的值,但尝试更大或更小的值可能会有所帮助:

sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend()
<matplotlib.legend.Legend at 0x12ac30350>

在这里插入图片描述

正如您在上面所看到的,高斯KDE过程的本质意味着估计超出了数据集中最大和最小的值。有可能控制超过极值多远的曲线是由cut参数绘制的;然而,这只影响曲线的绘制方式,而不影响曲线的拟合方式:

sns.kdeplot(x, shade=True, cut=0)
sns.rugplot(x)
<Axes: ylabel='Density'>

在这里插入图片描述

拟合参数分布

还可以使用distplot()将参数分布拟合到数据集上,并直观地评估其与观测数据的对应程度:

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

在这里插入图片描述

绘制二元分布

它对于可视化两个变量的二元分布也很有用。在seaborn中,最简单的方法就是使用jointplot()函数,它创建了一个多面板图形,显示了两个变量之间的二元(或联合)关系,以及每个变量在单独轴上的一元(或边际)分布。

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

散点图

可视化二元分布最常见的方法是散点图,其中每个观察点都以xy值表示。 这类似于二维rug plot。 您可以使用matplotlibplt.scatter函数绘制散点图, 它也是jointplot()函数显示的默认类型的图:

sns.jointplot(x="x", y="y", data=df)
<seaborn.axisgrid.JointGrid at 0x12ae8b350>

在这里插入图片描述

六边形“桶”(Hexbin)图

类似于单变量的直方图,用于描绘二元变量关系的图称为 “hexbin” 图,因为它显示了落入六边形“桶”内的观察计数。 此图对于相对较大的数据集最有效。它可以通过调用 matplotlib中的plt.hexbin函数获得并且在jointplot()作为一种样式。当使用白色作为背景色时效果最佳。

x, y = np.random.multivariate_normal(mean, cov, 1000).T
with sns.axes_style("white"):sns.jointplot(x=x, y=y, kind="hex", color="k")

在这里插入图片描述

核密度估计

也可以使用上面描述的核密度估计过程来可视化二元分布。在seaborn中,这种图用等高线图表示, 在jointplot()中被当作一种样式:

sns.jointplot(x="x", y="y", data=df, kind="kde")
<seaborn.axisgrid.JointGrid at 0x12b3a6ad0>

在这里插入图片描述

如果希望更连续地显示双变量密度,可以简单地增加轮廓层的数量:

f, ax = plt.subplots(figsize=(6, 6))
cmap = sns.cubehelix_palette(as_cmap=True, dark=0, light=1, reverse=True)
sns.kdeplot(x=df.x, y=df.y, cmap=cmap, n_levels=60, shade=True)
<Axes: xlabel='x', ylabel='y'>

在这里插入图片描述

jointplot()函数使用JointGrid来管理图形。为了获得更大的灵活性,您可能想直接使用JointGrid来绘制图形。jointplot()在绘图后返回JointGrid对象,您可以使用它添加更多图层或调整可视化的其他方面:

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$")
<seaborn.axisgrid.JointGrid at 0x12b729b90>

在这里插入图片描述

可视化数据集中的成对关系

要在数据集中绘制多个成对的双变量分布,您可以使用pairplot()函数。 这将创建一个轴矩阵并显示DataFrame中每对列的关系,默认情况下,它还绘制对角轴上每个变量的单变量分布:

iris = sns.load_dataset("iris")
sns.pairplot(iris)
<seaborn.axisgrid.PairGrid at 0x12b6f8710>

在这里插入图片描述

jointplot()JointGrid之间的关系非常类似, pairplot()函数构建在PairGrid对象之上, 可以直接使用它来获得更大的灵活性:

g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, n_levels=6)
<seaborn.axisgrid.PairGrid at 0x12bdfd510>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】七夕祭

题目 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。 于是 TYVJ 今年举办了一次线下七夕祭。 Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕&#xff0c;于是他们决定去 TYVJ 七夕祭游玩。 TYVJ 七夕祭和 11 区的夏祭的形式很像。 矩形的祭典会场由 N 排 M 列共…

boost.hana学习笔记之map

Hana是C元编程的头文件库&#xff0c;适用于类型和值的计算。 它提供的功能是成熟的Boost.MPL和Boost.Fusion库提供的功能的超集。 通过利用C11/14实现技术和习惯用法&#xff0c;Hana拥有比以前的元编程库更快的编译时间和运行时性能&#xff0c;同时显着提高了过程中的表达能…

2024Flutter岗位面试题总结

StatelessWidget和StatefulWidget的区别是什么&#xff1f; StatelessWidget是一个不可变的类&#xff0c;充当UI布局中某些部分的蓝图&#xff0c;当某个组件在显示期间不需要改变&#xff0c;或者说没有状态&#xff08;State&#xff09;&#xff0c;你可以使用它。 Statef…

压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理

原理 变换的选择是一个关键的考量因素&#xff0c;它决定了数据是如何被压缩的。选择变换时考虑以下几个重要原则&#xff1a; 数据去关联性&#xff1a;变换的目的之一是减少数据中的相关性。例如&#xff0c;在图像压缩中&#xff0c;像素间往往高度相关。通过适当的变换&a…

git 使用场景 cherry-pick发生冲突时 ☞ 解决冲突/撤销cherry-pick

cherry-pick过程中代码冲突 cherry pick操作过程中发生代码冲突&#xff0c;Cherry pick会停下来&#xff0c;让用户决定如何继续操作# 解决冲突 1. 用户解决代码冲突 2. git add . 将修改的文件重新加入暂存区 3. git cherry-pick --continue 让 …

居中面试问题

前端常问居中面试问题 css文本居中 文本水平居中 <div class"father"><div class"child"><div> <div>子类元素为行内元素&#xff0c;则给父类元素定义text-align:center 如果子元素是块元素&#xff0c;则给子元素定义margin&…

美易官方《盘前:道指期货涨0.1% 美国12月CPI即将揭晓》

盘前&#xff1a;道指期货涨0.1% 美国12月CPI即将揭晓 随着市场对美国12月CPI数据的期待升温&#xff0c;道指期货在盘前微幅上涨0.1%。市场普遍预期该数据将显示通胀压力温和&#xff0c;这可能为美联储在接下来的货币政策会议上提供更多灵活性。在此背景下&#xff0c;投资者…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第十天-Linux下mplayer音乐播放器练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

内存溢出原因和解决办法

内存泄漏&#xff1a; 原因&#xff1a; 内存泄漏是由于程序中存在未正确释放内存的情况&#xff0c;导致内存不断累积&#xff0c;最终导致内存溢出。 解决方法&#xff1a; 使用内存泄漏检测工具&#xff08;如valgrind&#xff09;来检测和修复代码中的内存泄漏问题。 …

抖音百科怎么创建?头条百科的规则和技巧

在玩抖音的时候&#xff0c;不知道注意到抖音的搜索结果没有&#xff0c;有时候会去搜索框搜索一个品牌或人物名称&#xff0c;搜索框下面翻几下大概率就会出现百科词条&#xff0c;这个词条就是抖音百科。抖音的百科属于头条百科&#xff0c;因为这两个平台都属于字节跳动旗下…

钉钉逐浪AI Agent

文&#xff5c;郝 鑫 编&#xff5c;刘雨琦 “大公司代表落后生产力&#xff0c;是慢半拍的”&#xff0c;“小创新靠大厂&#xff0c;大创新仍然要靠小厂”&#xff0c;这是以李彦宏和王小川为代表的创业老炮&#xff0c;在2023年总结出来的创新规律&#xff0c;从移动互…

Pinsker’s inequality 与 Kullback-Leibler (KL) divergence / KL散度

文章目录 Pinsker’s inequalityKullback-Leibler (KL) divergenceKL散度在matlab中的计算 KL散度在隐蔽通信概率推导中的应用 Pinsker’s inequality Pinsker’s Inequality是信息论中的一个不等式&#xff0c;通常用于量化两个概率分布之间的差异。这个不等式是由苏联数学家…

批量查询顺丰快递信息:固乔快递查询助手的实用指南

随着电商和物流行业的飞速发展&#xff0c;对于物流信息的查询需求也日益增长。固乔快递查询助手是一款高效、便捷的软件&#xff0c;能够帮助用户批量查询顺丰快递信息&#xff0c;大大提高了物流信息的管理和查询效率。 一、下载安装 首先&#xff0c;用户需要从固乔科技网站…

【C】extern 关键字

目录 extern1&#xff09;基本概念2&#xff09;用法1&#xff1a;声明全局变量3&#xff09;用法2&#xff1a;声明函数4&#xff09;用法3&#xff1a;在头文件中使用 extern extern 1&#xff09;基本概念 extern 是C语言的一个关键字。 extern 用于声明在其他源文件中定…

统计学-R语言-2.1

文章目录 前言安装过程总结 前言 上篇文章介绍了统计学-R语言的介绍&#xff0c;本篇文章介绍如何安装R软件。 安装过程 可以登录官网&#xff0c;https://www.r-project.org/&#xff0c;点击此处跳转。 点进去下滑找到China,之后找任意一个链接地址进行下载即可。 我点的是…

【Harmony OS - 消息通知】

应用可以通过接口发送通知消息&#xff0c;提醒用户关注应用中的变化。用户可以在通知栏查看和操作通知内容&#xff0c;通常用于当应用处于后台时&#xff0c;发送&#xff0c;本文主要来介绍在Harmony OS中的三种消息通知。 基础通知 总体流程有三步&#xff1a; 导入noti…

确定了!软考中级「集成」、「监理」新版教程有哪些变化?

新版教程改了哪些内容&#xff1f;2024上半年软考应该如何备考&#xff1f; 准备考24年上集成的朋友们&#xff0c;先不要慌&#xff01;备考脚步不要乱&#xff0c;改版可能还是好事呢&#xff0c;难度可能会降点&#xff1f; 2024年教程改版科目&#xff1a; ✔软考中级-集…

ARM汇编指令

数据和指令类型 ARM采用的是32位架构 ARM约定: Byte&#xff1a;8 bits Halfword&#xff1a;16 bits (2 byte) Word&#xff1a;32 bits (4 byte) Doubleword&#xff1a;64-bits&#xff08;8byte&#xff09; &#xff08;Cortex-A处理器&#xff09; 大部分ARM core …

优化改进YOLOv5算法之Deformable Attention,效果秒杀CBAM和CA等

目录 1 Deformable Attention模块原理 2 YOLOv5中加入Deformable Attention模块 2.1 common.py文件配置 2.2 yolo.py配置

由于找不到msvcp140.dll无法继续执行代码原因及解决教程分享

在计算机打开软件过程&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到msvcp140.dll无法继续执行代码”。这个错误通常发生在使用Microsoft Visual C 2015或更高版本编译的程序运行时。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;为什么会…