当前位置: 首页 > news >正文

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

到本次讲座结束时,你将能够:

  • 使用Polars的内部plot方法从Polars创建图表
  • 使用外部绘图库从Polars创建图表
  • 了解这些库如何支持Polars

通常,需要可视化库的最新版本来实现最大程度的兼容性

import polars as plimport hvplot as hv
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import altair as alt
import vegafusion as vf

为Altair启用vegafusion

解释:

  1. Altair 是一个基于 Python 的声明式统计可视化库。它允许你用简洁的语法创建复杂的交互式图表。Altair 生成的图表基于 Vega-Lite 规范,这是一种用于描述数据可视化的 JSON 格式。
  2. Vegafusion 是一个优化工具,旨在加速 Altair 图表的渲染速度,特别是在处理大数据集时。它通过在服务器端执行更多的数据处理和渲染工作,从而减轻客户端浏览器的负担,使图表响应更快、更流畅。

在使用 Altair 进行数据可视化时,我们一般要激活或配置 Vegafusion 来优化图表的性能。具体来说,这意味着当你在 Polars 或其他环境中使用 Altair 创建图表时,Vegafusion 会在后台工作,确保图表加载速度快,即使数据量很大也能保持良好的用户体验。

vf.enable() # 启用vegafusioncsv_file = '../data/titanic.csv'
df = pl.read_csv(csv_file)
df.head(3)shape: (3, 15)
┌──────────┬────────┬────────┬──────┬───┬──────┬─────────────┬───────┬───────┐
│ survived ┆ pclass ┆ sex    ┆ age  ┆ … ┆ deck ┆ embark_town ┆ alive ┆ alone │
│ ---      ┆ ---    ┆ ---    ┆ ---  ┆   ┆ ---  ┆ ---         ┆ ---   ┆ ---   │
│ i64      ┆ i64    ┆ str    ┆ f64  ┆   ┆ str  ┆ str         ┆ str   ┆ bool  │
╞══════════╪════════╪════════╪══════╪═══╪══════╪═════════════╪═══════╪═══════╡
│ 0        ┆ 3      ┆ male   ┆ 22.0 ┆ … ┆ null ┆ Southampton ┆ no    ┆ false │
│ 1        ┆ 1      ┆ female ┆ 38.0 ┆ … ┆ C    ┆ Cherbourg   ┆ yes   ┆ false │
│ 1        ┆ 3      ┆ female ┆ 26.0 ┆ … ┆ null ┆ Southampton ┆ yes   ┆ true  │
└──────────┴────────┴────────┴──────┴───┴──────┴─────────────┴───────┴───────┘

我们首先通过创建一个简单的条形图来查看是否可以直接将Polars的DataFrame传递给每个绘图库。接下来,我们将考虑从Polars与每个库协作时需要注意的其他一些要点。

条形图

我们首先统计每个乘客等级中的乘客数量。有关此处使用的方法的更多信息,请参阅课程中关于统计和聚合的部分。

passenger_class_counts_df = (df['pclass'].value_counts().sort("pclass")
)passenger_class_counts_dfshape: (3, 2)
┌────────┬───────┐
│ pclass ┆ count │
│ ---    ┆ ---   │
│ i64    ┆ u32   │
╞════════╪═══════╡
│ 1      ┆ 216   │
│ 2      ┆ 184   │
│ 3      ┆ 491   │
└────────┴───────┘

使用hvPlot内置绘图

DataFrame有一个内置的.plot方法,该方法将DataFrame传递给hvPlot库

注释:

Polars 数据库框架直接集成了 hvPlot 这个绘图工具,使得用户可以直接在 Polars 的 DataFrame 上进行数据可视化,而无需额外安装或导入其他专门的绘图库(尽管 hvPlot 本身仍需要被安装)。

hvPlot 是一个用于快速生成高质量图表的 Python 库,它构建在 HoloViews 和 Bokeh 之上,提供了非常直观的 API,使得从数据帧到图表的转换变得简单且强大。它支持多种数据源,包括 Pandas DataFrame 和 Series。

