0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何基于Plotly和ipywidgets在Jupyter Notebook中創(chuàng)建交互可視化內(nèi)容

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-10-26 09:26 ? 次閱讀

編者按:Zalando數(shù)據(jù)工程師Alex Martinelli介紹了如何基于Plotly和ipywidgets在Jupyter Notebook中創(chuàng)建交互可視化內(nèi)容。

本文介紹了如何在Jupyter Notebook中創(chuàng)建交互內(nèi)容。所謂內(nèi)容,主要指可視化內(nèi)容。不過(guò)我們很快就會(huì)看到,這里的可視化內(nèi)容不僅包括通常的圖表,還包括有助于探索數(shù)據(jù)的交互界面和動(dòng)畫(huà)。

我將首先簡(jiǎn)要介紹數(shù)據(jù)可視化,并更準(zhǔn)確地定義本文中交互的范圍和含義。接著我將快速概覽所涉及的工具(Plotly和ipywidgets),順便提供一些關(guān)于Jupyter生態(tài)系統(tǒng)的通用建議。最后,我將展示一些具體的例子,這些例子大部分來(lái)自我的個(gè)人項(xiàng)目,我也將同時(shí)介紹這些交互內(nèi)容對(duì)我項(xiàng)目的推進(jìn)作用。這些例子是為了演示這類工具在Jupyter這一強(qiáng)大框架下的能力,希望這能推動(dòng)你在自己的項(xiàng)目上嘗試這些技術(shù),同時(shí)廣泛傳播這些技術(shù)。

介紹

數(shù)據(jù)可視化是一個(gè)優(yōu)秀數(shù)據(jù)科學(xué)家(或任何涉及數(shù)據(jù)處理的角色)的核心技能之一。一方面,它能讓你(或者團(tuán)隊(duì)的其他成員)更好地理解數(shù)據(jù)集的本質(zhì);另一方面,它能讓你向(懂技術(shù)、不懂技術(shù)的)外部受眾傳遞合適的消息。

在網(wǎng)上搜索“數(shù)據(jù)可視化”時(shí),D3.js是推薦最多的庫(kù)之一。但有人斷言,你越是需要個(gè)性化的定制方法,就越有必要深入學(xué)習(xí)這一工具。相反,如果你的目標(biāo)是快速、“標(biāo)準(zhǔn)”可視化,那么使用你選擇的編程語(yǔ)言提供的那些包也許更合適。

對(duì)Python生態(tài)系統(tǒng)而言,一開(kāi)始免不了要和Matplotlib基礎(chǔ)構(gòu)件打交道,接著可能擴(kuò)大到高層替代庫(kù)(例如,Seaborn、Bokeh)。此外,特別是對(duì)數(shù)據(jù)科學(xué)圖表而言,越來(lái)越多人選擇使用Jupyter notebook。我相信這背后的主要原因是Jupyter將不同的媒介很好地封裝成了一個(gè)簡(jiǎn)單的解決方案:代碼、文字、可視化。它不僅讓你的整個(gè)工作流程更方便、更有樂(lè)趣,還大大簡(jiǎn)化了工作成果的分享(面向教學(xué),也面向協(xié)作)。

我個(gè)人發(fā)現(xiàn)在Jupyter下使用Matplotlib + Seaborn組合最符合我的可視化需求,比Pandas自帶的繪圖功能要強(qiáng)。需要?jiǎng)赢?huà)功能時(shí),Matplotlib 1.1版以來(lái)提供的簡(jiǎn)單動(dòng)畫(huà)框架提供了很好的易用性和結(jié)果美觀性的折衷。

不過(guò),總有一個(gè)時(shí)刻,我們會(huì)發(fā)現(xiàn)自己需要更多。并不是說(shuō)完全轉(zhuǎn)移到全新的工具,而是根據(jù)需求使用新的工具。在我看來(lái),交互可以分為兩類:

交互式圖表:顯示當(dāng)前瀏覽的特定數(shù)據(jù)點(diǎn)或區(qū)域的實(shí)時(shí)信息,高亮/隱藏特定內(nèi)容。

