数据应用构建指南

在模型调优完成并准备部署之前,需要向各种利益相关者展示结果,无论是直接领导、数据科学家还是客户。通常,会构建一个包含所有视觉元素、数据快照、关键指标指针、各种因素比较以及模型如何实现其目标的故事线的演示文稿。但是,大多数演示/展示并不总是按照计划的方式进行,也无法为所有可能的场景做好准备——因为有太多的因素/组合可以操作。以下是可能会遇到的情况。

商业视角

客户可能会问:“如果模型中不包含某个特定变量/一组变量,对模型结果有何影响?”或者“由于存在一些质量问题,是否可以排除某个特定数据源——这会改变模型结果的好坏吗?”

技术视角

领先的数据科学家可能会问:“如果降低学习率会怎样?它会给出更好的结果吗?”或者“不同模型的变量重要性如何变化?”

如果准备了一个包含固定结果和故事线的演示文稿,那么将无法回答许多这些问题。需要回到起点,进行分析,构建一个新的演示文稿,展示发现,然后可能还会被问到更多的问题。这在时间紧迫的情况下并不是一个有效的处理方式。

解决方案

一种处理方法是构建交互式、直观、易于构建和管理的数据应用,帮助即时回答问题。在本文中,尝试探索使过程更简单的库,节省在冗余任务上的时间,并让更多地关注项目的关键方面,而不是构建演示文稿。

数据源

将使用gapminder数据集,该数据集包含了143个国家多年来的寿命预期、人口等数据。以下是数据的快速视图。将在两个示例中使用相同的数据集。

高层架构

用户界面(UI):这是定义布局的地方——占位符将在运行时从服务器处理的数据/图表中填充。

服务器:这是编写大部分逻辑、数据整理、绘图等的地方。大部分繁重的工作都在这里完成。

R Shiny

如果是R语言的粉丝,那么shiny是构建数据应用的默认选择。Shiny应用有两个组件,一个用户界面对象和一个服务器函数,这些作为参数传递给创建Shiny应用对象的shiny App函数。让更仔细地看看。

UI:定义应用布局,这种情况下,有两个组件(占位符)

一个条形图

用户可以选择年份的滑块输入。

根据用户从滑块中选择的年份过滤数据。

将使用groupby()聚合数据,并选择前20条记录。

使用ggplot生成图表并定义美学。

运行应用程序:

可以玩滑块,图表会立即更新。

Dash

如果是Python的粉丝,会喜欢Dash。Dash是一个高效的Python框架,用于构建Web应用程序。它基于Flask、Plotly.js和React.js构建,Dash广泛用于使用纯Python构建具有高度定制用户界面的数据可视化应用程序。

1. 加载dash库。如果尚未安装库,请安装,例如:

pip install dash

将定义布局,包括一个条形图和一个滑块,类似于Shiny示例。

Dash中,将使用callback()函数来渲染处理过的数据/图表。

根据用户从滑块中选择的年份过滤数据。

将使用groupby()聚合数据,并选择前20条记录。

使用plotly express生成图表并定义美学。

运行数据应用:

在编辑器/控制台中运行代码,打开浏览器,并访问http://127.0.0.1:8050/在浏览器中查看数据应用

可以玩滑块,图表会立即更新。

观察

如果仔细观察这两个示例,会发现在每个阶段都有很多相似之处,如下所示。所以如果知道其中一个库,那么在另一个库上构建应用程序就相当简单了。唯一变化的是语言、函数调用及其参数。

Shiny Dash
SliderInput(…) dcc.Slider(…)
server <- function(input, output) {…} @app.callback(…)
groupby() groupby()
mean() mean()
ggplot plotly express
shiny dash_core_components
dash_html_components
R Python

现在知道如何添加控件、图表并使它们用户互动,是时候检查更复杂的应用程序了。例如,这是一个基于用户选择构建线性回归模型的Shiny应用程序。

可以在GitHub上找到数据应用的截图以供参考。

本文的目的是映射两者之间的相似之处,并尽可能保持简单。无论选择使用Shiny还是Dash,它们在布局、生成图表、组件之间的交互等方面都是相似的。如果对其中之一有合理的知识,那么应用到另一个是很容易的。唯一变化的是语言、函数调用及其参数。所以不要害怕尝试两者。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485