1. seaborn-可视化统计关系

统计分析是了解数据集中的变量如何相互关联以及这些关系如何依赖于其他变量的过程。可视化是此过程的核心组件,这是因为当数据被恰当地可视化时,人的视觉系统可以看到指示关系的趋势和模式。

这里介绍三个seaborn函数。我们最常用的是relplot()。这是一个figure-level的函数,可以用散点图和线图两种通用的方法来可视化统计关系。relplot()FacetGrid与两个axes-level函数组合在一起:

  • scatterplot() (kind="scatter";默认值)
  • lineplot() (kind="line")
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

warnings.filterwarnings("ignore")
sns.set_theme(style="darkgrid")

pd.show_versions()
INSTALLED VERSIONS
------------------
commit              : a671b5a8bf5dd13fb19f0e88edc679bc9e15c673
python              : 3.11.5.final.0
python-bits         : 64
OS                  : Darwin
OS-release          : 22.6.0
Version             : Darwin Kernel Version 22.6.0: Tue Nov  7 21:48:06 PST 2023; root:xnu-8796.141.3.702.9~2/RELEASE_X86_64
machine             : x86_64
processor           : i386
byteorder           : little
LC_ALL              : None
LANG                : zh_CN.UTF-8
LOCALE              : zh_CN.UTF-8

pandas              : 2.1.4
numpy               : 1.24.3
pytz                : 2023.3.post1
dateutil            : 2.8.2
setuptools          : 68.2.2
pip                 : 23.3.1
Cython              : None
pytest              : 7.4.0
hypothesis          : None
sphinx              : 5.0.2
blosc               : None
feather             : None
xlsxwriter          : None
lxml.etree          : 4.9.3
html5lib            : None
pymysql             : None
psycopg2            : None
jinja2              : 3.1.2
IPython             : 8.15.0
pandas_datareader   : None
bs4                 : 4.12.2
bottleneck          : 1.3.5
dataframe-api-compat: None
fastparquet         : None
fsspec              : 2023.10.0
gcsfs               : None
matplotlib          : 3.8.0
numba               : 0.58.1
numexpr             : 2.8.7
odfpy               : None
openpyxl            : 3.0.10
pandas_gbq          : None
pyarrow             : 11.0.0
pyreadstat          : None
pyxlsb              : None
s3fs                : 2023.10.0
scipy               : 1.11.4
sqlalchemy          : 2.0.21
tables              : 3.8.0
tabulate            : 0.9.0
xarray              : 2023.6.0
xlrd                : None
zstandard           : 0.19.0
tzdata              : 2023.3
qtpy                : 2.4.1
pyqt5               : None

用散点图关联变量

散点图是数据可视化的支柱,它通过点云描绘了两个变量的联合分布,其中每个点代表数据集中的一个观测值。这种描述能够使我们通过视觉推断出许多信息,他们之间是否存在任何有意义的关系。

seaborn中有多种方式绘制散点图。当两个变量的是数值型时,最基本的是函数scatterplot()scatterplot()relplot()kind的默认类型(也可以通过kind="scatter"来设置):

tips = sns.load_dataset('tips')
tips.head()
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
sns.relplot(x='total_bill', y='tip', data=tips)
<seaborn.axisgrid.FacetGrid at 0x137708ed0>

在这里插入图片描述

虽然这些点是以二维绘制的,但可以通过根据第三个变量对点进行着色来将另一个维度添加到绘图中。在 seaborn 中,这被称为使用“色调语义”,因为该点的颜色获得了意义:

sns.relplot(x='total_bill', y='tip', hue='smoker', data=tips)
<seaborn.axisgrid.FacetGrid at 0x13789be90>

在这里插入图片描述

为了强调类别之间的差异并提高可访问性,可以为每个类别使用不同的标记样式:

sns.relplot(x='total_bill', y='tip', hue='smoker', style='smoker', data=tips)
<seaborn.axisgrid.FacetGrid at 0x141860d10>

在这里插入图片描述

也可以通过单独改变每个点的色调和样式来表示四个变量。但是这应该谨慎,因为眼睛对形状的敏感度远低于对颜色的敏感度:

sns.relplot(x='total_bill', y='tip', hue='smoker', style='time', data=tips)
<seaborn.axisgrid.FacetGrid at 0x141908910>

在这里插入图片描述

在上面的例子中,色调语义表示类别,所以使用了默认的定性调色板。如果色调语义表示数值(特别是,如果它可以转换为浮点数),默认的颜色切换到顺序调色板:

