如何使用 Marimo 进行交互式数据分析

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

Marimo 是开源响应式 Python 笔记本,单元格依赖变化时自动更新,并以普通 .py 文件保存,便于版本管理和分享。本文介绍用 Marimo、Pandas 和 Altair 构建交互式数据分析仪表板:安装库、生成销售数据集、添加地区下拉框和销量滑块、过滤数据、绘制柱状图,并可将同一笔记本直接运行为只读应用,无需额外前端框架。

🔎

延伸解读

响应式执行如何减少手动重跑

Marimo 的响应式模型让单元格在依赖变化时自动更新。文中示例里,filtered_df 依赖 region 和 min_sales,调整下拉框或滑块后,表格和图表无需手动重跑就会同步刷新。这避免了传统笔记本中常见的执行顺序错乱和结果不同步问题,也让分析流程更可预测。

用普通 .py 文件保存带来的协作优势

与 Jupyter 的 .ipynb 格式不同,Marimo 笔记本保存为普通 Python 文件。这意味着可以直接用 Git 进行版本管理,减少因单元格状态和输出缓存导致的合并冲突。文中也提到,分享时对方只需有 Python 环境即可运行,不需要额外的笔记本服务或托管环境。

从分析到应用无需重建前端

同一个 Marimo 笔记本可以通过 python -m marimo run analysis.py 以只读应用模式运行,代码会被隐藏。文中强调,这让你在开发时用于探索数据,之后直接分享为仪表板或交互应用,不必再引入 Streamlit 等额外框架或重写分析逻辑,减少了依赖和迁移成本。

内置 UI 与可视化库的配合方式

Marimo 自带下拉框、滑块、表格等 UI 组件,并兼容 Matplotlib、Plotly、Altair、Seaborn 等可视化库。文中用 Altair 绘制柱状图,并指出部分图表支持将选择事件传回 Python。这为构建更复杂的交互分析提供了基础,但具体能力取决于所用图表库的支持程度。

❓

Q&A

Marimo 和传统 Python 笔记本(如 Jupyter)主要有什么区别?

Marimo 是开源响应式 Python 笔记本,单元格依赖变化时自动更新,并以普通 .py 文件保存,便于版本管理和分享。传统笔记本可能因执行顺序错误导致结果不同步,且转为交互应用通常需要额外工具或重建分析。

如何安装 Marimo 并创建第一个笔记本?

使用 pip install marimo pandas altair 安装,也可用 uv 或 Conda,或安装 marimo[recommended] 包含 DuckDB、Polars 等工具。创建笔记本命令:python -m marimo edit analysis.py,会在浏览器中打开编辑器。

在 Marimo 中如何添加交互控件(如下拉框和滑块)?

使用 mo.ui.dropdown 创建下拉框,mo.ui.slider 创建滑块,并通过 mo.hstack 水平排列。例如:region = mo.ui.dropdown(options=["All"] + sorted(df["region"].unique().tolist()), value="All", label="Region");min_sales = mo.ui.slider(start=0, stop=int(df["units_sold"].max()), value=0, label="Minimum units sold")。

Marimo 的响应式执行是如何工作的?

Marimo 自动跟踪单元格之间的依赖关系。当控件值(如 region 或 min_sales)变化时,依赖它们的单元格(如 filtered_df)会自动重新运行,无需手动重新执行。这是 Marimo 与传统笔记本的主要区别之一。

如何将 Marimo 笔记本作为只读应用运行?

在终端运行:python -m marimo run analysis.py。Marimo 会以应用模式启动笔记本,隐藏可编辑的 Python 代码,使其成为交互式仪表板或应用,无需使用其他前端框架重建。

Marimo 支持哪些可视化库?

Marimo 支持 Matplotlib、Plotly、Altair、Seaborn 和 HoloViews 等流行可视化库。它还能将支持的图表中的选择传递回 Python,从而构建更交互的分析工作流。

🏷️

标签

➡️

继续阅读