Pandas入门实践3 -数据可视化

人类大脑擅长于在数据的视觉表现中寻找模式;因此在这一节中,我们将学习如何使用pandas沿着Matplotlib和Seaborn库来可视化数据,以获得更多的特性。我们将创建各种可视化,帮助我们更好地理解数据。

使用pandas绘图

我们可以使用plot()方法创建各种可视化效果。在本节中,我们将简要介绍其中的一些功能,这些功能使用Matplotlib。
同样,我们将使用在上一节中清理的TSA旅客吞吐量数据:

import pandas as pd

tsa_melted_holiday_travel = pd.read_csv(
    '../data/tsa_melted_holiday_travel.csv', 
    parse_dates=True, index_col='date'
)
tsa_melted_holiday_travel.head()

在这里插入图片描述
要在notebook中嵌入SVG格式的绘图,我们将配置Matplotlib绘图后端,以生成带有自定义元数据(第二个参数)的SVG输出(第一个参数):

import matplotlib_inline
from utils import mpl_svg_config

matplotlib_inline.backend_inline.set_matplotlib_formats(
    'svg', # output images using SVG format
    **mpl_svg_config('section-3') # optional: configure metadata
)

注:第二个参数是可选的,在这里用于通过设置hashsalt沿着一些元数据使SVG输出可再现,Matplotlib在生成任何SVG输出时将使用这些元数据(更详细信息参考utils.py)。如果没有此参数,同一绘图代码的不同运行将生成视觉上相同的绘图,但由于ID、元数据等不同,这些绘图在HTML级别上会有所不同。

Line plots
plot()方法将默认为所有数值列生成线图:

tsa_melted_holiday_travel.drop(columns='year').loc['2020'].assign(
    **{
        '7D MA': lambda x: x.travelers.rolling('7D').mean(),
        'YTD mean': lambda x: x.travelers.expanding().mean()
      }
).plot(title='2020 TSA Traveler Throughput', ylabel='travelers', alpha=0.8)

在这里插入图片描述

Bar plots
在下一个示例中,我们将绘制竖线来比较不同年份的每月TSA旅客吞吐量。让我们先创建一个包含所需信息的透视表:

plot_data = tsa_melted_holiday_travel['2019':'2021-04']\
    .assign(month=lambda x: x.index.month)\
    .pivot_table(index='month', columns='year', values='travelers', aggfunc='sum')
plot_data.head()

在这里插入图片描述
Pandas通过kind参数提供了其他绘图类型,因此我们在调用plot()方法时指定kind=‘bar’。然后,我们使用plot()方法返回的Axes对象进一步格式化可视化:

import calendar
from matplotlib import ticker

ax = plot_data.plot(
    kind='bar', rot=0, xlabel='', ylabel='travelers',
    figsize=(8, 1.5), title='TSA Monthly Traveler Throughput'
)

# use month abbreviations for the ticks on the x-axis
ax.set_xticklabels(calendar.month_abbr[1:])

# show y-axis labels in millions instead of scientific notation
ax.yaxis.set_major_formatter(ticker.EngFormatter())

# customize the legend
ax.legend(title='', loc='center', bbox_to_anchor=(0.5, -0.3), ncols=3, frameon=False)

在这里插入图片描述
Plotting 分布
现在让我们比较一下TSA旅客日吞吐量在各年中的分布情况。我们将为每一年创建一个子图,其中包含直方图和分布的核密度估计值(KDE)。到目前为止,Pandas已经为这两个示例生成了Figure和Axes对象,但是我们可以使用Matplotlib的plt.subplots()函数自己创建自定义布局。首先,我们需要导入pyplot模块:

import matplotlib.pyplot as plt

虽然pandas让我们指定我们想要的子图及其布局(分别使用子图和布局参数),使用Matplotlib直接创建子图给了我们额外的灵活性:

# define the subplot layout
fig, axes = plt.subplots(3, 1, sharex=True, sharey=True, figsize=(6, 4))

for year, ax in zip(tsa_melted_holiday_travel.year.unique(), axes):
    plot_data = tsa_melted_holiday_travel.loc[str(year)].travelers
    plot_data.plot(kind='hist', legend=False, density=True, alpha=0.8, ax=ax)
    plot_data.plot(kind='kde', legend=False, color='blue', ax=ax)
    ax.set(title=f'{year} TSA Traveler Throughput', xlabel='travelers')

fig.tight_layout() # handle overlaps

在这里插入图片描述

使用Seaborn绘图

Seaborn库提供了一种无需透视即可轻松可视化长格式数据的方法。此外,它还提供了一些额外的绘图类型-再次构建在Matplotlib之上。在这里,我们将看到一些我们可以用Seaborn创建的可视化示例。

