关于程序员:使用-Mercury-直接从-Jupyter-构建-Web-程序

33次阅读

共计 3209 个字符,预计需要花费 9 分钟才能阅读完成。

动动发财的小手,点个赞吧!

无效的沟通在所有数据驱动的我的项目中都至关重要。数据业余人员通常须要将他们的发现和见解传播给利益相关者,包含业务领导、技术团队和其余数据科学家。

尽管传播数据见解的传统办法(如 PowerPoint 演示文稿和动态报告)广受青眼,但创立它们通常很耗时。

更重要的是,这些服务要求人们来到舒服的 Jupyter Notebook——数据科学家大部分工夫都花在那里。

如果咱们能够通过间接从 Jupyter Notebook 创立交互式和优雅的 Web 应用程序来与其他人分享咱们的发现,那不是很好吗?

为此,Mercury 是一种开源工具,可简化 Jupyter Notebook 上 web 应用程序的创立。

因而,在本文中,我将演示如何应用 Mercury 创立令人惊叹的 Web 应用程序并与别人共享。

开始应用 Mercury

Mercury 创立的 Web 应用程序次要由两件事驱动:

Jupyter Notebook:

这是您开发网络应用程序的中央。咱们应用 Mercury 的输出和输入小部件启用交互性。

输出小部件容许用户提供输出并与应用程序交互。Mercury 反对的一些输出小部件如下所示:

输入小部件用于出现输入。这包含 Markdowns(带变量)、JSON 等。此外,Jupyter 单元格的输入也由 Mercury 出现。

因而,如果您的应用程序创立绘图或打印 DataFrame 等,它们将呈现在网络应用程序的输入面板中。

Mercury Server

服务器将 Jupyter Notebook 出现为 Web 应用程序。

正如咱们将看到的,渲染笔记本就像运行一个命令一样简略。您所要做的就是在笔记本中创立您的网络应用程序。

应用 Mercury 设置 Web 应用程序须要几个简略的步骤。

Install Mercury

首先,应用 pip 装置库:

pip install mercury

当初咱们能够创立带有输出和输入小部件的 Web 应用程序。

应用 Mercury 开发 Web 应用程序

如上所述,应用 Mercury 创立的 Web 应用程序次要由其小部件提供反对。

导入库

要应用它们,咱们首先导入库。重申一下,咱们将在 Jupyter Notebook 上做所有事件。

## mercury_app.ipynb

import mercury as mr

此外,您能够依据须要导入任何其余库。对于这个博客,我将创立一个网络应用程序来剖析一个自行创立的虚构员工数据框。因而,我还将应用以下库:

## mercury_app.ipynb

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

sns.set()

配置应用程序

接下来,咱们通过提供题目和形容来实例化 Mercury 应用程序。

## mercury_app.ipynb

app = mr.App(title="Employee Data Analysis", 
             description="Employee Report in Mercury")

应用小部件填充应用程序

接下来,让咱们增加一些小部件以容许其用户与以下虚构数据进行交互:

实质上,咱们将执行以下操作:

  • 增加一个小部件以上传 CSV 文件。
  • 让用户依据 Company_Name 列中的条目过滤数据。这将是 MultiSelect 小部件。
  • 此外,用户还能够应用滑块依据 Credits 过滤数据。

过滤数据后,咱们将显示以下内容:

  • 过滤后的 DataFrame 的维度。
  • Employee_Salary 和 Employee_Rating 的散点图。
  • 显示 Employee_Status 列散布的条形图。

首先,咱们增加文件上传小部件。

## mercury_app.ipynb

data_file = mr.File(label="Upload CSV")

能够应用 data_file 对象的文件门路属性拜访文件名。因而,文件上传后,咱们将应用 Pandas 读取它,如下所示:

## mercury_app.ipynb

emp_df = pd.read_csv(data_file.filepath)

当初,咱们将增加另外两个小部件 — Company_Name 上的 MultiSelect 小部件和 Credits 列上的 Slider。

## mercury_app.ipynb

company = mr.MultiSelect(value=emp_df.Company_Name.unique(), 
                         choices=emp_df.Company_Name.unique(),
                         label="Select Companies")

在这里,value 参数指的是初始值,choices 显示为可供选择的值列表,label 是显示在小部件旁边的自定义文本。

接下来,咱们有 Slider 小部件。

## mercury_app.ipynb

credits_filter = mr.Slider(value=1,
                           min=emp_df.Credits.min(), 
                           max=emp_df.Credits.max(), 
                           label="Credits Filter", step=1)

这里,value 参数定义了初始值,min 和 max 指的是值的范畴,label 和之前一样,是一个自定义文本。最初,step 定义滑块小部件的步长值。

这样,咱们就实现了为交互增加的小部件。最初一步是依据小部件中的值创立绘图。

填充输入面板

首先,咱们依据从小部件接管到的值过滤数据框。您能够应用 WidgetObj.value 属性拜访它。

换句话说,要检索小部件的值,咱们能够参考 company.value 属性。

## mercury_app.ipynb

new_df = emp_df[(emp_df.Company_Name.isin(company.value)) &
                (emp_df.Credits>=int(credits_filter.value))]

接下来,应用 Markdown 输入小部件,咱们打印过滤后的 DataFrame 的维度。

## mercury_app.ipynb

mr.Md(f"""The DataFrame has {new_df.shape[0]} rows
          and {new_df.shape[1]} columns.""")

Mercury markdown 的一件很酷的事件是您还能够应用 f-strings,如上所示。

最初,咱们创立绘图:

## mercury_app.ipynb

fig, ax = plt.subplots(1, 2, figsize = (16, 9))

sns.scatterplot(data = new_df, ax = ax[0], 
                x = "Employee_Rating", y = "Employee_Salary") ## scatter plot

sns.countplot(x = new_df.Employment_Status, ax = ax[1]) ## count plot
plt.show();

就是这样。当初咱们的 Mercury 应用程序已准备就绪。

运行网络应用

要运行该应用程序,请在命令行中导航到您的应用程序的文件夹并运行以下命令:

mercury run

因而,咱们看到以下内容:

正如预期的那样,咱们有一个小部件来上传文件。让咱们在这里上传虚构数据集。

上传 CSV 文件后,咱们会立刻看到弹出的图表。

当初,咱们能够应用输出小部件来剖析数据。

当咱们更新过滤器时,图表和行数也会更新。这是通过 Mercury 服务器实现的,它放弃笔记本和应用程序之间的继续交互。

事实上,如果咱们更新 notebook,更改会立刻反映进去。

总结

在本文中,咱们学习了如何在舒服的 Jupyter Notebook 上应用 Mercury 构建一个简略的 Web 应用程序。

另外,您还能够应用 Mercury Cloud 在云上托管您的笔记本。只需上传笔记本,即可实现。

然而,如果您不心愿专门在 Mercury Cloud 上托管您的 Web 应用程序,那么您也能够将它部署在任何带有 Docker 的服务器上。

本文由 mdnice 多平台公布

正文完
 0