<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          數(shù)據(jù)科學(xué)系列:plotly可視化入門介紹

          共 3927字,需瀏覽 8分鐘

           ·

          2021-11-27 16:28


          導(dǎo)讀

          在入道數(shù)據(jù)崗位之初,曾系列寫過多個(gè)數(shù)據(jù)科學(xué)工具包的入門教程,包括NumpyPandasMatplotlibSeabornSklearn等,這些也構(gòu)成了自己當(dāng)初的核心工具棧。在這5個(gè)工具包中,用于數(shù)據(jù)繪圖的有2.5個(gè)(Pandas可以算0.5個(gè)),占比之高定與當(dāng)時(shí)一度"沉迷"于簡(jiǎn)單而有效的可視化有關(guān),可謂樂此不疲。時(shí)隔一年有余,在不斷接觸了Plotly這個(gè)可視化新貴之后,近期終于正式學(xué)習(xí)了一下這個(gè)包的使用、特性及優(yōu)劣,并稍作整理、以資后鑒,遂成此文!


          plotly繪圖簡(jiǎn)潔高效可交互,值得一試!


          01 為什么學(xué)習(xí)plotly
          plotly,這個(gè)包名不可謂不直觀,一看便知其一定是一個(gè)用來畫圖的工具;但同時(shí),它仍然有失直觀,因?yàn)閜lotly實(shí)際上是一個(gè)多語言繪圖庫(kù),而當(dāng)提及plotly時(shí)更可能的指代是JavaScript中的plotly。實(shí)際上,plotly本就是一個(gè)基于JavaScript的繪圖庫(kù),然后引入到了Python中來,所以為了更具體的指代Python中的plotly,一般可稱之為plotly.py。

          plotly支持多語言平臺(tái)

          所以但是,為啥plotly不效仿Python中眾多第三方庫(kù)的做法,直接命名為pyplotly呢?畢竟這樣的先例不在少數(shù),例如pyecharts,pymysql,pytorch等。


          進(jìn)一步地,為什么在掌握了matplotlib和seaborn這兩個(gè)近乎可以完成所有繪圖需求之后,還要另外花費(fèi)學(xué)習(xí)成本來上手plotly呢?或者說,plotly有哪些核心優(yōu)勢(shì)或者不可替代的地方?簡(jiǎn)言之:可交互性!是的,plotly的繪圖是支持交互的,而這是matplotlib和seaborn所不具備的(更嚴(yán)謹(jǐn)?shù)卣f,只是默認(rèn)情況下不可交互)。


          當(dāng)然,可交互的繪圖庫(kù)也不止它一個(gè),比如之前也嘗試過pyecharts!但于我而言只是pyecharts的繪圖結(jié)果需另開網(wǎng)頁(yè)而略顯繁瑣,同時(shí)plotly的繪圖語法與matplotlib和seaborn更為接近,學(xué)習(xí)門檻更加絲滑。基于上述豐富的內(nèi)心活動(dòng)之后,我選擇了plotly,并最終決定系統(tǒng)學(xué)習(xí)和試手一下。


          02?plotly能干什么

          plotly作為一個(gè)可視化庫(kù),當(dāng)然是能用來畫圖了,而且是多種豐富樣式的圖。所幸,這里不妨直接引用plotly官網(wǎng)的介紹:

          The?plotly?Python?library?is?an?interactive, open-source plotting library that supports over 40 unique chart types covering a wide range of statistical, financial, geographic, scientific, and 3-dimensional use-cases.

          幾個(gè)關(guān)鍵字是:開源、可交互、支持40余種圖表類型,涵蓋統(tǒng)計(jì)、金融、地理、科學(xué)和3D圖表。


          看下官網(wǎng)直接給出的圖表demo吧:

          統(tǒng)計(jì)和科學(xué)圖表系列


          金融和地理圖表系列


          AI科學(xué)系列


          更多的圖表類型可以查看官網(wǎng),簡(jiǎn)而言之,plotly功能還是齊全且強(qiáng)大的。


          03?plotly如何繪圖
          既然本文定位為入門介紹系列,那么肯定是要介紹一下如何使用和上手的。

          首先,python中安裝plotly庫(kù)的流程非常簡(jiǎn)單,且依賴很少(通過pip show plotly發(fā)現(xiàn),其只有2個(gè)依賴包),無論是pip還是conda都可通過常規(guī)的install方式快速完成安裝。


          其次,給出plotly中各組成模塊的整體介紹,以期從宏觀上了解plotly的宏觀架構(gòu)和各模塊定位。打開plotly源碼文件夾,可以看到主要包含了以下幾個(gè)subfolder,這也基本對(duì)應(yīng)了plotly中的幾個(gè)子模塊:

          除上述subfolder,plotly另有若干獨(dú)立.py文件


          具體而言,應(yīng)用plotly進(jìn)行可視化時(shí)一般會(huì)涉及以下子模塊:

          • express: plotly中用于可視化的高級(jí)API

          • graph_objects: 底層繪圖接口,包含了所有圖表對(duì)象和布局(graph_objs與其是同名包)

          • io: 底層接口,用于展示和讀寫圖表

          • colors: 用于配置圖表顏色相關(guān)

          • data: 提供了一些內(nèi)置的數(shù)據(jù)集加載功能,例如iris、tips數(shù)據(jù)集


          實(shí)際上,為了極簡(jiǎn)入門plotly并快速上手使用,或許只需重點(diǎn)了解plotly.express和plotly.graph_objects兩個(gè)子模塊即可!在具體使用之前,先介紹下二者的區(qū)別和定位:
          • plotly.graph_objects是底層API,是一種面向?qū)ο蟮睦L圖風(fēng)格,定義了plotly中的所有圖表對(duì)象(graph_objects翻譯過來,不就是圖表對(duì)象的意思嗎,真·簡(jiǎn)單粗暴!),并提供了相近的布局設(shè)置功能(layout),類似于matplotlib的角色;
          • plotly.express是高層API,是一種函數(shù)式的繪圖風(fēng)格,繪圖的過程就是指定函數(shù)各個(gè)參數(shù)的過程,提供了更為簡(jiǎn)潔和方便的繪圖功能。如果說前者類似于matplotlib,那么plotly.express就妥妥的相當(dāng)于seaborn的角色!


          好家伙,plotly自己還要定義兩套繪圖風(fēng)格,真的是要替代matplotlib+seaborn的江湖地位嗎?但對(duì)于使用者來說,或許是喜聞樂見的——需要快速簡(jiǎn)潔,就用plotly.express;需要個(gè)性化定制,則用plotly.graph_objects。


          下面,基于plotly給出兩段簡(jiǎn)單的代碼實(shí)例

          1)使用底層API——graph_objects

          graph_objects之所以叫底層API,是因?yàn)楸┞读烁嗟睦L圖細(xì)節(jié)和參數(shù),但這利弊各半。一般來說,基于graph_objects子模塊繪圖主要分三步:

          • 選定一個(gè)圖表對(duì)象(graph_object),并配置要繪圖的數(shù)據(jù),例如x和y數(shù)據(jù);圖表的屬性,例如標(biāo)題、線型等

          • 設(shè)定一些布局(layout),并配置布局參數(shù),例如圖片尺寸、標(biāo)題等

          • 創(chuàng)建一個(gè)Figure對(duì)象,并接收前兩步得到的圖表對(duì)象和布局對(duì)象,而后show出來
          舉個(gè)例子:
          import?plotly.graph_objects?as?go??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:go
          import?plotly.express?as?px??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:px
          tips?=?px.data.tips()??# plotly內(nèi)置數(shù)據(jù)集:tips

          #?使用graph_objects繪圖流程需要三步
          line?=?go.Scatter(x=tips['total_bill'],?y=tips['tip'],?mode='markers')??#?①?創(chuàng)建圖表對(duì)象
          layout?=?go.Layout(autosize=False,?width=900,?height=600, title='tips')??#?②?創(chuàng)建布局對(duì)象
          go.Figure(data=line?,layout=layout).show()??#?創(chuàng)建Figure,接收?qǐng)D表和布局,并加以顯示


          2)使用高級(jí)API——express

          express之所以叫高級(jí)API,是因?yàn)榫哂懈鼮轫攲拥某橄螅蛘哒f使用更少的代碼即可得到更為豐富的繪圖結(jié)果,更重要的express的繪圖接口似乎天然就是為了適配pd.DataFrame而存在的,因?yàn)槠涓黝惱L圖函數(shù)中的第一個(gè)參數(shù)都是data_frame!在設(shè)置這一參數(shù)之后,x和y的數(shù)據(jù)只需提供相應(yīng)的列名即可,例如對(duì)于上述同樣的繪圖需求只需要調(diào)用一個(gè)函數(shù):
          import?plotly.graph_objects?as?go??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:go
          import?plotly.express?as?px??#?標(biāo)準(zhǔn)引用格式,一般簡(jiǎn)寫為:px
          tips?=?px.data.tips()??# plotly內(nèi)置數(shù)據(jù)集:tips

          #?使用express繪圖只需要調(diào)用一個(gè)函數(shù)
          px.scatter(tips,?x='total_bill',?y='tip',?width=900,?height=600,?title='tips').show()


          當(dāng)然,上述兩種方法得到的繪圖結(jié)果是一樣的,而且這幅圖提供了常用的交互功能,例如區(qū)域選中(包括矩形區(qū)域和自定義區(qū)域)、縮放、移動(dòng)和存儲(chǔ)等常用交互按鈕,簡(jiǎn)單演示如下:


          再演示一張個(gè)人比較喜歡的小提琴圖,用于展示類別間的分布關(guān)系:

          是不是有seaborn那個(gè)味道了。。?


          另外值得補(bǔ)充的兩點(diǎn):

          1)plotly提供了將一個(gè)matplotlib繪圖轉(zhuǎn)化為plotly繪圖的接口,一定程度上使得混合使用兩個(gè)可視化庫(kù)更為順滑,但具體使用體驗(yàn)有待嘗試;

          2)plotly早期版本還區(qū)分online和offline,其中offline就是上述的常規(guī)繪圖方式,而online方式大概是需要連接plotly的web服務(wù)器,不過個(gè)人覺得可能并沒什么鳥用,所以在V4.0版本移除了。具體參考plotly官網(wǎng)給出的Note:



          相關(guān)閱讀:


          瀏覽 101
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.日本在线视频 | 青青草成人在线视频免费 | 老鸭窝在线视频狂综合 | 亚洲天堂日韩国 | sm调教视频网站 |