用于內(nèi)容交互的部件:從圖表擴(kuò)展至其他媒介和內(nèi)容,一般需要復(fù)雜UI元素以收集額外輸入。

目前而言,我發(fā)現(xiàn)Plotly能很好地解決第一個(gè)需求。至于后一個(gè)需求,我專門(mén)搜索了能夠方便地嵌入Jupyter的方案,這樣我就可以將任何notebook轉(zhuǎn)變?yōu)榻换ナ矫姘濉W詈笪艺业搅薸pywidgets.

工具

在詳細(xì)介紹之前提到的工具之前,我想先分享一下個(gè)人使用的Python、Jupyter相關(guān)技術(shù)棧:

Anaconda(Python發(fā)行版)

使用virtualenv管理多個(gè)隔離的Python環(huán)境(或者使用Anaconda自帶的環(huán)境管理方案)

使用nbcondakernels管理Jupyter notebook的多個(gè)環(huán)境/核

使用Jupyter擴(kuò)展定制Jupyter

Plotly

使用Plotly創(chuàng)建和分享交互式圖表極其便利。它甚至為圖表提供了無(wú)縫的web托管——公開(kāi)內(nèi)容免費(fèi)托管,私有內(nèi)容需付費(fèi)。當(dāng)然,如有必要,Plotly完全可以離線使用,直接在notebook中渲染交互式圖表,或者導(dǎo)出至(可交互)HTML文件。

如果這還不夠,Plotly還有兩個(gè)更有吸引力的特性:plot_mpl和cufflinks(cufflink意為袖扣)。

plot_mpl可以直接將純matplotlib圖像轉(zhuǎn)換為可交互的Plotly圖像(目前轉(zhuǎn)換尚不完美,但這一功能正在飛速改善)。

cufflinks讓Plotly可以自動(dòng)綁定Pandas的dataframe。有了自動(dòng)綁定,只需單次調(diào)用,便可基于dataframe內(nèi)容得到高質(zhì)量的數(shù)據(jù)可視化,例如自動(dòng)解析日期數(shù)據(jù),用恰當(dāng)?shù)母袷斤@示;推斷色調(diào);管理標(biāo)簽。

一般情況下,開(kāi)始使用Plotly極其方便,只需運(yùn)行:

pip install plotly

pip install cufflinks

接著為notebook選擇在線模式或離線模式。然后只需記住,.iplot()是在Jupyter中顯示內(nèi)容的神奇語(yǔ)句。

ipywidgets

ipywidgets可以很方便地在notebook中創(chuàng)建交互界面。同樣,它很好地平衡了靈活性和易用性。

依照安裝步驟安裝ipywidgets后,就可以直接使用了。ipywidgets提供了供交互界面使用的組件,例如滑動(dòng)條、復(fù)選框、按鈕、文本框,等等。

ipywidgets上手很容易,理解交互函數(shù)即可。交互函數(shù)能夠基于傳入的參數(shù)自動(dòng)創(chuàng)建部件。例如,傳入一個(gè)布爾值參數(shù)會(huì)自動(dòng)生成對(duì)應(yīng)的復(fù)選框;傳入一個(gè)列表會(huì)自動(dòng)生成下拉菜單。

ipywidgets的這些機(jī)制相當(dāng)直截了當(dāng),官方文檔的說(shuō)明也很棒,所以現(xiàn)在讓我們直接進(jìn)入下一節(jié)。

作品展示

為了演示到目前為止講解的內(nèi)容,也為了無(wú)恥地給自己打廣告,我將舉幾個(gè)源自我個(gè)人項(xiàng)目的例子。

我的所有項(xiàng)目都能在GitHub上找到(5agado),其中一些簡(jiǎn)單項(xiàng)目是自包含、可復(fù)現(xiàn)的notebook。

例一:Fitbit面板

