0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何基于Plotly和ipywidgets在Jupyter Notebook中创建交互可视化内容

zhKF_jqr_AI 来源:未知 作者:李倩 2018-10-26 09:26 次阅读

编者按:Zalando数据工程师Alex Martinelli介绍了如何基于Plotly和ipywidgets在Jupyter Notebook中创建交互可视化内容。

本文介绍了如何在Jupyter Notebook中创建交互内容。所谓内容,主要指可视化内容。不过我们很快就会看到,这里的可视化内容不仅包括通常的图表,还包括有助于探索数据的交互界面和动画。

我将首先简要介绍数据可视化,并更准确地定义本文中交互的范围和含义。接着我将快速概览所涉及的工具(Plotly和ipywidgets),顺便提供一些关于Jupyter生态系统的通用建议。最后,我将展示一些具体的例子,这些例子大部分来自我的个人项目,我也将同时介绍这些交互内容对我项目的推进作用。这些例子是为了演示这类工具在Jupyter这一强大框架下的能力,希望这能推动你在自己的项目上尝试这些技术,同时广泛传播这些技术。

介绍

数据可视化是一个优秀数据科学家(或任何涉及数据处理的角色)的核心技能之一。一方面,它能让你(或者团队的其他成员)更好地理解数据集的本质;另一方面,它能让你向(懂技术、不懂技术的)外部受众传递合适的消息。

在网上搜索“数据可视化”时,D3.js是推荐最多的库之一。但有人断言,你越是需要个性化的定制方法,就越有必要深入学习这一工具。相反,如果你的目标是快速、“标准”可视化,那么使用你选择的编程语言提供的那些包也许更合适。

Python生态系统而言,一开始免不了要和Matplotlib基础构件打交道,接着可能扩大到高层替代库(例如,Seaborn、Bokeh)。此外,特别是对数据科学图表而言,越来越多人选择使用Jupyter notebook。我相信这背后的主要原因是Jupyter将不同的媒介很好地封装成了一个简单的解决方案:代码、文字、可视化。它不仅让你的整个工作流程更方便、更有乐趣,还大大简化了工作成果的分享(面向教学,也面向协作)。

我个人发现在Jupyter下使用Matplotlib + Seaborn组合最符合我的可视化需求,比Pandas自带的绘图功能要强。需要动画功能时,Matplotlib 1.1版以来提供的简单动画框架提供了很好的易用性和结果美观性的折衷。

不过,总有一个时刻,我们会发现自己需要更多。并不是说完全转移到全新的工具,而是根据需求使用新的工具。在我看来,交互可以分为两类:

交互式图表:显示当前浏览的特定数据点或区域的实时信息,高亮/隐藏特定内容。

用于内容交互的部件:从图表扩展至其他媒介和内容,一般需要复杂UI元素以收集额外输入。

目前而言,我发现Plotly能很好地解决第一个需求。至于后一个需求,我专门搜索了能够方便地嵌入Jupyter的方案,这样我就可以将任何notebook转变为交互式面板。最后我找到了ipywidgets.

工具

在详细介绍之前提到的工具之前,我想先分享一下个人使用的Python、Jupyter相关技术栈:

Anaconda(Python发行版)

使用virtualenv管理多个隔离的Python环境(或者使用Anaconda自带的环境管理方案)

使用nbcondakernels管理Jupyter notebook的多个环境/核

使用Jupyter扩展定制Jupyter

Plotly

使用Plotly创建和分享交互式图表极其便利。它甚至为图表提供了无缝的web托管——公开内容免费托管,私有内容需付费。当然,如有必要,Plotly完全可以离线使用,直接在notebook中渲染交互式图表,或者导出至(可交互)HTML文件。

如果这还不够,Plotly还有两个更有吸引力的特性:plot_mpl和cufflinks(cufflink意为袖扣)。

plot_mpl可以直接将纯matplotlib图像转换为可交互的Plotly图像(目前转换尚不完美,但这一功能正在飞速改善)。

cufflinks让Plotly可以自动绑定Pandas的dataframe。有了自动绑定,只需单次调用,便可基于dataframe内容得到高质量的数据可视化,例如自动解析日期数据,用恰当的格式显示;推断色调;管理标签

一般情况下,开始使用Plotly极其方便,只需运行:

pip install plotly

pip install cufflinks

