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

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

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

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

python 复制代码
import polars as pl

import 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 会在后台工作,确保图表加载速度快,即使数据量很大也能保持良好的用户体验。

python 复制代码
vf.enable() # 启用vegafusion

csv_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与每个库协作时需要注意的其他一些要点。

条形图

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

python 复制代码
passenger_class_counts_df = (
    df['pclass']
    .value_counts()
    .sort("pclass")
)

passenger_class_counts_df

shape: (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 的函数。

python 复制代码
passenger_class_counts_df.plot.bar(
    x="pclass",
    y="count"
)

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

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

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

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

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

python 复制代码
p = (
    df
    .plot.scatter(
    x="age",
    y="fare",
    color="pclass",    
    width=500
    )
)

hv.show(p)

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

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

python 复制代码
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简明基础教程二:懒惰模式 1:引入懒惰模式

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

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

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

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

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

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

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

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

相关推荐
火星数据-Tina11 小时前
AI数据分析在体育中的应用:技术与实践
人工智能·数据挖掘·数据分析
Theodore_102214 小时前
大数据(1) 大数据概述
大数据·hadoop·数据分析·spark·hbase
Jay Kay14 小时前
ReLU 新生:从死亡困境到强势回归
人工智能·数据挖掘·回归
Blossom.11814 小时前
使用Python和Flask构建简单的机器学习API
人工智能·python·深度学习·目标检测·机器学习·数据挖掘·flask
生信学术纵览14 小时前
中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
数据挖掘·数据分析
壹氿16 小时前
Supersonic 新一代AI数据分析平台
人工智能·数据挖掘·数据分析
SelectDB技术团队18 小时前
Apache Doris + MCP:Agent 时代的实时数据分析底座
人工智能·数据挖掘·数据分析·apache·mcp
shykevin19 小时前
dify打造数据可视化图表
信息可视化
企销客CRM21 小时前
CRM管理软件的数据可视化功能使用技巧:让数据驱动决策
信息可视化·数据挖掘·数据分析·用户运营
人大博士的交易之路1 天前
今日行情明日机会——20250606
大数据·数学建模·数据挖掘·数据分析·涨停回马枪