首页 / 资讯中心 / 文章详情

HoRain云--Marimo实战:反应式Notebook,把数据分析从“能跑就行”变成可复现的软件

HoRain云--Marimo实战:反应式Notebook,把数据分析从“能跑就行”变成可复现的软件 ★ FEATURED ARTICLE
Jupyter Notebook的根本问题不是功能不够而是执行顺序与代码结构脱节单元格可以任意顺序运行隐藏状态让“重启后能否复现”成为赌博.ipynb的JSON格式让Git diff几乎不可读。Marimo用反应式执行模型和纯.py文件存储重新设计了Notebook。-59一、反应式模型像电子表格一样更新Marimo Notebook由单元格组成但单元格之间由变量依赖驱动修改一个单元格所有引用其输出的单元格自动重跑与电子表格中改一个格、相关公式全部更新同理。这消除了“隐藏状态”问题不存在“这个变量是三步之前某个单元格跑出来的”这种不可复现的情况。二、纯Python文件Git友好Marimo Notebook保存为普通.py文件而不是.ipynb。这意味着可以直接git diff和code review可以用普通Python工具链ruff、mypy检查可以import、可以测试可以当脚本运行-59三、快速开始bash复制下载pip install marimo pandas altair # 或包含DuckDB/Polars等数据工具的推荐安装 pip install marimo[recommended] marimo edit analysis.py浏览器中打开编辑器每个单元格是普通Python代码块。-59四、实战交互式销售仪表盘以下代码直接来自Marimo官方教程风格的完整示例-59python复制下载import marimo as mo import altair as alt import numpy as np import pandas as pd rng np.random.default_rng(42) products [ (Laptop, Tech, 800, 1500), (Phone, Tech, 500, 1200), (Keyboard, Accessories, 30, 150), (Mouse, Accessories, 15, 90), ] regions [US, Europe, Asia] quarters [Q1, Q2, Q3, Q4] rows [] for q in quarters: for r in regions: for name, cat, lo, hi in products: units int(rng.integers(lo, hi) * rng.uniform(0.7, 1.3)) price round(rng.uniform(lo, hi) / 8, 2) rows.append({ product: name, category: cat, region: r, quarter: q, units_sold: units, unit_price: price, revenue: round(units * price, 2), }) df pd.DataFrame(rows) df # 单元格末尾放变量名Marimo自动渲染为交互式表格4.1 添加交互控件python复制下载region_filter mo.ui.dropdown( options[All] regions, valueAll, label区域, ) region_filter4.2 依赖驱动更新python复制下载filtered df if region_filter.value All else df[df[region] region_filter.value] chart alt.Chart(filtered).mark_bar().encode( xproduct:N, ysum(revenue):Q, colorcategory:N, ).properties(title各产品收入) chart修改下拉框filtered和chart自动重算并重绘。不需要手动“Run All”。五、把Notebook变成Web应用bash复制下载marimo run analysis.py同一个文件以只读应用模式运行隐藏代码、只保留交互控件和输出。Marimo Notebook可以直接作为可分享的仪表盘部署而不需要重写为Streamlit/Dash应用。-59六、Marimo vs Jupyter vs Streamlit维度JupyterMarimoStreamlit执行模型手动、有隐藏状态反应式、无隐藏状态每次交互全脚本重跑存储格式.ipynbJSON.py.pyGit友好差好好交互性弱强强定位探索探索应用应用七、适用场景与边界Marimo最适合需要“从探索到可复现交付”的数据分析工作流分析过程本身就是代码代码本身就是可运行的仪表盘。它不适合重度依赖Jupyter生态扩展如某些IPython魔法、widget的场景也不适合已经深度绑定Streamlit部署管线的团队。八、总结Marimo的核心贡献不是“又一个Notebook”而是把反应式编程和纯Python存储引入交互式计算。它让Notebook首次同时满足“探索时的灵活性”和“交付时的可复现性”。对于需要把数据分析当成软件工程来做的团队Marimo提供了一个比Jupyter更严格的默认工作流。
阅读完成 · 觉得有帮助?
咨询建站