接着为notebook选择在线模式或离线模式。然后只需记住,.iplot()是在Jupyter中显示内容的神奇语句。

ipywidgets

ipywidgets可以很方便地在notebook中创建交互界面。同样,它很好地平衡了灵活性和易用性。

依照安装步骤安装ipywidgets后,就可以直接使用了。ipywidgets提供了供交互界面使用的组件,例如滑动条、复选框、按钮、文本框,等等。

ipywidgets上手很容易,理解交互函数即可。交互函数能够基于传入的参数自动创建部件。例如,传入一个布尔值参数会自动生成对应的复选框;传入一个列表会自动生成下拉菜单。

ipywidgets的这些机制相当直截了当,官方文档的说明也很棒,所以现在让我们直接进入下一节。

作品展示

为了演示到目前为止讲解的内容,也为了无耻地给自己打广告,我将举几个源自我个人项目的例子。

我的所有项目都能在GitHub上找到(5agado),其中一些简单项目是自包含、可复现的notebook。

例一:Fitbit面板

量化生活践行者,以及想要为个人数据创建简易面板(但不打算创建完整的面板应用)来探索数据、获取洞见的人,也许会对这个项目特别感兴趣。

我的Fitbit睡眠数据是一个需要可视化不同统计量(睡眠效率、睡眠得分、初次入睡时间等)、不同尺度(日、周、年等)数据的例子。使用Seaborn的刻面图(factorplot)可以一次性可视化一组目标统计量。

这在简单情形下很有用,但在复杂情形下就不那么有效了。例如,可视化每月的工作日数据:

上图效果很差,呈现的信息很杂乱,而且对我这种色彩辨识能力不强的人而言,很难看清数据。相反,Plotly为这种情况提供了很好的解决方案,我们可以通过三种不同方式创建Plotly图表:

直接将matplotlib图像传给iplot_mpl方法

使用Plotly语法从头创建图表

使用cufflinks直接基于Pandas的dataframe绘图

就这一情形而言,最后一种方式最方便,也最准确。

例二:营养学数据库

有时我们需要为一些结构化内容创建一个简易界面。例如,我在探索营养学数据的时候就有这个需求。我探索的是USDA National Nutrient Database,它提供了丰富的数据,相对而言比较复杂,不过,使用Python和Pandas分析这个数据库倒是不难。

有人也许会主张这其实属于数据库领域,使用SQL工具更合适。这个主张也许是对的,但我还是想展示下,在Jupyter下使用ipywidgets完成这一任务有多容易。相比使用单独的数据库系统,这可能是一个更好的临时方案,特别是在数据探索阶段。

从上图我们可以看到,ipywidgets使用起来很方便,只需将原Python函数和需要自动映射到部件的参数传给interact函数:

food(食物):空列表,将被转换为文本框

nutrient(营养物质):将被转换为下拉菜单

例三:动画

如前所述,一旦具备了良好的工具,交互内容在各种场景下都有用武之地,例如动画。

将(min,max,step)元组传给interact函数后,能自动生成对应的滑动条。以不同的分辨率或复杂度查看动画时,这样一个简单的整数滑动条很有帮助。例如,模拟[康威生命游戏]:

我们还可以定制界面,以快速浏览数据和相关分析结果。比如,我曾经可视化在猫狗数据集上训练的CNN中间层的输出:

现在有很多可视化的框架和工具,用于机器学习任务的特别多,不过,有时候像上面那样快速粗暴的解决方案可以提供所有实际需要的信息和功能,同时节省大量时间。

结语

上面的例子仅仅使用了工具的基本功能。例如ipywidgets仅仅使用了interact函数和类型推断。ipywidgets其实还支持自定义部件和部件组合,详见官方文档。

我希望这篇文章能够展现这些工具的简单性和可定制性。同时,我也希望能得到关于数据可视化工具方面的反馈,特别是包含3D建模和动画的框架。

最后安利下dunovank/jupyter-themes,这个GitHub仓库提供了许多Jupyter主题和可视化风格。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可视化
    +关注

    关注

    1

    文章

    1013

    浏览量

    20548
  • 数据集
    +关注

    关注

    4

    文章

    1176

    浏览量

    24335

