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

news2024/11/24 9:45:27

人类大脑擅长于在数据的视觉表现中寻找模式;因此在这一节中,我们将学习如何使用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'
)

在这里插入图片描述

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

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

相关文章

网络安全之防病毒网关

目录 网络安全之防病毒网关 恶意软件 按照传播方式分类 病毒 蠕虫 木马 按照功能分类 后门 勒索 挖矿 恶意代码的特征 下载特征 后门特征 信息收集特征 自身感染特性 文件感染特性 网络攻击特性 病毒威胁场景 病毒传播途径 电子信息 网络共享 P2P 系统漏洞 广…

电压有效值电容和电感的电压电流相位关系以及电抗和容抗值推导

注意下面所有www表示的都是角速度而不是频率 电压有效值 高中物理中知道有效值电压是根据电阻发热的功率等效得到的 对于正弦波的电压,UUmsinwtUU_{m}sinwtUUm​sinwt,对应的电流IUmRsinwtI\frac{U_{m}}{R}sinwtIRUm​​sinwt 求得一个周期的发热量 ∫0TI2Rdt∫0T…

5分钟告诉你如何成为一名黑客?从萌新成为大佬,只需掌握这5点(思维、编程语言、网络安全、入侵实操、法律)

说到黑客,大家脑海里是不是都已经显现了他的模样 仅用一台电脑 就能黑手机 黑银行卡、 黑摄像头、 让 ATM 疯狂吐钞, 真的是太酷了… 试问谁还能没有个黑客梦呢? 本篇文章,小编就是要带大家揭秘黑客的神秘面纱,…

【Cisco Packet Tracer| 二.telnet方式远程登录交换机】

文章目录一.PC0通过console线连接交换机二.PC1通过Telnet远程登录交换机1.PC1通过双绞线连接交换机2.给主机设置IP地址3.给交换机配置一个虚拟的管理接口4.全局模式下设置交换机进入特权模式的密码5.设置5个虚拟终端用户6.测试6.1测试主机和交换机是否在同一个网段中6.2主机远程…

基于Tensorflow搭建卷积神经网络CNN(花卉识别)保姆及级教程

