- 数据可视化
- 数据分析
【免费下载链接】lux
Automatically visualize your pandas dataframe via a single print! 📊 💡
本篇指南以 Lux 项目官方入门文档 doc/source/getting_started/overview.rst 为核心骨架,面向希望在不改写既有 Pandas 代码的前提下快速获得数据可视化洞察的开发者。读完本文,你将掌握 Lux 的基本使用流程、三大默认推荐动作(Correlation / Distribution / Occurrence)的含义、如何通过df.intent表达分析意图,以及如何利用 Enhance 与 Filter 动作引导推荐走向,并理解其背后的 Parser → Compiler → Executor 源码实现链路。
前置准备:安装 Lux 与 Jupyter 组件
本文教程默认你已经在 Jupyter 环境中完成了 Lux 及其前端组件的安装。Lux 由两部分构成:核心 Python 框架(官方包名为lux-api)与基于 ipywidget 的 Jupyter 前端组件。快速安装方式如下:
pip install lux-api安装完成后还需要为 Jupyter Notebook 激活扩展(详见 doc/source/getting_started/installation.rst):
jupyter nbextension install --py luxwidget jupyter nbextension enable --py luxwidget若使用 JupyterLab,则执行:
jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter labextension install luxwidget官方文档同时提示:若希望以 SQL 引擎作为后端,需要额外安装 Postgres(>= 9.5)与psycopg2;Lux 仅在 Chrome 浏览器上做过完整测试。安装出现问题时,可查阅仓库中的 doc/source/guide/FAQ.rst 进行排障。
Quick Start:在既有 Pandas 代码中一键启用 Lux
Lux 的核心设计理念是与 Pandas 深度集成、即插即用——无需修改任何既有 Pandas 代码。要启用 Lux,只需要在 Pandas 的 import 语句旁追加一行import lux:
import pandas as pd import luxLux 完整保留 Pandas 的 DataFrame 语义:凡是 Pandas API 支持的命令,作用在 Lux 的 DataFrame 上都会得到与原生 Pandas 相同的行为。因此你可以用标准的pd.read_csv加载数据:
df = pd.read_csv("lux/data/college.csv")该数据集即仓库 lux/data/college.csv,记录了美国高校的名称、地理位置、经费模式、学费、毕业生薪资等信息。接下来,只需要在 Jupyter 单元中直接输出这个 DataFrame:
df你会看到默认的 Pandas 表格显示之外,多出了一个Toggle(切换)按钮。点击 Toggle 后即可通过 Lux 以可视化的方式探索数据,在不同的标签页中浏览 Lux 为你推荐的若干类可视化。从源码角度看,这一显示逻辑位于 lux/core/frame.py 的_ipython_display_:它创建Toggle Pandas/Lux按钮,并把展示内容切换为display_pandas()(回到原生表格)或self._widget(Lux 推荐组件);组件数据则经由render_widget与to_JSON组装成 LuxWidget 可消费的 JSON 结构。
理解 Recommendations:基于 analytical actions 的推荐体系
当你打印 DataFrame 时,Lux 生成的推荐(Recommendations)用于突出数据中"有趣"的模式与趋势。推荐背后是 Lux 所谓的analytical actions(分析动作)——每一种动作代表一种可施加于数据上的分析。Lux 会根据 DataFrame 的内容以及你的分析目标(即 intent,下文详述)来挑选一组动作。
在无任何额外信息时,默认展示以下三种类型的动作,分别对应三个标签页:
Correlation:定量变量两两相关
Correlation 展示两个定量变量之间的关系,按线性相关程度从高到低排序的散点图:
从源码 lux/action/correlation.py 可以确认其实现要点:correlation(ldf)会构造两个lux.Clause("?", data_model="measure")通配子句,枚举出所有定量属性两两组合(默认忽略转置对{X,Y}/{Y,X}的重复计算,见ignore_transpose参数),随后用interestingness(vis, ldf)打分——散点图的分值即两个属性秩次相关的绝对值(monotonicity,基于 Pearson 相关),最后vlist.sort()后取showK()(默认 Top-K)作为推荐集合。当数据行数少于 5 行时,动作会直接返回空集合(ignore_rec_flag)。
Distribution:定量属性的直方图分布
Distribution 展示 DataFrame 中各定量属性的直方图分布,按偏斜(skew)程度从高到低排序:
实现位于 lux/action/univariate.py 的univariate函数:当data_type_constraint="quantitative"时,枚举所有data_type为 quantitative 的列(排除Number of Records),生成单变量直方图,其 interestingness 分数由skewness(vis.data["Number of Records"])计算(即 scipy 的偏度系数,见 lux/interestingness/interestingness.py 的skewness)。
Occurrence:类别属性的频次柱状图
Occurrence 展示各类别属性(categorical)的柱状分布,按柱间不均程度从高到低排序:
同属 lux/action/univariate.py,当data_type_constraint="nominal"时枚举所有 nominal 列并生成计数柱状图,分数由unevenness计算:先将柱高归一化为占比,再与均匀分布向量求欧氏距离,并用基数折减因子(0.9)**C(C为类别数)惩罚类别过多的图。
延伸:除上述三种,默认动作还包括
temporal(时间序列折线图)、geographical(地理 Choropleth 图)以及针对已表达意图的 Enhance / Filter / Generalize / Custom。完整动作注册见 lux/action/default.py,动作 API 清单见 doc/source/reference/lux.action.rst。
用 User Intent 表达分析兴趣与目标
上面展示的是"不提供任何额外信息"时的基础推荐。更进一步,你可以通过设置 DataFrame 的intent属性,告诉 Lux 你感兴趣的数据属性与取值,从而获得更贴合需求的推荐。
例如,你想了解学生毕业后(MedianEarnings,毕业薪资中位数)的情况,就把感兴趣属性写进 intent:
df.intent = ["MedianEarnings"]再次打印 DataFrame:
df此时 Widget 左侧展示的是你表达为 intent 的可视化(Current Vis),右侧则是基于该 intent 推荐的可视化图库(对应 Enhance、Filter 等动作标签页)。你还可以叠加感兴趣的值,比如关注公立大学(FundingModel=Public)学生的薪资中位数:
df.intent = ["MedianEarnings", "FundingModel=Public"] df关于 intent 的更高级用法(通配符、枚举、|OR 语义、lux.Clause对象等),可参阅 doc/source/guide/intent.rst。这里补充其底层机制:设置 intent 会触发 lux/core/frame.py 中intent的 setter,进而走_parse_validate_compile_intent三步流水线——Parser.parse → Validator.validate_intent → Compiler.compile_intent:
- lux/processor/Parser.py 的
Parser.parse负责把字符串简写解析为lux.Clause对象:含=的字符串被切分为attribute、filter_op、value(支持|分隔的多个取值),纯属性名则直接映射到attribute; - lux/processor/Compiler.py 的
Compiler.compile_intent负责把未完全指定的 intent 展开为"完全指定"的 Vis 集合:先enumerate_collection枚举可视化组合,再populate_data_type_model补齐数据类型/数据模型,最后determine_encoding依据 ShowMe 逻辑(参考 Tableau VizQL 的自动编码规则)为每张图自动决定 mark 类型与 x/y/color 通道。
正是这套流水线,让你可以用最少的描述获得自动编码、可直接阅读的图表。
Steering Recommendations:用 intent 引导推荐走向
在上面的例子中,当MedianEarnings被表达为 intent 时,当前意图可记为集合 C = {MedianEarnings}:
df.intent = ["MedianEarnings"]基于该意图,Lux 会额外生成两类动作——Enhance 与 Filter——帮助你探索"下一步该往哪走"。
Enhance:向意图可视化追加一个属性
Enhance 在当前意图可视化基础上追加一个额外属性,让用户对比新增变量对原可视化带来的影响。例如,当 C' = {MedianEarnings, 新增属性} 时,Enhance 会展示诸如:
- {MedianEarnings,Expenditure}
- {MedianEarnings,AverageCost}
- {MedianEarnings,AverageFacultySalary}
等组合的图表。源码层面(lux/action/enhance.py):enhance(ldf)收集 intent 中的属性子句后追加一个"?"通配子句,枚举出与当前意图相关的所有新增属性,再按 interestingness 排序并截取 Top-K。值得注意的是,实现会先清空已有子句的channel约束,避免推荐图继承输入 Vis 的固定通道——这一点由测试 tests/test_action.py 的test_vary_filter_val显式验证("Ensure recommended vis does not inherit input vis channel")。
Filter:为意图可视化追加一个过滤器
Filter 在当前意图可视化基础上追加一个过滤条件,让用户浏览"在数据的不同子集上,该意图可视化长什么样"。例如 C' = {MedianEarnings, 新增过滤器} 时,Filter 会展示:
- {MedianEarnings,FundingModel=Public}
- {MedianEarnings,Region=Southeast}
- {MedianEarnings,Region=Great Lakes}
源码层面(lux/action/filter.py):add_filter(ldf)遍历所有名义属性中基数(cardinality)介于 1 与 30 之间的候选列(排除已作为 x/y 轴的属性),为每个取值构造一个lux.Clause(attribute=cat, filter_op="=", value=val)过滤器;如果 intent 中已有一个定量属性的不等式过滤(如Acceleration>10),则会生成互补操作符(>的互补为<=,<的互补为>=)的替换推荐——该行为由测试 tests/test_action.py 的test_filter_inequality验证。
推荐排序与 Top-K
无论哪种动作,最终集合都会经过VisList.sort()(按 score 降序,由 lux/_config/config.py 的sort配置决定,默认为descending)以及showK()(默认topk = 15)截断。Lux 还内置了大数据集优化:VisList.refresh_source会根据候选数量与数据行数决定是否开启early_pruning近似采样,并在推荐集合过大时自动把大规模散点图装箱为热力图(heatmap配置,默认 5000 行起触发)。
小结与延伸阅读
至此,你已走完 Lux 的核心探索循环:
import lux一行接入既有 Pandas 代码;- 直接
printDataFrame,得到基于默认动作(Correlation / Distribution / Occurrence 等)的基础推荐; - 通过
df.intent表达感兴趣的属性与取值; - 借助 Enhance(追加属性)、Filter(追加过滤)等动作引导推荐,形成"表达意图 → 浏览推荐 → 再表达意图"的迭代式探索。
如果想继续深入,仓库还提供了大量可研读材料:intent 的高级语法(含lux.Clause、通配符?、|枚举)见 doc/source/guide/intent.rst;动作与可视化对象的 API 参考见 doc/source/reference/lux.action.rst 与 doc/source/reference/lux.vis.rst;推荐分值的详细数学定义(偏度、不均度、单调性、偏差度等)可在 lux/interestingness/interestingness.py 中逐函数查阅;将推荐导出为静态 HTML 或 Altair/Matplotlib/Vega-Lite 代码的用法则见 doc/source/guide/export.rst。
- 数据可视化
- 数据分析
【免费下载链接】lux
Automatically visualize your pandas dataframe via a single print! 📊 💡
相关推荐
HyperFrames快速上手:从init到render渲染出第一条视频的7步清单
HyperFrames快速上手:从init到render渲染出第一条视频的7步清单 HyperFrames 是一个开源的视频渲染框架,核心理念只有一句话: 写
音视频视频AI 技能kohya_ss LoRA微调完整指南:4步从安装到启动训练
kohya_ss LoRA微调完整指南:4步从安装到启动训练 你想用自己的角色、画风或物体训练一个 Stable Diffusion LoRA,却被命令行参数劝
数据可视化数据分析MediaMTX实战指南:三步构建高效流媒体服务平台
MediaMTX实战指南:三步构建高效流媒体服务平台 还在为不同视频设备间的协议兼容性而头疼?面对RTSP、RTMP、WebRTC、HLS等多种流媒体协议,你是
音视频后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考