Jupyter Notebooks中的动态交互控制
原标题:深度技术分析 | 人脸识别系统是如何找到人的?
来源:AI研习社 链接:https://www.yanxishe.com/TextTranslation/1491
在数据探索中,很少有比反复运行相同的单元,每次都稍微更改输入参数效率更低操作了。尽管知道这一点,但我仍然发现自己反复执行单元格只是为了做最微小的更改,例如,为函数选择不同的值、为分析选择不同的日期范围,或者只是调整图形可视化的主题。这不仅效率低下,而且令人沮丧,打乱了探索性数据分析的流程。
这个问题的理想解决方案是交互式控件,它可以更改输入,而不需要重写或重新运行代码。幸运的是,正如Python中经常出现的情况一样,已经有人遇到了这个问题,并开发了一个很好的工具来解决它。在本文中,我们将了解如何入手使用IPython widgets(ipywidgets),您可以用一行代码构建这些交互控件。这个库允许我们将Jupyter Notebooks 从静态文档转换为交互式仪表板,非常适合探索和可视化数据。
你可以通过点击图片下方的的链接,您可以在mybinder看到本文运行中的带有控件的完全交互式的笔记本。
不幸的是,IPython widgets不能在GitHub或者nbviewer上绘制,但您仍能访问并在本地运行该笔记本。
用于数据可视化的交互式控件示例
开始使用IPywidgets
第一步是一如既往安装库:pip install ipywidgets. 完成后,您可以使用Jupyter Notebook激活部件:
jupyter nbextension enable --py widgetsnbextension
要在JupyterLab中使用,请运行:
jupyter labextension install @jupyter-widgets/jupyterlab-manager
要在笔记本中导入ipywidgets库,请运行:
import ipywidgets as widgetsfrom ipywidgets import interact, interact_manual
假设我们有以下来自Medium平台的文章统计的dataframe(这些是我实际的统计数据,您可以在本文中看到如何获得它们):
Medium统计数据的Dataframe
我们该如何查看超过1000个阅读的所有文章呢? 这是一种方式:
df.loc[df['reads'] > 1000]
但是如果我们想展示超过500个掌声的文章,我们必须编写另一行代码:
df.loc[df['claps'] > 500]
如果我们能够在不编写更多代码的情况下快速更改这些参数(列和阈值)就更好了,试试这个:
def show_articles_more_than(column='claps', x=5000): return df.loc[df[column] > x]
使用@interact的交互式控件
使用@interact装饰器,IPywidgets库会自动为我们提供一个文本框和一个用于选择列和数字的滑块! 它查看我们函数的输入并根据类型创建交互式控件。 现在我们可以使用控件(小部件)对数据进行分段而无需编写代码。
您可能已经注意到部件的一些问题——x可能会取负,我们必须输入正确的列名。 可以通过为函数参数提供特定参数来解决这些问题:
为子集化数据改进部件
现在,我们得到一个列的下拉列表(列表中有选项)和一个限定范围的整数滑块(格式是(开始、停止、步骤))。阅读文档,了解函数参数如何映射到小部件的完整详细信息。
我们可以使用相同的@interact decorator将任何普通函数快速转换为交互式小部件。例如,我们可能在一个目录中有很多图像需要快速查看:
import os
from IPython.display import Image
import os
from IPython.display import Image
@interact
def show_images(file=os.listdir('images/')):
display(Image(fdir+file))
使用ipython小部件浏览图像的示例
现在,我们可以快速循环浏览所有图像,而无需重新运行单元。如果你正在构建一个卷积神经网络,并想检查你的网络分类错误的图像,这可能是有用的。
小部件在数据探索中的用途是无限的。另一个简单的例子是发现两列之间的相关性:
用于两列之间关联的小部件
在ipyWidgets Github上有许多有用的例子。
绘图小部件
交互式小部件对于选择要绘制的数据特别有用。我们可以将相同的@interact decorator与可视化数据的函数一起使用:
使用cufflinks+plotly和ipyWidgets控件制作的交互式散点图
在这里,我们使用神奇的cufflinks+plotly的组合来制作一个交互式的IPython控件。
你可能已经注意到情节更新有点慢。如果是这样的话,我们可以使用@interact_手册,它需要一个按钮来更新。
按钮由@interact_manual decorator制作
现在,只有按下按钮,绘图才会更新。这对于需要一段时间才能返回输出的函数很有用。
扩展交互控件的功能
为了从ipyWidgets库中获得更多信息,我们可以自己制作小部件,并在交互函数中使用它们。我最喜欢的小部件之一是日期选择器。假设我们有一个函数,stats-for-jo-article-published-between,它取一个开始日期和结束日期,并打印他们之间发布的所有文章的统计信息。我们可以使用以下代码进行交互
现在,我们得到两个交互式日期选择小部件,并将值传递到函数中(有关详细信息,请参阅笔记本):
交互式日期选择控件。
如果我们想让一个小部件的选项依赖于另一个小部件的值,我们使用观察函数。在这里,我们改变图像浏览器功能来选择目录和图像。显示的图像列表将根据我们选择的目录进行更新。
使图像小部件依赖于目录小部件的值的代码
当目录为“images”时,左侧显示图像选项;当目录为“nature”时,右侧显示选项
可重复使用的小部件
当我们想要跨单元重用小部件时,我们只需要将它们分配给交互函数的输出。
现在,为了重用stats小部件,我们可以在单元格中调用stats.widget。
在另一个单元中使用的相同小部件
这样我们就可以在笔记本上重用小部件。值得注意的是,小部件彼此绑定,这意味着一个单元格中的值将自动更新为您为另一个单元格中的相同小部件选择的值。
我们还没有接近覆盖所有ipywidget的功能。例如,我们可以将值链接在一起、创建自定义小部件、制作按钮、构建动画、创建带有选项卡的仪表板等等。查看文档以进一步使用。即使这里介绍了少量内容,我希望您能看到交互式控件如何增强笔记本工作流程!
用于为绘图选择主题的简单小部件
Jupyter Notebook是一个伟大的数据探索和分析环境。但是,它本身并不能提供最好的功能。使用诸如笔记本扩展和交互式小部件之类的工具,使笔记本变得栩栩如生,使我们作为数据科学家的工作更加高效。此外,构建小部件并在笔记本中使用它们非常有趣!重复编写大量代码来完成相同的任务是不愉快的,但是使用交互式控件为我们的数据探索和分析创建了一个更自然的流程。
发起:王立鱼 校对:敬爱的勇哥 审核:望北
参与翻译(2人):周雅培、邺调
英文原文:Interactive Controls in Jupyter Notebooks
一THE END一
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com
热门资源
国内人才报告:机...
近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...
AI使物联网更智能...
看到微软对物联网和人工智能的结合感兴趣是一个明...
推荐一批学习自然...
这里推荐一批学习自然语言处理相关的书籍,当然,...
安防智能化大势下...
大部分传统安防设备不仅拍摄视野有限,而且无法事...
20亿创业基金、10...
近日,杭州举办了建设国家新一代人工智能创新发展...
智能在线
400-630-6780
聆听.建议反馈
E-mail: support@tusaishared.com