原文标题:Plotly与ipywidgets:交互可视化很容易

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    matlab notebook 教程

    制作的M-book文档不仅拥有 MS-Word 的全部文字处理功能,而且具备MATLAB无与伦比的数学解算能力和灵活自如的计算结果可视化能力。教程中有详细的使用方法。内容目录:Notebook
    发表于 02-24 15:19

    可视化MES系统软件

    单品在生产线上的装配制造过程,设计交互界面,使企业实现车间生产数据各方面应用的可视化管理,为企业节约成本、创造更多的价值。2、MES系统软件架构针对MES系统软件制造业车间的应用情
    发表于 11-30 19:55

    IDE的交互式文档Jupyter Notebook详解

    IDE之Jupyter交互式文档Jupyter Notebook简介、安装、使用方法详细攻略
    发表于 12-26 10:38

    【PYNQ-Z2试用体验】Jupyter Notebook体验

    ,接下来我们来体验一下。交互式Python浏览器地址栏输入开发板的IP地址,我这里是192.168.1.99,可登录到jupyter notebook,如下图所示:图1 密码为xilinx,登录后如下
    发表于 02-17 19:37

    你绝没用过的一款高逼格空间可视化工具

    ='geojson')数据导入进来后,作一些简单的自定义设置,就可以生成逼格满满的空间可视化图:除了 Jupyter Notebook 展示,还可以导出为可
    发表于 07-30 04:00

    VR与三维可视化电厂的作用

    才会拥有的体验。智能培训模块采用虚拟现实技术,利用数字电厂的数据,建立相应的软硬件平台,利用定制的电厂三维模型,方便快捷地实现三维展示或者VR体验,提供安全的多用户虚拟世界,通过交互式的可视化
    发表于 12-03 15:03

    常见的几种可视化介绍

    说说常见的几种可视化一、信息可视化信息可视化就是对抽象数据进行直观视觉呈现的研究,抽象数据既包含数值数据,也包含非数值数据如文本信息、地图信息等,它们可通过利用图形图像处理、人机交互
    发表于 07-12 07:49

    plotly可视化绘制嵌入式子图的方法

    plotly可视化绘制嵌入式子图# 嵌入式子图import plotly as pyimport plotly.graph_objs as gopyplt
    发表于 12-14 07:08

    华秋DFM可视化BOM交互焊接工具——SMT工厂、PCB工程师的福音来了!

    箭头标识位置按照位号、封装、规格值筛选某个器件,右边箭头标识位置筛选贴片元件及插件元件。02工具链接分享使用可视化BOM交互焊接工具,如需分享给别人使用时可点击“复制链接”,也可以
    发表于 12-23 10:59

    华秋DFM推出可视化BOM交互焊接工具,助力SMT工厂提升效率

    箭头标识位置按照位号、封装、规格值筛选某个器件,右边箭头标识位置筛选贴片元件及插件元件。02工具链接分享使用可视化BOM交互焊接工具,如需分享给别人使用时可点击“复制链接”,也可以
    发表于 12-23 11:16

    五大最实用的Jupyter Notebook扩展插件

    Jupyter Notebook是当前一种十分流行的基于网页的开发环境,它灵活、高度可扩展,不仅允许用户创建和共享含有代码的文档,还可以植入公式、可视化图片和描述性的文本等,是大数据分
    的头像 发表于 03-20 16:35 11.4w次阅读

    以后Jupyter也能做可视化Debug了

    Notebook 都各有特色,Jupyter 适合做数据分析这些需要可视化的操作,PyCharm 更适合做完整的 Python 项目。然而,因为交互式操作,很少会有开发者想到用
    的头像 发表于 01-06 16:09 2203次阅读

    常用的五种Jupyter Notebook扩展插件

    Jupyter Notebook 是一个很棒的教学、探索和编程环境,但其功能不足也是出了名的。幸好,有许多方法可以改进这个不错的工具,如 Jupyter Notebook 扩展工具。
    的头像 发表于 09-26 10:35 2063次阅读

    Jupyter notebook在超算平台上使用的详细教程

    Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟
    的头像 发表于 11-23 15:42 1124次阅读
    <b class='flag-5'>Jupyter</b> <b class='flag-5'>notebook</b>在超算平台上使用的详细教程

    什么是 Jupyter Notebook

    Jupyter Notebook 是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码、数学方程、可视化和 Markdown,其用途包括数据清理和转换、数值模拟、统计建
    的头像 发表于 10-16 11:15 1863次阅读
    什么是 <b class='flag-5'>Jupyter</b> <b class='flag-5'>Notebook</b>