量化生活踐行者,以及想要為個(gè)人數(shù)據(jù)創(chuàng)建簡(jiǎn)易面板(但不打算創(chuàng)建完整的面板應(yīng)用)來(lái)探索數(shù)據(jù)、獲取洞見(jiàn)的人,也許會(huì)對(duì)這個(gè)項(xiàng)目特別感興趣。

我的Fitbit睡眠數(shù)據(jù)是一個(gè)需要可視化不同統(tǒng)計(jì)量(睡眠效率、睡眠得分、初次入睡時(shí)間等)、不同尺度(日、周、年等)數(shù)據(jù)的例子。使用Seaborn的刻面圖(factorplot)可以一次性可視化一組目標(biāo)統(tǒng)計(jì)量。

這在簡(jiǎn)單情形下很有用,但在復(fù)雜情形下就不那么有效了。例如,可視化每月的工作日數(shù)據(jù):

上圖效果很差,呈現(xiàn)的信息很雜亂,而且對(duì)我這種色彩辨識(shí)能力不強(qiáng)的人而言,很難看清數(shù)據(jù)。相反,Plotly為這種情況提供了很好的解決方案,我們可以通過(guò)三種不同方式創(chuàng)建Plotly圖表:

直接將matplotlib圖像傳給iplot_mpl方法

使用Plotly語(yǔ)法從頭創(chuàng)建圖表

使用cufflinks直接基于Pandas的dataframe繪圖

就這一情形而言,最后一種方式最方便,也最準(zhǔn)確。

例二:營(yíng)養(yǎng)學(xué)數(shù)據(jù)庫(kù)

有時(shí)我們需要為一些結(jié)構(gòu)化內(nèi)容創(chuàng)建一個(gè)簡(jiǎn)易界面。例如,我在探索營(yíng)養(yǎng)學(xué)數(shù)據(jù)的時(shí)候就有這個(gè)需求。我探索的是USDA National Nutrient Database,它提供了豐富的數(shù)據(jù),相對(duì)而言比較復(fù)雜,不過(guò),使用Python和Pandas分析這個(gè)數(shù)據(jù)庫(kù)倒是不難。

有人也許會(huì)主張這其實(shí)屬于數(shù)據(jù)庫(kù)領(lǐng)域,使用SQL工具更合適。這個(gè)主張也許是對(duì)的,但我還是想展示下,在Jupyter下使用ipywidgets完成這一任務(wù)有多容易。相比使用單獨(dú)的數(shù)據(jù)庫(kù)系統(tǒng),這可能是一個(gè)更好的臨時(shí)方案,特別是在數(shù)據(jù)探索階段。

從上圖我們可以看到,ipywidgets使用起來(lái)很方便,只需將原Python函數(shù)和需要自動(dòng)映射到部件的參數(shù)傳給interact函數(shù):

food(食物):空列表,將被轉(zhuǎn)換為文本框

nutrient(營(yíng)養(yǎng)物質(zhì)):將被轉(zhuǎn)換為下拉菜單

例三:動(dòng)畫(huà)

如前所述,一旦具備了良好的工具,交互內(nèi)容在各種場(chǎng)景下都有用武之地,例如動(dòng)畫(huà)。

將(min,max,step)元組傳給interact函數(shù)后,能自動(dòng)生成對(duì)應(yīng)的滑動(dòng)條。以不同的分辨率或復(fù)雜度查看動(dòng)畫(huà)時(shí),這樣一個(gè)簡(jiǎn)單的整數(shù)滑動(dòng)條很有幫助。例如,模擬[康威生命游戲]:

我們還可以定制界面,以快速瀏覽數(shù)據(jù)和相關(guān)分析結(jié)果。比如,我曾經(jīng)可視化在貓狗數(shù)據(jù)集上訓(xùn)練的CNN中間層的輸出:

現(xiàn)在有很多可視化的框架和工具,用于機(jī)器學(xué)習(xí)任務(wù)的特別多,不過(guò),有時(shí)候像上面那樣快速粗暴的解決方案可以提供所有實(shí)際需要的信息和功能,同時(shí)節(jié)省大量時(shí)間。