sns.relplot(x='total_bill', y='tip', hue='size', data=tips)
<seaborn.axisgrid.FacetGrid at 0x1419f31d0>

在这里插入图片描述

在这两种情况下,您都可以自定义调色板,有多种方式可以实现。在这里,我们使用cubehelix_palette()的字符串接口自定义一个顺序调色板:

sns.relplot(x='total_bill', y='tip', hue='size', palette='ch:r=-0.5, l=0.75',data=tips)
<seaborn.axisgrid.FacetGrid at 0x1419db650>

在这里插入图片描述

第三个语义变量改变每个点的大小:

sns.relplot(x='total_bill', y='tip', size='size', data=tips)
<seaborn.axisgrid.FacetGrid at 0x141a38850>

在这里插入图片描述

matplotlib.pyplot.scatter()不同,变量的值不用于直接决定点的面积。数据单位中的值范围被规范化为面积单位的范围,这个范围可以自定义:

sns.relplot(x='total_bill', y='tip', size='size', sizes=(15, 200), data=tips)
<seaborn.axisgrid.FacetGrid at 0x141bc04d0>

在这里插入图片描述

强调线图的连续性

散点图是非常有效的,但是没有通用的最优可视化类型。相反,可视表示应该适应数据集的细节以及你试图用图表回答的问题。

对于某些数据集,你可能希望了解一个变量中的变化关于时间的函数,或者类似的连续变量。在这种情况下,一个很好的选择是绘制线图。在seaborn中,这可以通过lineplot()函数直接实现,也可以通过设置relplot()参数kind='line'来实现。

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

在这里插入图片描述

聚合表示不确定性

更复杂的数据集将对x变量的相同值有多个观测值。seaborn的默认行为是通过绘制平均值及95%的置信区间,在每个x周围聚合多个测量值:

fmri = sns.load_dataset('fmri')
fmri.head()
subjecttimepointeventregionsignal
0s1318stimparietal-0.017552
1s514stimparietal-0.080883
2s1218stimparietal-0.081033
3s1118stimparietal-0.046134
4s1018stimparietal-0.037970
sns.relplot(x='timepoint', y='signal', kind='line', data=fmri)
<seaborn.axisgrid.FacetGrid at 0x130a266d0>

在这里插入图片描述

置信区间是使用bootstrapping计算的,对于较大的数据集,它可能是时间密集型的。因此,可以禁用它们:

sns.relplot(x='timepoint', y='signal', kind='line', ci=None, data=fmri)
<seaborn.axisgrid.FacetGrid at 0x130a7d490>

在这里插入图片描述

尤其是对于较大的数据,另一个不错的选择是通过绘制标准差,而不是置信区间来表示分布在每个时间点的分布范围:

sns.relplot(x='timepoint', y='signal', kind='line', ci='sd', data=fmri)
<seaborn.axisgrid.FacetGrid at 0x1307ae6d0>

在这里插入图片描述

可以通过设置estimator参数为None,来完全停用聚合。当数据在每个点上有多个观察值时,这可能会产生奇怪的效果。

sns.relplot(x='timepoint', y='signal', kind='line', estimator=None, data=fmri)
<seaborn.axisgrid.FacetGrid at 0x130b6e590>

在这里插入图片描述

用语义映射绘制数据子集

函数lineplot()scatterplot()具有相同的灵活性:它可以通过修改绘图元素的色调,大小和样式来显示最多三个附加变量。它使用于scatterplot()相同的API,这意味着我们不需要停下来考虑控制matplotlib中线条与点外观的参数。

lineplot()中使用语义也将决定数据的聚合方式。例如,添加具有两个级别的色调语义将绘图分成两行以及错误带,每个都着色以指示它们对应于哪个数据集。

sns.relplot(x='timepoint', y='signal', hue='event', kind='line', data=fmri)
<seaborn.axisgrid.FacetGrid at 0x130c1f0d0>

在这里插入图片描述

在线条图中添加样式语义默认情况下会改变线条中的破折号模式:

sns.relplot(x='timepoint', y='signal', style='event', hue='region', kind='line', data=fmri)
<seaborn.axisgrid.FacetGrid at 0x130e90510>

在这里插入图片描述

与散点图一样,要谨慎使用多个语义制作线图。虽然有时提供信息,但它们也很难解析和解释。但当您只检查一个附加变量的变化时,更改线条的颜色和样式也很有用。当打印成黑白或有色盲的人观看时,这可以使绘图更容易访问:

sns.relplot(x='timepoint', y='signal', style='event', hue='event', kind='line', data=fmri)
<seaborn.axisgrid.FacetGrid at 0x130f5b010>

在这里插入图片描述

当使用重复测量数据(即有多次采样的单位)时,还可以单独绘制每个采样单位,而无需通过语义区分它们。这样可以避免使图例混乱:

sns.relplot(x="timepoint", y="signal", hue="region",
            units="subject", estimator=None,
            kind="line", data=fmri.query("event == 'stim'"))
<seaborn.axisgrid.FacetGrid at 0x130fcb950>

在这里插入图片描述

用日期数据绘图

线图通常用于可视化与实际日期和时间相关的数据。这些函数以原始格式将数据传递给底层的matplotlib函数,因此他们可以利用matplotlibtick标签中设置日期格式的功能。但是所有这些格式化都必须在matplotlib层进行

df = pd.DataFrame(dict(time=pd.date_range("2017-1-1", periods=500),
                       value=np.random.randn(500).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df)
g.fig.autofmt_xdate()

在这里插入图片描述

显示与切面的多种关系

当你想要了解两个变量之间的关系如何依赖于多个其他变量时呢?

最好的方法可能是多次绘制。因为relplot()基于FacetGrid,所以这很容易做到。要显示附加变量的影响,而不是将其分配给图中的一个语义角色,而是使用它来“切面”可视化。这意味着我们可以创建多个轴并在每个轴上绘制数据的子集:

sns.relplot(x="total_bill", y="tip", hue="smoker",
            col="time", data=tips)
<seaborn.axisgrid.FacetGrid at 0x13100f5d0>

在这里插入图片描述

还可以通过这种方式显示两个变量的影响:一个是通过在列上切面而另一个是在行上切面。当开始向网格添加更多变量时,可能希望减小图形大小。请记住,大小FacetGrid由每个切面的高度和长宽比参数化的:

sns.relplot(x="timepoint", y="signal", hue="subject",
            col="region", row="event", height=3,
            kind="line", estimator=None, data=fmri)
<seaborn.axisgrid.FacetGrid at 0x131185350>

在这里插入图片描述

当想要检查一个变量的多个级别的效果时,在列上对该变量进行切面处理,然后将切面“包装”到行中:

sns.relplot(x="timepoint", y="signal", hue="event", style="event",
            col="subject", col_wrap=5,
            height=3, aspect=.75, linewidth=2.5,
            kind="line", data=fmri.query("region == 'frontal'"))
<seaborn.axisgrid.FacetGrid at 0x1314ae590>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

golang实现加密解密文档

golang实现加密解密文档 package mainimport ("bytes""crypto/aes""crypto/cipher""crypto/rand""encoding/base64""flag""fmt""io""io/ioutil" )func main() {encodePtr : flag.…

阿赵UE学习笔记——8、贴图导入设置

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法&#xff0c;这次来说一下贴图的导入设置。   在内容浏览器里面可以看到纹理类型的资源&#xff0c;就是贴图了&#xff0c;鼠标悬浮在上面可以看到这个纹理贴图的信息&#xff1a; 双击纹理贴图…

Vue3技术解析(小册子)

随着 Vue 3 正式版本的发布&#xff0c;未来 Vue 3 将会成为前端的主流框架&#xff0c;这个毋庸置疑。Vue 3 在使用方面会兼容部分 Vue 2.x 的特性&#xff0c;比如 options API。 所以&#xff0c;究竟是要先学习 Vue 2 打好基础&#xff0c;还是直接学习 Vue 3 呢&#xff…

基于书生·浦语大模型应用开发范式介绍

文章目录 大模型应用开发范式LangChain简介构建向量数据库搭建知识库助手RAG方案优化建议 大模型应用开发范式 通用大模型的优势&#xff1a; 强大的语言理解、指令跟随、语言生成的能力可以理解用户自然语言的指令具有强大的知识储备和一定的逻辑推理能力。 通用大模型局限…

MongoDB快速实战与基本原理

MongoDB 介绍 什么是 MongoDB MongoDB 是一个文档数据库&#xff08;以 JSON 为数据模型&#xff09;&#xff0c;由 C 语言编写&#xff0c;旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。文档来自于“JSON Document”&#xff0c;并非我们一般理解的 PDF、WORD 文档…

构建安全可靠的系统:第二十一章到附录 A

第二十一章&#xff1a;建立安全和可靠性文化 原文&#xff1a;21. Building a Culture of Security and Reliability 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Heather Adkins 与 Peter Valchev&#xff0c;Felix Grbert&#xff0c;Ana Oprea…

计算机体系结构----重排序缓冲(ROB)

ROB的思想&#xff1a;不按顺序完成指令&#xff0c;但在使结果对体系结构状态可见之前重新排序 当指令被解码时&#xff0c;它会在 ROB 中保留下一个顺序条目当指令完成时&#xff0c;它将结果写入 ROB 条目当指令在 ROB 中最早并且无一例外地完成时&#xff0c;其结果移动到…

Java-布隆过滤器的实现

文章目录 前言一、概述二、误差率三、hash 函数的选择四、手写布隆过滤器五、guava 中的布隆过滤器 前言 如果想要判断一个元素是不是在一个集合里&#xff0c;一般想到的是将所有元素保存起来&#xff0c;然后通过比较确定。链表&#xff0c;树等等数据结构都是这种思路&…

LeetCode 145. 二叉树的后序遍历

145. 二叉树的后序遍历 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&…

Vue3:vue-cli项目创建及vue.config.js配置

一、node.js检测或安装&#xff1a; node -v node.js官方 二、vue-cli安装&#xff1a; npm install -g vue/cli # OR yarn global add vue/cli/*如果安装的时候报错&#xff0c;可以尝试一下方法 删除C:\Users**\AppData\Roaming下的npm和npm-cache文件夹 删除项目下的node…

C语言基础语法跟练 day2

题源&#xff1a;牛客网 16、BoBo写了一个十六进制整数ABCDEF&#xff0c;他问KiKi对应的十进制整数是多少。 #include <stdio.h>int main() { //创建变量char arr[] "ABCDEF";int i;int sum0,c; //依次转换十六进制为十进制for(i0; arr[i]!\0; i){char b …

每日学习更新(LQR+iLQR)

一直想更新一下根据cost to go来推导LQR&#xff0c;之前的话可能会直接套问题&#xff0c;但是对于理论有些困惑&#xff0c;正好最近在学习ilqr轨迹生成/优化&#xff0c;因此来推一下公式&#xff0c;以下参考B站Dr_CAN&#xff0c;链接如下&#xff1a; 【最优控制】5_线性…

记录汇川:H5U与Fctory IO测试6

主程序&#xff1a; 子程序: IO映射 子程序&#xff1a; 辅助上料 子程序&#xff1a; 自动程序 Fctory IO配置&#xff1a; 实际动作如下&#xff1a; Fctory IO测试6

软件测试工具Robot Framework如何安装

安装文件准备 表1 安装文件准备 Robot框架结构 为了更好的了解环境安装&#xff0c;我们先看下框架结构&#xff1a; 图1 Robot Framework Architecture Robot Framework 通过导入不同的库&#xff0c;就可以使用库中所提供的关键字&#xff0c;从而时行相关的测试。有几个标…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷②

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷2 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷2 模块一 …

大众汽车宣布将ChatGPT,批量集成在多种汽车中!

1月9日&#xff0c;大众汽车在官网宣布&#xff0c;将ChatGPT批量集成到电动、内燃机汽车中。 大众表示&#xff0c;将ChatGPT与其IDA语音助手相结合&#xff0c;用户通过自然语言就能与ChatGPT进行互动&#xff0c;例如&#xff0c;帮我看看最近的三星米其林饭店在哪里&#…

Redis系列-15.Redis的IO多路复用原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

Java顺序表(1)

&#x1f435;本篇文章将对顺序表中的方法进行模拟实现 一、线性表 线性表是指在逻辑结构上呈连续的线性结构&#xff0c;而在物理结构上不一定是连续的结构&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列等 二、顺序表 顺序表一般采用数组来存储数据&#x…

ELF文件格式解析二

使用objdump命令查看elf文件 objdump -x 查看elf文件所有头部的信息 所有的elf文件。 程序头部&#xff08;Program Header&#xff09;中&#xff0c;都以 PT_PHDR和PT_INTERP先开始。这两个段必须在所有可加载段项目的前面。 从上图中的INTERP段中&#xff0c;可以看到改段…

Android App打包加固后的APK无法安装问题

最近开发的一个应用要上架&#xff0c;正常流程打完包后去加固&#xff0c;由于以前一直用的是360的加固助手&#xff0c;这里开始也是选择用它。 使用360加固&#xff1a; 问题一、开始出现的问题是说应用未签名无法加固&#xff0c;我明明是签名后打的包&#xff0c;怎么会…
最新文章