项目介绍 TensorFlow2.X 搭建卷积神经网络(CNN),实现人脸识别(可以识别自己的人脸哦!)。搭建的卷积神经网络是类似VGG的结构(卷积层与池化层反复堆叠,然后经过全连接层,最后用softm…

Vulnhub:Digitalworld.local (Mercy v2)靶机

kali:192.168.111.111 靶机:192.168.111.130 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 使用enum4linux对目标smb服务进行枚举 enum4linux -a 192.168.111.130 目标文件共享的目录 目标存在的用户 8080端口的网…

电阻器的原理、类型、参数以及生活中常见的应用

电阻器是电子电路中最基本的元件之一,它的作用是限制电流流过的大小,在电子电路中广泛应用于电流控制、电压分压、信号衰减等方面。在本文中,我们将详细介绍电阻器的原理、类型、参数以及生活中常见的应用。 一、电阻器的原理 电阻器是一种…

【Docker】Docker复杂安装(mysql+redis)

安装mysql主从复制 主从复制原理 主从搭建步骤 新建主服务器容器实例3307 [root192 ~]# docker run -d -p 3307:3306 --privilegedtrue -v /tmp/mysql-master/log:/var/log/mysql -v /tmp/mysql-master/data:/var/lib/mysql -v /tmp/mysql-master/conf:/etc/mysql -e MYS…

魔兽世界巫妖王架设教程-娱乐版

相信各位拿到一个优秀的魔兽端,在单机把玩一番之后,肯定都想着能不能假设一个外网服务器,然后让朋友们来到自己的服务器上玩耍,自己还能体会一下在众多凡人面前当神(GM)的乐趣。网上这方面的教程有一些&…

【嵌入式环境下linux内核及驱动学习笔记-(3-字符设备驱动详解)】

目录1、文件系统与设备驱动2、设备文件2.1 linux的文件种类:2.2 设备分类3、 设备号3.1 dev_t类型3.2 与设备号相关的操作介绍3.2.1 宏 MKDEV3.2.2 宏 MAJOR3.2.3 宏 MINOR3.2.4 命令mknod3.2.5 register_chrdev_region()3.2.6 alloc_chrdev_region()3.2.7 unregist…

【剑指offer-C++】JZ82:二叉树中和为某一值的路径(一)

【剑指offer-C】JZ82:二叉树中和为某一值的路径[一]题目描述解题思路题目描述 描述:给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经…

一篇文章 学会 Vue3 极速入门 (附带增删改查 案例 + Springboot)

vue3前置 00-导学 这将是你能看到的最快速Vue3 入门文章, 我们将快速的 去学习Vue3相关的知识,并结合后端做一个增删改查的项目,能够帮助你快速的上手Vue3, 包含了Vue 所含的所有特性, 你会知道 Vue3和Vue2 的区别&am…

Day944.度量指标 -系统重构实战

度量指标 Hi,我是阿昌,今天学习记录的是关于度量指标的内容。 很多时候在研发过程中,都习惯性地用“拍脑袋”的方式来看待一个事情。例如这个代码写得不好、这个自动化测试覆盖不充分、版本的发布频率太差了等等。往往只知道哪里有问题&…

后台服务异常?测试右移告警监控早知道。。。。

目录 引言 “测试右移”思想下实践步骤 什么是“测试右移” 一、收到问题反馈 二、沟通定位问题 1.服务架构 三、讨论并选定解决方案 1.讨论分析解决方案 2.选定解决方案 四、解决方案实现 1.总体方案设计 2.编写监控脚本 3.配置服务器定时任务 五、测试环境验证…

从零开始学Java之Integer底层原理探究

前言 在之前的两篇文章中,壹哥给大家介绍了Java中的包装类及其特点、用法,但是这些内容主要是停留在”怎么用“的层面,没有太多涉及”为什么“,所以接下来壹哥会给大家讲一讲Integer这个包装类的底层原理。在现在的就业环境下&am…

Apache Tomcat CVE-2020-1938 漏洞

Apache Tomcat CVE-2020-1938 漏洞简单复现 文章目录 Apache Tomcat CVE-2020-1938 漏洞简单复现实验准备实验步骤搭建环境nmap扫描漏洞端口POC代码验证漏洞修复建议 参考链接 实验准备 所选漏洞:Apache Tomcat远程代码执行漏洞 漏洞编号:CVE-2020-193…

AppArmor零知识学习三、源码介绍与下载

本文内容参考: AppArmor配置(二)_domybest_nsg的博客-CSDN博客, Apparmor简单学习_trap0D的博客-CSDN博客, 学习LSM(Linux security module)之三:Apparmor的前世今生和基本使用_wx5b7658e51ef04的技术博客_51CTO博客…

JavaEE初阶学习:文件操作

1.文件 1.认识文件 平时说的文件一般都是指存储再硬盘上的普通文件,形如txt,jpg,MP4,rar等这些文件都可以认为是普通文件,它们都是再硬盘上存储的。 在计算机中,文件可能是一个广义的概念,就…

【云原生|Docker】12-Docker Harbor企业级镜像管理

【云原生Docker】12-Docker Harbor企业级镜像管理 文章目录【云原生Docker】12-Docker Harbor企业级镜像管理前言Harbor简介简介架构介绍组件间说明工作原理docker logindocker pushHarbor安装版本介绍安装Http模式部署https模式部署前言 ​ 上一章节我们介绍了Docker的官方的镜…

【redis】集成到SpringBoot

集成到SpringBoot 类似于java连接mysql需要JDBC 而Java连接redis则需要 对应的 工具类 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录集成到SpringBoot前言一、Jedis加依赖写业务二、lettuce加依赖写业务Jedis和…