結(jié)語(yǔ)

上面的例子僅僅使用了工具的基本功能。例如ipywidgets僅僅使用了interact函數(shù)和類型推斷。ipywidgets其實(shí)還支持自定義部件和部件組合,詳見(jiàn)官方文檔。

我希望這篇文章能夠展現(xiàn)這些工具的簡(jiǎn)單性和可定制性。同時(shí),我也希望能得到關(guān)于數(shù)據(jù)可視化工具方面的反饋,特別是包含3D建模和動(dòng)畫(huà)的框架。

最后安利下dunovank/jupyter-themes,這個(gè)GitHub倉(cāng)庫(kù)提供了許多Jupyter主題和可視化風(fēng)格。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 可視化
    +關(guān)注

    關(guān)注

    1

    文章

    1141

    瀏覽量

    20734
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1197

    瀏覽量

    24532

原文標(biāo)題:Plotly與ipywidgets:交互可視化很容易

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    可視化MES系統(tǒng)軟件

    單品在生產(chǎn)線上的裝配制造過(guò)程,設(shè)計(jì)交互界面,使企業(yè)實(shí)現(xiàn)車間生產(chǎn)數(shù)據(jù)各方面應(yīng)用的可視化管理,為企業(yè)節(jié)約成本、創(chuàng)造更多的價(jià)值。2、MES系統(tǒng)軟件架構(gòu)針對(duì)MES系統(tǒng)軟件制造業(yè)車間的應(yīng)用情
    發(fā)表于 11-30 19:55

    IDE的交互式文檔Jupyter Notebook詳解

    IDE之Jupyter交互式文檔Jupyter Notebook簡(jiǎn)介、安裝、使用方法詳細(xì)攻略
    發(fā)表于 12-26 10:38

    【PYNQ-Z2試用體驗(yàn)】Jupyter Notebook體驗(yàn)

    ,接下來(lái)我們來(lái)體驗(yàn)一下。交互式Python瀏覽器地址欄輸入開(kāi)發(fā)板的IP地址,我這里是192.168.1.99,可登錄到jupyter notebook,如下圖所示:圖1 密碼為xilinx,登錄后如下
    發(fā)表于 02-17 19:37

    你絕沒(méi)用過(guò)的一款高逼格空間可視化工具

    ='geojson')數(shù)據(jù)導(dǎo)入進(jìn)來(lái)后,作一些簡(jiǎn)單的自定義設(shè)置,就可以生成逼格滿滿的空間可視化圖:除了 Jupyter Notebook 展示,還可以導(dǎo)出為可
    發(fā)表于 07-30 04:00

    VR與三維可視化電廠的作用

    才會(huì)擁有的體驗(yàn)。智能培訓(xùn)模塊采用虛擬現(xiàn)實(shí)技術(shù),利用數(shù)字電廠的數(shù)據(jù),建立相應(yīng)的軟硬件平臺(tái),利用定制的電廠三維模型,方便快捷地實(shí)現(xiàn)三維展示或者VR體驗(yàn),提供安全的多用戶虛擬世界,通過(guò)交互式的可視化
    發(fā)表于 12-03 15:03

    plotly可視化繪制嵌入式子圖的方法

    plotly可視化繪制嵌入式子圖# 嵌入式子圖import plotly as pyimport plotly.graph_objs as gopyplt
    發(fā)表于 12-14 07:08

    華秋DFM可視化BOM交互焊接工具——SMT工廠、PCB工程師的福音來(lái)了!

    箭頭標(biāo)識(shí)位置按照位號(hào)、封裝、規(guī)格值篩選某個(gè)器件,右邊箭頭標(biāo)識(shí)位置篩選貼片元件及插件元件。02工具鏈接分享使用可視化BOM交互焊接工具,如需分享給別人使用時(shí)可點(diǎn)擊“復(fù)制鏈接”,也可以
    發(fā)表于 12-23 10:59

    華秋DFM推出可視化BOM交互焊接工具,助力SMT工廠提升效率

    箭頭標(biāo)識(shí)位置按照位號(hào)、封裝、規(guī)格值篩選某個(gè)器件,右邊箭頭標(biāo)識(shí)位置篩選貼片元件及插件元件。02工具鏈接分享使用可視化BOM交互焊接工具,如需分享給別人使用時(shí)可點(diǎn)擊“復(fù)制鏈接”,也可以
    發(fā)表于 12-23 11:16

    五大最實(shí)用的Jupyter Notebook擴(kuò)展插件

    Jupyter Notebook是當(dāng)前一種十分流行的基于網(wǎng)頁(yè)的開(kāi)發(fā)環(huán)境,它靈活、高度可擴(kuò)展,不僅允許用戶創(chuàng)建和共享含有代碼的文檔,還可以植入公式、可視化圖片和描述性的文本等,是大數(shù)據(jù)分
    的頭像 發(fā)表于 03-20 16:35 ?11.4w次閱讀

    以后Jupyter也能做可視化Debug了

    Notebook 都各有特色,Jupyter 適合做數(shù)據(jù)分析這些需要可視化的操作,PyCharm 更適合做完整的 Python 項(xiàng)目。然而,因?yàn)?b class='flag-5'>交互式操作,很少會(huì)有開(kāi)發(fā)者想到用
    的頭像 發(fā)表于 01-06 16:09 ?2367次閱讀

    神器jupyter的優(yōu)勢(shì)和使用教程

    Python 代碼編輯器怎么選?PyCharm、VS Code、Jupyter Notebook 都各有特色,Jupyter 適合做數(shù)據(jù)分析這些需要可視化的操作,PyCharm 更適合
    的頭像 發(fā)表于 02-05 09:36 ?8039次閱讀
    神器<b class='flag-5'>jupyter</b>的優(yōu)勢(shì)和使用教程

    常用的五種Jupyter Notebook擴(kuò)展插件

    Jupyter Notebook 是一個(gè)很棒的教學(xué)、探索和編程環(huán)境,但其功能不足也是出了名的。幸好,有許多方法可以改進(jìn)這個(gè)不錯(cuò)的工具,如 Jupyter Notebook 擴(kuò)展工具。
    的頭像 發(fā)表于 09-26 10:35 ?2310次閱讀

    Jupyter notebook超算平臺(tái)上使用的詳細(xì)教程

    Jupyter Notebook 的本質(zhì)是一個(gè) Web 應(yīng)用程序,便于創(chuàng)建和共享文學(xué)程序文檔,支持實(shí)時(shí)代碼,數(shù)學(xué)方程,可視化和 markd
    的頭像 發(fā)表于 11-23 15:42 ?1377次閱讀
    <b class='flag-5'>Jupyter</b> <b class='flag-5'>notebook</b><b class='flag-5'>在</b>超算平臺(tái)上使用的詳細(xì)教程

    什么是 Jupyter Notebook

    Jupyter Notebook 是一個(gè) Web 應(yīng)用程序,便于創(chuàng)建和共享文學(xué)程序文檔,支持實(shí)時(shí)代碼、數(shù)學(xué)方程、可視化和 Markdown
    的頭像 發(fā)表于 10-16 11:15 ?3120次閱讀
    什么是 <b class='flag-5'>Jupyter</b> <b class='flag-5'>Notebook</b>

    Altair:一個(gè)漂亮易用的數(shù)據(jù)可視化庫(kù)

    Altair 是一個(gè)基于Jupyter Notebook的強(qiáng)大可視化庫(kù)。它提供了強(qiáng)大而簡(jiǎn)潔的可視化語(yǔ)法,使我們能夠快速構(gòu)建各種統(tǒng)計(jì)可視化圖表
    的頭像 發(fā)表于 10-21 10:43 ?746次閱讀
    Altair:一個(gè)漂亮易用的數(shù)據(jù)<b class='flag-5'>可視化</b>庫(kù)