1. seaborn-可视化统计关系

news2024/11/19 0:51:57

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

这里介绍三个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.coloradmin.cn/o/1378548.html

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

相关文章

FPGA开发设计

一、概述 FPGA是可编程逻辑器件的一种&#xff0c;本质上是一种高密度可编程逻辑器件。 FPGA的灵活性高、开发周期短、并行性高、具备可重构特性&#xff0c;是一种广泛应用的半定制电路。 FPGA的原理 采用基于SRAM工艺的查位表结构&#xff08;LUT&#xff09;&#xff0c;…

WPF 入门教程DispatcherTimer计时器

https://www.zhihu.com/tardis/bd/art/430630047?source_id1001 在 WinForms 中&#xff0c;有一个名为 Timer 的控件&#xff0c;它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性&#xff0c;但我们有DispatcherTimer控件&#xff0c;而不是不可见的控件。它几…

FridaHook(三)——AllSafe App wp

By ruanruan&#xff0c;2022/04/21 文章目录 1、不安全的日志记录2、硬编码3、pin绕过&#xff08;1&#xff09;反编译查看方法判断逻辑&#xff08;2&#xff09;hook方法A、Hook areEqual(Object,Object)B、Hook checkPin(a) &#xff08;3&#xff09;页面效果&#xff08…

day-07 统计出现过一次的公共字符串

思路 用哈希表统计words1和words2中各个字符串的出现次数&#xff0c;次数皆为1的字符串符合题意 解题方法 //用于存储words1中各个字符串的出现次数 HashMap<String,Integer> hashMap1new HashMap<>(); //用于存储words2中各个字符串的出现次数 HashMap<Stri…

适合PC端的7款最佳时间规划、项目管理软件

分享PC端7类主流的时间管理规划软件&#xff1a;PingCode、Worktile、Todoist、Pomodoro Timer 、Toggl等。 一、时间管理软件的类型 时间管理软件可以根据其功能和应用场景被划分为几种不同的类型。每种类型的软件都旨在帮助用户以不同的方式更有效地管理和分配他们的时间。以…

leetcode 每日一题 2024年01月11日 构造有效字符串的最少插入数

题目 2645. 构造有效字符串的最少插入数 给你一个字符串 word &#xff0c;你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次&#xff0c;返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 “abc” 串联多次得到&#xff0c;则认为该字符串 有效 。 示例 …

day1·算法-双指针

今天是第一天&#xff0c;GUNDOM带你学算法&#xff0c;跟上我的节奏吗&#xff0c;一起闪击蓝桥杯&#xff01; 正文展开&#xff0c;今天先上点小菜供大家想用&#xff0c;如有错误或者建议直接放评论区&#xff0c;我会一个一个仔细查看的哦。 双方指针问题一般是在数组中…

大数据实时抓取软件:Maxwell学习网站的高效框架!

介绍&#xff1a;Maxwell是由美国Zendesk开源的&#xff0c;使用Java编写的MySQL实时抓取软件。它能够实时读取MySQL的二进制日志&#xff08;Binlog&#xff09;&#xff0c;并将这些信息生成为JSON格式的消息。进一步地&#xff0c;Maxwell将这些消息作为生产者发送给Kafka、…

跳跃游戏,经典算法实战。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

限流式保护器在户外汽车充装的应用

摘 要&#xff1a;国家标准GB51348-2019中规定储备仓库、电动车充电等场所的末端回路应设置限流式电气防火保护器。电气防火限流式保护器可以有效克服传统断路器、空气开关和监控设备存在的短路电流大、切断短路电流时间长、短路时产生的电弧火花大&#xff0c;以及使用寿命短等…

【计算机组成原理】程序的转换及机器级表示 常用计算机术语英文缩写汇总

编码 二进制编码的十进制数&#xff08;BCD&#xff09;&#xff1a;Binary Coded Decimal美国信息交换标准代码&#xff08;ASCII&#xff09;&#xff1a;American Standard Code for Information Interchange 数据的排列顺序 最低有效位&#xff08;LSB&#xff09;&…

Java浮点数精度问题与BigDecimal详解

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们在日常的Java编程中&#xff0c;经常会遇到处理金融数据的情况&#xff0c;比如计算商品的价格或者处理用户的账户余额。在这些场景下&#xff0c;精确的数值计算就显得尤为重要。这时候&#xff0c;BigDeci…

nginx和CDN应用

一、代理的工作机制 1&#xff0e;代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2&#xff0e;将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到缓存中并发送给客户机&#xff0c;以便下次请求相同的数据时快速响应。 二、代理服务器的…

Pygame程序的屏幕显示

不同对象的绘制与显示过程 在Pygame中&#xff0c;需要将所有需要在屏幕上显示的内容都绘制在一个display surface上。该Surface通常称为screen surface&#xff0c;它是pygame.display.set_mode()函数返回的Surface对象。 在绘制不同对象时&#xff0c;可以使用不同的绘制方…

四款AI写作助手推荐:提高内容创作效率与质量

随着人工智能技术的飞速发展&#xff0c;AI写作助手逐渐成为内容创作者的新宠。这些工具利用先进的人工智能技术&#xff0c;为写作者提供强大的支持&#xff0c;帮助他们提高创作效率和质量。本文将介绍四种受欢迎的AI写作助手&#xff1a;海鲸AI、Jenni AI、Writesonic和Jasp…

23年容器云部署

23年容器云部署&#xff08;vmware虚拟机&#xff09; 主机名IP地址master192.168.100.119node192.168.100.120 1、将安装包 chinaskills_cloud_paas_v2.1.iso 下载至 master 节点/root 目录&#xff0c;并解压到/opt 目 录 [rootmaster ~]# ls anaconda-ks.cfg chinaskill…

Hive数据定义(1)

hive数据定义是hive的基础知识&#xff0c;所包含的知识点有&#xff1a;数据仓库的创建、数据仓库的查询、数据仓库的修改、数据仓库的删除、表的创建、表的删除、表的修改、内部表、外部表、分区表、桶表、表的修改、视图。本篇文章先介绍&#xff1a;数据仓库的创建、数据仓…

Jmeter接口自动化02--JMeter的安装和使用

p02 高清B站视频链接 2.1 Windows环境 首先需要安装JDK&#xff0c;然后再部署JMeter。注意&#xff0c;JMeter对JDK的版本是有要求的&#xff0c;一般至少要JDK8&#xff0c;这也是目前开发过程中使用频繁的版本。 1. 安装JDK 从官网下载JDK&#xff1a;https://www.oracl…

error: undefined reference to ‘cv::imread(std::__ndk1::basic_string<char

使用android studio编译项目时&#xff0c;由于用到了 cv::imread&#xff08;&#xff09;函数&#xff0c;编译时却报错找不到该函数的定义。 cv::imread一般是在highgui.hpp中定义&#xff0c;因此我加上了该头文件&#xff1a; #include “opencv2/highgui/highgui.hpp” 但…

开机自启动android app

Android App开机自启动_android 开机自启动-CSDN博客 注意权限问题&#xff1a; 第二种实现方式&#xff1a;系统桌面应用 问&#xff1a;android的系统桌面应用启动是什么&#xff1a; 答&#xff1a; Android 系统桌面应用是指用户在设备主屏幕上看到的默认启动界面&…