marimo 数据仪表板:20 分钟搭出一个可交互的 Python 数据分析应用 marimo 数据仪表板:20 分钟搭出一个可交互的 Python 数据分析应用【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo用 marimo 可以把你写的 Python 脚本直接变成可交互的数据仪表板,不需要单独维护前端页面。读完这篇,你就能搭出一个带下拉筛选、趋势图和表格的销售数据看板,并在本地跑起来给别人看。一、它到底解决了什么问题先说几个很真实的场景:改一个筛选条件,整本 notebook 从头重跑一遍;Python 脚本和前端页面分开写,改一处要同步两处;用户点一下下拉框,界面转两秒才出图。marimo 的思路是把整本 notebook 当成一张依赖图:每个单元格声明自己引用了哪些变量,执行引擎记下这些引用关系,之后只重跑真正受影响的节点。依赖追踪有点像浏览器的增量渲染,输入变了只刷新相关区块,其余部分保持不动。这套机制主要落在marimo/_runtime/(执行与调度)和marimo/_ast/(静态解析变量引用)两个模块里,了解路径即可,不用展开读。二、从零到可交互:一条线搭完先装好环境并约定一个运行方式:文件保存为sales_dashboard.py,之后随时可以起一个本地服务来看效果。pip install marimo[recommended] marimo run sales_dashboard.py然后写第一个单元格:导入数据。这里读的是本地 CSV,换成你自己的文件,只要保证后面代码引用的列名一致就行。import marimo as mo import pandas as pd mo.ui.title(月度销售看板) sales pd.read_csv(monthly_sales.csv)再建两个控件:区域下拉框和日期范围。它们会自动出现在仪表板的输入区,后面的单元格直接引用它们的值,你改一下控件上的选项就能换成自己的维度。region mo.ui.dropdown( [全国, 华东, 华南, 华北, 西部], value全国, label分析区域, ) start, end mo.ui.date_range(label时间范围)最后一步是渲染:用 plotly 画趋势线,同时把原始数据用表格组件展示出来。单元格里返回图表对象和表格,marimo 就会自动渲染,不需要任何前端代码。import plotly.express as px def make_chart(area: str): d sales[sales[region] area] return px.line(d, xmonth, yrevenue, title月度销售趋势) make_chart(region) mo.ui.dataframe(sales.head())跑起来之后,切换下拉框只会重新执行图表那个单元格,读数据的单元格不会重跑——这就是前面说的依赖追踪在工作。marimo 数据仪表板的多列布局效果三、让仪表板真正跑起来控件和图表都写好后,怎么把它们排到一行里?marimo 的多列做法很直接:创建应用时声明widthcolumns,再给每个单元格用columnN指定它落在第几列。下面的片段把筛选器放在左列、图表放在右列,两列各自独立成单元格,依赖关系依然由引擎追踪。import marimo app marimo.App(widthcolumns) app.cell(column0) def _(): import marimo as mo region mo.ui.dropdown([华东, 华南], value华东) return region app.cell(column1) def _(region): import plotly.express as px return px.line(sales, xmonth, yrevenue)如果想要更复杂的网格排布(图表占 3 行、KPI 卡片各占 1 格这种),可以参考仓库里的 examples/layouts/grid-dashboard.py,它通过一个 JSON 布局文件描述每个单元格在网格中的位置,思路是通用的。marimo 数据仪表板中表格的筛选与排序组件按用途分三类,选型时对照下面这张表就够了:类别常用组件什么时候用输入类dropdown、slider、date_range让用户筛选、调参展示类ui.dataframe、plotly/altair 图表呈现查询结果与趋势容器类columns、grid 布局把多个面板排进网格四、上生产前必须处理的三件事密钥与凭证不要写死在单元格里数据库账号密码硬编码在 notebook 里,等于随 git 一起泄露。marimo 提供mo.secrets,值可以从环境变量或本地文件里取,单元格里只拿到引用,不拿到明文。db mo.secrets( hostenv:DB_HOST, passwordenv:DB_PASSWORD, )给慢计算加缓存大表重复加载是最常见的卡顿来源。把昂贵的加载函数用mo.cache包一层,依赖没变时直接复用上次的结果,省掉重新读文件。如果数据本身太大,可以考虑先落成 Parquet 分片,单元格里按分片读,而不是一次全量载入。mo.cache def load_sales() - pd.DataFrame: return pd.read_parquet(sales.parquet)本地调试与导出的取舍三种方式覆盖不同阶段:marimo run起本地服务,适合开发时随时看最新交互效果;marimo export html把仪表板导出成静态页面,发给不装 Python 的同事也能用;要部署到服务器上长期跑,仓库里 docker/Dockerfile 已经给了一份现成的容器化起点。marimo run sales_dashboard.py marimo export html sales_dashboard.pymarimo 数据仪表板应用视图的配置项五、延伸阅读与下一步docs/getting_started/ 有安装、快速上手和核心概念三篇,建议按顺序过一遍;examples/layouts/ 里的 columns 和 grid-dashboard 两个示例覆盖了两种主流排布,改改数据就能复用;想确认某个 UI 组件的参数,可以直接翻 marimo/_plugins/ui/ 下的实现,每个组件一个文件,docstring 写得比较全。动手建议:拿你手头任意一个 CSV,给自己定个 30 分钟的小任务——第一列放一个区域或类别的下拉框,第二列放一张随它变化的折线图,用marimo run跑起来,切换一下选项确认只有图表单元格重跑。做到这一步,你就已经完整走了一遍 marimo 的响应式执行模型。marimo 数据仪表板的整体运行效果【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考