可视化长格式数据
使用Seaborn,我们可以根据带有hue参数的列的值来指定绘图颜色。当使用生成子区的函数时,我们还可以指定如何使用col和row参数按长格式列的值拆分子区。在这里,我们重新回顾了跨年TSA旅客吞吐量分布的比较:

import seaborn as sns

sns.displot(
    data=tsa_melted_holiday_travel, x='travelers', col='year', kde=True, height=2.5
)

在这里插入图片描述
热力图
我们还可以使用Seaborn将透视表可视化为热力图:

data = tsa_melted_holiday_travel['2019':'2021-04']\
    .assign(month=lambda x: x.index.month)\
    .pivot_table(index='month', columns='year', values='travelers', aggfunc='sum')

data

在这里插入图片描述

ax = sns.heatmap(data=data / 1e6, cmap='Blues', annot=True, fmt='.1f')
_ = ax.set_yticklabels(calendar.month_abbr[1:], rotation=0)
_ = ax.set_title('Total TSA Traveler Throughput (in millions)')

在这里插入图片描述

使用Matplotlib自定义绘图

在最后一节中,我们将讨论如何使用Matplotlib自定义绘图。由于有很多可用的功能,我们在这里只介绍如何添加阴影区域和注释。

添加着色区域
在查看TSA旅客吞吐量随时间变化的曲线图时,指出假期旅行的时间段是很有帮助的。我们可以使用axvspan()方法来实现这一点:

plot_data = tsa_melted_holiday_travel['2019-05':'2019-11']
ax = plot_data.travelers.plot(
    title='TSA Traveler Throughput', ylabel='travelers', figsize=(9, 2)
)
ax.yaxis.set_major_formatter(ticker.EngFormatter())

# collect the holiday ranges (start and end dates)
holiday_ranges = plot_data.dropna().reset_index()\
    .groupby('holiday').agg({'date': ['min', 'max']})

# create shaded regions for each holiday in the plot
for start_date, end_date in holiday_ranges.to_numpy():
    ax.axvspan(start_date, end_date, color='gray', alpha=0.2)

在这里插入图片描述
添加注释
我们可以使用annotate()方法向图中添加注释。在这里,我们指出2019年TSA旅客吞吐量最高的一天,也就是感恩节后一天:

plot_data = tsa_melted_holiday_travel.loc['2019']
ax = plot_data.travelers.plot(
    title='TSA Traveler Throughput', ylabel='travelers', figsize=(9, 2)
)
ax.yaxis.set_major_formatter(ticker.EngFormatter())

# highest throughput
max_throughput_date = plot_data.travelers.idxmax()
max_throughput = plot_data.travelers.max()
_ = ax.annotate(
    f'{max_throughput_date:%b %d}\n({max_throughput / 1e6:.2f} M)',
    xy=(max_throughput_date, max_throughput),
    xytext=(max_throughput_date - pd.Timedelta(days=25), max_throughput * 0.92),
    arrowprops={'arrowstyle': '->'}, ha='center'
)

在这里插入图片描述

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

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

相关文章

【linux】Ubuntu aarch64编译安装RXTX进行串口通信

目录1.下载RXTX2.源码下载方式一:方式二:3. 编译源码4.编译源码时遇到的问题问题1:./configure command not found问题2:error: UTS_RELEASE undeclared问题3:libtool: install: armv6l-unknown-linux-gnu/librxtxRS48…

【ZUUL2踩坑】题一:Ribbon集成动态properties存在的原生风险

目录 一、问题背景 二、问题分析 1、配置文件空档期的问题 一、问题背景 JAVA的Properties工具有两种写配置文件的方式,一种是覆盖,一种是追加。 但是动态配置文件一般需要进行创建或更新,不会选择追加内容,所以只能选择进行配…

docker目录映射

docker 常用命令 docker ps // 查看所有正在运行容器 docker stop containerId // containerId 是容器的ID docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID docker stop $(docker ps -a -q) // stop停止所有容器 docker rm $(docker ps -a -q) // remove删…

replugin宿主与插件通信小结

近来replugin开发中遇到宿主和插件间需要通信的情形,思来只有进程间通信(IPC)才是比较好的宿主与插件的通信方式。而Android进程间通信主要有2种方式:Messenger和AIDL。 AIDL(Android Interface Definition Language)是Android接…

ChatGPT团队中,3个清华学霸,1个北大学霸,共9位华人

众所周知,美国硅谷其实有着众多的华人,哪怕是芯片领域,华为也有着一席之地,比如AMD 的 CEO 苏姿丰、Nvidia 的 CEO 黄仁勋 都是华人。 还有更多的美国著名的科技企业中,都有着华人的身影,这些华人&#xff…

Java入坑之类的派生与继承

一、继承 1.1继承的概念 Java中的继承:子类就是享有父类的属性和方法,并且还存在一定的属性和方法的扩展。 Subclass,从另一个类派生出的类,称为子类(派生类,扩展类等) Superclass,派生子类的类&#xff…

