我们都使用 Jupyter Notebooks 来分析和创建数据的可视化,不是吗?这是一个很棒的工具。

当然,您只需将副本发送给您的同事即可共享它们。但是对于那些不关心您的代码但对您的结果感兴趣的人来说,交互式应用程序可能是更好的工具。

这就是来自 mljar 的 Mercury 所承诺的。只需在笔记本的开头添加一个新单元格,您就可以让 Mercury 将代码转换为可以部署到 AWS、Heroku 或任何地方的 Web 应用程序。

它还允许您在笔记本中包含交互式元素,例如滑块、下拉菜单。

下面是我在几分钟内创建的一个简单 Web 应用程序的屏幕截图。如您所见,它包含一个用于交互的滑块。该应用程序非常简单:它加载一组天气数据并绘制特定年份的每月最高温度图表'滑块允许您选择年份。

作者截图作者截图

可以在Mercury 网站上找到更复杂的应用程序。这里有几个:

来自 Mercury Github 存储库的图像 ' 经 mljar 许可使用,AGPLv3 许可证来自 Mercury Github 存储库的图像 ' 经 mljar 许可使用,AGPLv3 许可

但我将介绍如何创建我创建的简单 Web 应用程序。大多数情况下,它是一个非常简单的 Jupyter 笔记本,由六个单元组成。

笔记本

第一个是包含一些 YAML 代码的 raw 单元格,这些代码告诉 Mercury 要做什么以及要包含哪些交互。前三行定义标题、描述并将 show-code 设置为 False。将此设置为 false 意味着单元格中的代码将在最终的 Web 应用程序中不可见。

---
title: Exploring London Weather Data
description: How to use mercury to create a web app
show-code: False
params:
   year:
      input: slider
      label: Select year
      value: 1952
      min: 1952
      max: 2018
---

最后几行定义参数。 year 是一个将出现在笔记本中的变量,随后的行定义了一个滑块,该滑块将设置 year 的值。我认为它们是不言自明的。请注意,单元格以 --- 行开始和结束。

第二个单元格定义变量 year 并为其赋值。在第一个单元格中引用的任何变量都必须像这样在单个单元格中一起定义。

year = 1962

下一个单元格是标记标题。

**# Exploring London Weather Data**

然后我们导入几个库。

import numpy as np
import pandas as pd

还有一些数据。

weather=pd.read_csv('heathrowDataFiltered.csv')

然后我们绘制一个图表,根据年份的值过滤数据。我们也打印介绍图表的消息。

weather[weather['Year']==year].plot(y='Tmax', x='Month',    
   legend=False)

print(f"Monthly maximum temperatures for {year}")

作者图片图片作者

运行笔记本将生成 1962 年的月度最高温度图表,这是我们在开始时设置的值。

但是我们将创建的网络应用程序将允许我们选择我们感兴趣的年份。

那么,我们该怎么做呢?

水星

首先你需要安装水银:

pip install mljar-mercury

然后你需要“添加”你的笔记本:在命令行类型:

mercury add <path_to_notebook>

最后,你运行它:

mercury runserver --runworker

这将启动一个服务器,您的应用程序将在 IP 地址 127.0.0.1:8000 上运行。在网络浏览器中打开它,您会看到如下内容:

图片来自作者图片来自作者

如果您添加了多个笔记本,那么它们都会显示在此处。单击要运行的应用程序的打开按钮,您将看到基于笔记本的应用程序。

作者截图作者截图

当应用程序运行时,它将显示图表;然后,您可以调整滑块并再次运行它以查看您选择的年份的图表。

这是对 Mercury 的快速浏览,仅向您展示了它的一些功能。 Mercury 网站上还有更多内容,尤其是在他们的Github repo中。例如,您可以包含一大堆输入控件,而不仅仅是滑块,Github README 文档详细说明了您可以使用的所有 YAML 命令以及如何将应用程序部署到云中。这远远超出了我在这里所能涵盖的范围,所以你真的需要去看看。

你可以在这里下载我的文件:数据和笔记本

一如既往地感谢您的阅读。如果你想知道我什么时候发表文章,你可以得到我不定期的免费通讯,Technofile,它在 Substack 上。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