关于切换到面板的乐趣,而不仅仅是

图片

顾名思义,我们将讨论面板库,该库允许您将Jupyter笔记本转换为安全的Web应用程序,其中的填充对于非技术用户而言是隐藏的,但仍然可以操纵内部参数,即不仅可以重建数据,还可以向内核发出请求。 TL; DR Shiny for Python。

业务分析的主要问题之一是,无论它多么酷,
它通常无法触及根据其做出决策的用户。 IBM AI和数据科学部门的CTO 表示 ,数据科学领域中只有13%的项目投产了,主要原因之一是所有参与项目的人之间的合作都很困难。 缩小数据撒旦专家,部署项目的程序员和主题分析师之间的差距,可以显着增加总体工作量,减少时间,并使最终产品更周到。

此问题已通过此细分市场中当前可用的几种产品解决。
为了实现良好的可伸缩部署,请使用Dash 。 在上一篇文章中,我做了一点
二手车市场分析示例的图示。 为了获得Dasha的优势,您需要以需要单独编写的单独应用程序的形式付费,图形支持Plotly,需要设计界面,调整一些CSS / HTML,并且在更新分析模型时(如果在笔记本中)需要支持两个代码,通常在项目开发过程中不太方便。

从另一端看, VoilaPanel解决了这个问题(用D'Artagnanowski的声音,Voila必须大胆地说:“ Voila!”)。 Voila来自记事本,支持Jupyter交互式小部件,无论语言如何,它都可以与Web应用程序中的内核进行通信(创建者谈论语言独立性,但是对于R来说,具有Shiny并不重要,并且Julia上没有业务分析) Voila允许您单击两次以创建一个交互式应用程序(不包括介绍(例如ipywidgets),您需要体面地单击)。 Panel是一个纯python解决方案,并且从服务器的另一端处理相同的问题,而记事本和Jupyter是可选的。 该模型可以保存在常规python文件中,并且服务器不需要整个Jupyter生态系统。 Panel不是为特定的图形库量身定制的( 示例在matplotlib,bokeh,altair和plotly上给出)。

这两个选项-Panel和Voila都不适合用作已加载的应用程序,但并不是为此而设计的,其目的是进行分析,向结果提交仪表盘,删除指向分析师/经理的链接,让他们使用参数和请求,修复中间问题。结果。 如果您突然需要为广泛的人群提出长期的申请-您可以转移到Dash并铸造青铜。

接下来,简要说明该过程的外观。 让我们根据法国和德国二手车市场上的数据制作一个简单的仪表板(仅因为它就在眼前,您可以在另一篇文章中了解数据集的详细信息)。 通过该功能,可以根据模型报价的统计信息,根据年龄及其平均偏差计算平均价格,并建立一年内因噪音而平滑的价格分布。

首先,在Panel中创建一个仪表板,然后使用Voila。 记事本和数据可以从存储库中下载,也可以通过nbviewer浏览( panel ,voila)。

与笔记本中的分析没有什么不同的动作我将不加赘述,可以通过链接在笔记本中看到它们,没有什么新鲜的了。

首先,我们导入库和数据。 我将使用Bokeh来处理图形,因为我有Bokeh的标准配置,并且有空白用于复制粘贴。

接下来,我们将准备几个功能:

wm和std在对熊猫中的数据进行分组时使用它们
default_graph和default_bar_plot-创建空白图表空白
color_picker-分布调色板中的选定对象

在主体部分,我们声明使用的小部件

# declare panel widgets multi_select = pn.widgets.MultiSelect(name='Model selection (Ctrl for multiple)', value=['opel corsa (FR)', 'citroen c3 (FR)'], options=list(raw_data['model'].unique()), size=8) year_slider = pn.widgets.IntSlider( name='Year', start=2007, end=2016, step=1, value=2012) checkbox = pn.widgets.Checkbox(name='Show trend error bars') 

接下来,我们创建一个描述使用装饰器进行交互的函数。

 @pn.depends(multi_select.param.value, year_slider.param.value, checkbox.param.value) def update(models, year, checkbox_status): 

小部件使您可以选择模型列表,选择年份以按价格查看要约的分布,还可以在趋势图上显示/隐藏价格与当年平均值的标准偏差。

在交互内部,我们创建图表空白,然后为所有选定的元素进行统计,创建图形元素(线,标记,错误统计),
将所有内容放在一起,然后将图形作为两个选项卡返回以紧凑显示。

  return pn.Tabs(('Distribution', bokehdist), ('Trend', bokehfig)) 

接下来,我们通过放置带有图形的小部件和选项卡来创建布局。
通过简单的表格显示,该过程以橡木的简单性和灵活性而感到满意。

 pn.Row(pn.Column('### Dashboard demo', multi_select, year_slider, checkbox), update).servable() 

servable()方法使我们的仪表板可用于面板服务器运行
独立于命令行更改服务器设置。 如果我们继续使用记事本,则其中的所有交互功能均可用。 为了使应用程序看起来像外部用户,我们添加了show()方法。 在此基础上,我们所有的额外工作都已结束,并且它们与仅构建图并没有显着差异。

这就是仪表板在笔记本中的外观。

图片

如果要使仪表板可从localhost外部访问,则必须允许我们通过仔细的白名单或诸如此类的宽大手势处理来自外部的请求

 panel serve Dashboard_demo_panel.ipynb --allow-websocket-origin=* 

分析人员将看到的应用程序与笔记本中的应用程序没有什么不同

图片

作者说,这将不允许执行第三方代码,但是据说最近一次网络研讨会的保护程度有些回避。 与分析人员共享-足够了,不需要膝盖上收集的这些东西伸出来。

最后,让我们比较一下使用Voila的方法。
带有ipywidgets和bokeh的版本对我不满意,在输出中使用javascript宣誓就职。
因此,我在matplotlib静态图表中看到了它。

要使用下拉列表从ipywidgets组装相同的界面,需要一个滑动器,一个复选框和两个选项卡,这需要一定的努力和cru肘,缺乏相同的表灵活性。 为了将图形拉到选项卡上,必须将主要功能的主体锯掉,也就是说,与第一种情况相比,笔记本必须进行更多的调整。

要启动安装了Jupyter扩展名的Web应用程序,只需单击一下即可。 图片非常相似。 由于功能上的差异-所使用的Interactive窗口小部件不会计算默认功能,因此仅在与用户进行首次交互后才会显示图形。

图片

就我个人而言,根据可用性,Panel显然赢得了可用性。 仅需少量操作即可获得相同的结果,并且将其添加到笔记本的额外工作量也很小。 因此,一切都友好而愉快地移到面板上!

Source: https://habr.com/ru/post/zh-CN470864/


All Articles