3.5 函数的极值与最大值和最小值

学习目标: 我要学习函数的极值、最大值和最小值,我会采取以下几个步骤: 理解基本概念:首先,我会理解函数的极值、最大值和最小值的概念。例如,我会学习函数在特定区间内的最高点和最低点,并且理…

( “树” 之 DFS) 104. 二叉树的最大深度 ——【Leetcode每日一题】

104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 思路&am…

激光和相机的标定

一、手动标定 代码工程:GitHub - Livox-SDK/livox_camera_lidar_calibration: Calibrate the extrinsic parameters between Livox LiDAR and camera 这是Livox提供的手动校准Livox雷达和相机之间外参的方法,并在Mid-40,Horizon和Tele-15上进…

ReactNative入门

React基本用法: react与js不同的点在于 react使用的是虚拟DOM js是真实DOM 作用:当有新的数据填充 可以复用之前的,而js需要整体重新渲染 创建虚拟DOM还可以使用jsx语法直接声明: 注意要用babel标签将jsx转化为js 但是建议采用j…

图解并用 C 语言实现非比较排序(计数排序、桶排序和基数排序)

目录 一、计数排序 二、桶排序 三、基数排序 一、计数排序 算法步骤: 找出待排序数组 arr 中的最小值和最大值(分别用 min 和 max 表示)。 创建一个长度为 max - min 1、元素初始值全为 0 的计数器数组 count。 扫描一遍原始数组&…

2023 年嵌入式世界的3 大趋势分析

目录 大家好,本文讲解了嵌入式发展的3个大趋势,分享给大家。 趋势#1 – Visual Studio Code Integration 趋势#2 –支持“现代”软件流程 趋势 #3 – 在设计中利用 AI 和 ML 结论 大家好,本文讲解了嵌入式发展的3个大趋势,分享…

Python圈的普罗米修斯——一套近乎完善的监控系统

文章目录前言一、怎么采集监控数据?二、采集的数据结构与指标类型2.1 数据结构2.2 指标类型2.3 实例概念2.4.数据可视化2.5.应用前景总结前言 普罗米修斯(Prometheus)是一个SoundCloud公司开源的监控系统。当年,由于SoundCloud公司生产了太多的服务&…

网络安全实战之植入后门程序

在 VMware 上建立两个虚拟机:win7 和 kali。 Kali:它是 Linux 发行版的操作系统,它拥有超过 300 个渗透测试工具,就不用自己再去找安装包,去安装到我们自己的电脑上了,毕竟自己从网上找到,也不…

如何把数据库中的数据显示到页面

主要内容:使用JDBC访问数据库中数据(Java Web数据可视化案例) 文章目录前期准备:案例:第一步:创建数据库及数据第二步:编写实体类第三步:编写Dao类第四步:编写Servlet代码…

springboot集成hadoop3.2.4HDFS

前言 记录springboot集成hadoop3.2.4版本&#xff0c;并且调用HDFS的相关接口&#xff0c;这里就不展示springboot工程的建立了&#xff0c;这个你们自己去建工程很多教程。 一、springboot配置文件修改 1.1 pom文件修改 <!-- hadoop依赖 --><dependency><gro…

Stable Diffusion - API和微服务开发

Stable Diffusion 是一种尖端的开源工具&#xff0c;用于从文本生成图像。 Stable Diffusion Web UI 通过 API 和交互式 UI 打开了许多这些功能。 我们将首先介绍如何使用此 API&#xff0c;然后设置一个示例&#xff0c;将其用作隐私保护微服务以从图像中删除人物。 推荐&…

一种轻量的“虚拟机”——Windows 沙盒模式

Windows 沙盒模式Windows沙盒的好处操作步骤Windows沙盒的好处 相比虚拟机和第三方的沙盒软件&#xff0c;Windows Sandbox启用后仅占用100MB硬盘空间&#xff0c;还能与物理机安全地共享部分内存空间。简单来说就是易用、免费、不卡机&#xff01; 由于要保证沙盒内的数据不…

(九)【软件设计师】计算机系统-浮点数习题

文章目录一、2009年下半年第3、4题二、2011年上半年第5题三、2012年下半年第3题四、2015年上半年第1题五、2015年下半年第3题六、2016年下半年第3题七、2018年上半年第1题八、2020年下半年第3题知识点回顾 &#xff08;八&#xff09;【软件设计师】计算机系统—浮点数一、2009…

Android13 PMS是如何启动的?

作者&#xff1a;Arthas0v0 平常使用安卓实际就是在使用各种app&#xff0c;而下载的app实际是一个apk文件。这个apk文件的安装就交给了PackageManagerService来实现。PackageManagerService的启动也是在SystemServer中。这个过程比较长需要长一点的时间来理。 SystemServer.s…