在 Polars 中,hvPlot 的功能已经被内化了,用户可以直接在 Polars DataFrame 上调用 hvPlot 的方法来创建图表,无需像以前那样先将数据转换为 Pandas DataFrame 或者单独使用 hvPlot 的函数。

passenger_class_counts_df.plot.bar(x="pclass",y="count"
)

hvPlot 是对底层绘图库的封装。默认情况下,它使用 Bokeh 库来生成交互式图表,这些图表在右侧包含控件,可以:

  •  在我们悬停在数据上时添加描述数据的工具提示
  • 支持平移和缩放
  • 有一个重置按钮以恢复到原始视图 

在 JupyterLab 中,图表会自动显示。但如果你在使用 IPython 终端,hvPlot 也可以启动一个临时服务器,在浏览器中显示图表,只要你:

  •  首先创建一个图表对象并将其分配给变量 p
  • 调用 hv.show(p) 
p = (passenger_class_counts_df.plot.bar(x="pclass",y="count"))hv.show(p)

在这个例子中,我们根据乘客等级(pclass)的颜色进行散点图绘制,以年龄(age)为横坐标,票价(fare)为纵坐标,并控制图表的宽度。

p = (df.plot.scatter(x="age",y="fare",color="pclass",    width=500)
)hv.show(p)

然而,用于 pclass 的颜色映射并不是很有用,因为它将 pclass 的整数视为连续数值而不是离散的分类值(这是不同绘图库中常见的现象)。

在绘图之前,我们将 pclass 转换为字符串,以获得更好的颜色映射。

p = (df.with_columns(pl.col("pclass").cast(pl.Utf8)).plot.scatter(x="age",y="fare",color="pclass",    )
)hv.show(p)

我们可以使用 cmap 参数明确控制所使用的颜色映射。可用的颜色映射设置在这里:

https://holoviews.org/user_guide/Colormaps.html

请注意,您选择的颜色映射必须与您正在使用的 hvPlot 绘图后端(默认为 Bokeh)相匹配。

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快速入门

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • NTP时间服务器的工作原理解析
  • SSH端口转发
  • 12、springboot3 vue3开发平台-前端-记住我功能实现
  • Python向IP地址发送字符串
  • HTML静态网页成品作业(HTML+CSS)——原神介绍设计制作(4个页面)
  • 【Redis】如何从单机架构演化为分布式系统
  • 【JAVA入门】Day20 - 正则表达式
  • XSS之xss game
  • Epic Games 商店面向欧盟 iPhone 用户上线
  • K8S系列——(一)、Ubuntu上安装Helm
  • Java实现腾讯云人脸识别集成:如何为司机创建人脸模型
  • Angular由一个bug说起之九:AWS S3 文件下载问题
  • MySQL8 innoDB引擎的精髓
  • 日志管理工具 简介2 Graylog
  • ★ C++基础篇 ★ vector 类
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Angular6错误 Service: No provider for Renderer2
  • CSS 提示工具(Tooltip)
  • JavaScript函数式编程(一)
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何使用 JavaScript 解析 URL
  • 用Canvas画一棵二叉树
  • - 转 Ext2.0 form使用实例
  • # wps必须要登录激活才能使用吗?
  • # 达梦数据库知识点
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • (13)DroneCAN 适配器节点(一)
  • (2015)JS ES6 必知的十个 特性
  • (2020)Java后端开发----(面试题和笔试题)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (rabbitmq的高级特性)消息可靠性
  • (差分)胡桃爱原石
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (接口自动化)Python3操作MySQL数据库
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (一)kafka实战——kafka源码编译启动
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (杂交版)植物大战僵尸
  • ./configure,make,make install的作用
  • .describe() python_Python-Win32com-Excel
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net 获取url的方法
  • .Net 执行Linux下多行shell命令方法
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @vue/cli 3.x+引入jQuery
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [AIGC] Redis基础命令集详细介绍
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Android]Android开发入门之HelloWorld