国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Python的數(shù)據(jù)可視化:對(duì)比7種工具包

Python 的scientific stack(一個(gè)介紹Python科學(xué)計(jì)算包的網(wǎng)站)已經(jīng)完全成熟,并且有各種各樣用例的庫,包括機(jī)器學(xué)習(xí)(鏈接:machine learning),數(shù)據(jù)分析(鏈接:data analysis)。數(shù)據(jù)可視化是探索數(shù)據(jù)和清晰的解釋結(jié)果很重要的一部分,但是Python在過去卻相對(duì)于其他工具比如R落后一點(diǎn)。

  幸運(yùn)的是,近幾年出現(xiàn)很多新的數(shù)據(jù)可視化Python庫彌補(bǔ)了這個(gè)差距,matplotlib已經(jīng)成為主要的數(shù)據(jù)可視化庫,但是還有很多其它的庫,比如vispy,bokeh,seaborn,pygal,folium,和networkx,他們都建立在matplotlib的基礎(chǔ)之上,或者擁有matplotlib所不具有的功能。

  在這篇文章中,我們將運(yùn)用真實(shí)世界的數(shù)據(jù),然后使用這些庫進(jìn)行數(shù)據(jù)的可視化。當(dāng)我們這樣做的時(shí)候,我們將發(fā)現(xiàn),每個(gè)庫最適合用在哪里,以及如何利用Python數(shù)據(jù)可視化系統(tǒng)最有效。

探索數(shù)據(jù)集

  在我們進(jìn)行數(shù)據(jù)可視化之前,讓我們快速查看一下我們將要用到的數(shù)據(jù)集。我們將用到的據(jù)來自openflights。我們將用到 route,airport,和airline這三個(gè)數(shù)據(jù)。route數(shù)據(jù)的每一行對(duì)應(yīng)兩個(gè)機(jī)場(chǎng)之間的一條路線,以及相應(yīng)的信息。arline數(shù)據(jù)的每一行對(duì)應(yīng)一個(gè)航空公司。

  首先,讀入數(shù)據(jù):


 數(shù)據(jù)沒有列標(biāo)題,所以我們通過給columns這個(gè)屬性賦值來添加列標(biāo)題。我們想把每一列作為字符串來讀入,這樣做是為了后面基于id匹配行時(shí),比較數(shù)據(jù)框方便一點(diǎn)。我們通過讀取數(shù)據(jù)時(shí)設(shè)置dtype參數(shù)來達(dá)到目的。

  我們可以快速看一下每個(gè)數(shù)據(jù)框:

airports.head()

部分?jǐn)?shù)據(jù)截圖:


airlines.head()

部分?jǐn)?shù)據(jù)截圖:

routes.head()

部分?jǐn)?shù)據(jù)截圖:


我們可以對(duì)每個(gè)數(shù)據(jù)集做各種各樣有趣的探索,但是通過把這些數(shù)據(jù)集合并起來,我們能有最大的收獲。當(dāng)我們做數(shù)據(jù)分析的時(shí)候,Pandas可以幫助我們,因?yàn)樗梢詭椭覀兒苋菀椎倪^濾矩陣類型的數(shù)據(jù),或著對(duì)矩陣數(shù)據(jù)使用某個(gè)函數(shù)。我們將深入一些有趣的度量,比如分析航空公司和航線。

  在我們做這些之前,我們需要做一點(diǎn)數(shù)據(jù)清理的工作:

routes = routes[routes['airline_id'] != '\N']

  這行代碼保證我們airline_id的數(shù)據(jù)列中只包含數(shù)值型的數(shù)據(jù)。

繪制直方圖

  現(xiàn)在我們了解了數(shù)據(jù)結(jié)構(gòu),我們可以繼續(xù)深入開始畫圖和探索數(shù)據(jù)。我們的第一個(gè)圖,將使用matplotlib庫。Matplotlib在Python中繪圖庫,是一個(gè)相對(duì)低水平的,所以為了畫出一個(gè)看起來很漂亮的圖,它通常要使用比其他的庫需要更多的命令。另一方面,你幾乎可以使用matplotlib繪制任何你想畫的圖。它非常靈活,但是靈活性帶來的問題就是冗余問題。

  我們首先繪制一個(gè)直方圖來展示每個(gè)航空公司的航線長度的分布。直方圖將所有的路線長度劃分成范圍(或著箱子),然后每個(gè)范圍內(nèi)的數(shù)據(jù)點(diǎn)進(jìn)行計(jì)數(shù)。這可以告訴我們,航空公司飛長線多一點(diǎn)還是飛短線多一點(diǎn)。

  為了達(dá)到這個(gè)目的,我們首先要計(jì)算航線的長度。第一步是一個(gè)距離公式,我們使用半正矢距離,也就是計(jì)算兩個(gè)緯度,經(jīng)度坐標(biāo)對(duì)之間的距離。

 然后我們可以定義一個(gè)功能,用來計(jì)算出發(fā)機(jī)場(chǎng)和目的機(jī)場(chǎng)之間的單程距離。想做這個(gè),我們需要從routes這個(gè)數(shù)據(jù)框中提取出source_id和 dest_id兩列,然后使用airports數(shù)據(jù)框的id列來進(jìn)行匹配,從而得到這些機(jī)場(chǎng)的經(jīng)度和緯度。然后接下來就是計(jì)算問題了,下面是這個(gè)功能函數(shù):


如果source_id列 或著 dest_id列有無效的值,這個(gè)函數(shù)將會(huì)出錯(cuò),所以我們要添加一個(gè)try/except模塊來捕捉這些錯(cuò)誤。

  最后,我們使用pandas庫來在routes數(shù)據(jù)框上使用這個(gè)計(jì)算距離的函數(shù)。這將得到一個(gè)pandas序列包含所有的航線長度。航線長度都是千米級(jí)的。

route_lengths = routes.apply(calc_dist, axis=1)

現(xiàn)在我們已經(jīng)擁有了一系列的航線長度,我們可以創(chuàng)建一個(gè)直方圖,將我們得到的值轉(zhuǎn)換成范圍,然后計(jì)算每個(gè)范圍內(nèi)有多少個(gè)數(shù)據(jù)點(diǎn)。



我們使用import matplotlib.pyplot as plt導(dǎo)入matplotlib的繪圖功能。最后我們?cè)谑褂?matplotlib inline命令將matplotlib的圖表內(nèi)嵌到ipython notebook中。最后我們可以使用plt.hist(route_lengths, bins=20)來繪制直方圖啦。我們可以看到,航空公司的短航線要多于長航線。

使用Seaborn

我們可以使用python的高水平繪圖庫Seaborn,繪制出一樣的圖。Seaborn是基于matplotlib的,Seaborn用來繪制特定類型的圖,它通常需要做一些比較簡(jiǎn)單統(tǒng)計(jì)工作。我們可以使用distplot函數(shù)來繪制一個(gè)頂端帶有核密度估計(jì)的直方圖。和密度估計(jì)是一條曲線,實(shí)質(zhì)上是直方圖的平滑以后的版本,這樣能使我們更容易發(fā)現(xiàn)里面的模式。

import seaborn 
seaborn.distplot(route_lengths, bins=20)


如圖所示,Seaborn相比于matplotlib擁有更好的默認(rèn)風(fēng)格。對(duì)于matplotlib的所有繪圖,Seaborn里面并沒有自己對(duì)應(yīng)的版本,但是,使用Seaborn來快速繪制一個(gè)好看的,并且比matplotlib默認(rèn)的圖表更加深入的圖表,是一個(gè)不錯(cuò)的方式。如果你想要繼續(xù)深入,或著做更多的統(tǒng)計(jì)工作,Seaborn是一個(gè)很好的庫。

條形圖

  直方圖很好,但是或許我們想看一下航空公司的平均航線長度。這時(shí)我們就可以使用條形圖,每條航線會(huì)單獨(dú)對(duì)應(yīng)條形圖里面的一條,告訴我們每個(gè)航空公司的平均航線長度。這可以告訴我們哪些航班是飛本地區(qū)的,哪些是國際的。我們可以使用pandas,python的一個(gè)數(shù)據(jù)分析庫,計(jì)算出每個(gè)航空公司的平均航線長度。


  首先,構(gòu)造一個(gè)航空公司id和航線長度的數(shù)據(jù)框,我們把route_length_df基于airline_id來分組。實(shí)際上就是,每個(gè)航空公司構(gòu)造一個(gè)數(shù)據(jù)框。然后使用pandas的aggregate函數(shù)對(duì)每個(gè)數(shù)據(jù)框里面的length這一列求平均,然后再把計(jì)算結(jié)果重新組合成一個(gè)新的數(shù)據(jù)框。然后對(duì)數(shù)據(jù)框進(jìn)行排序,把路線最多的航空公司放在最前面。

  然后我們可以把它用matplotlib畫出來

plt.bar(range(airline_route_lengths.shape[0]), 
      airline_route_lengths['length'])


  Matplotlib的plt.bar方法可以畫出每個(gè)airline文件中(airline_route_lengths['length'])的航線—平均長度的關(guān)系圖。flies(airline_route_lengths['length'])

  上述圖的問題是我們不能很容易的看出哪家航空公司擁有什么航線長度。所以我們需要看到坐標(biāo)軸標(biāo)簽。這有一點(diǎn)難,因?yàn)橛刑嗟暮娇展玖?。一種能使這個(gè)工作變得簡(jiǎn)單的方法就是繪制交互圖,它允許我們放大或縮小來查看標(biāo)簽。我們可以使用bokeh庫——它使繪制交互圖和意義伸縮的圖會(huì)變得簡(jiǎn)單。

  為了使用bokeh,我們首先需要預(yù)處理一下我們的數(shù)據(jù):


上面的代碼可以獲取airline_route_lengths中每一行數(shù)據(jù)的名字,并添加在name這一列中,name這一列包含了每一個(gè)航空公司的名字,我們還添加了id這一列,用來做查找(apply函數(shù)不傳遞索引值)。

  最后我們重置索引來得到所有的唯一值,沒有這一步bokeh就不能正常的工作。

  現(xiàn)在,我們繼續(xù)我們的圖表問題:


  我們使用output_notebook創(chuàng)建背景虛化,在iPython的 notebook 里畫出圖。然后我們使用數(shù)據(jù)框和指定的列繪制條形圖,最后,使用show函數(shù)顯示出畫好的圖。

  在notebook中產(chǎn)生的圖并不是圖像,它實(shí)質(zhì)上是一個(gè)javascript插件,也正因?yàn)槿绱?,我們?cè)谙旅嬲故镜氖且粋€(gè)屏幕截圖,而不是真正的圖表。


  有了這個(gè)圖,我們可以放大,看哪一趟航班的航線最長。上圖的標(biāo)簽看起來都堆疊在了一起,但是當(dāng)你放大以后就很容易看清楚了。

水平條形圖

  Pygal是python的一個(gè)數(shù)據(jù)分析庫,它能夠快速的繪制出很有吸引力的圖。我們可以用它來對(duì)路線按長度進(jìn)行拆分。首先,我們把我們的路線分成短,中,長三類,并計(jì)算出在route_lengths中每一類所占的百分比。


英文原文:https://www.dataquest.io/blog/python-data-visualization-libraries/
譯者:yaoyujia123


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
7 款 Python 數(shù)據(jù)圖表工具的比較
用Python進(jìn)行數(shù)據(jù)可視化的10種方法
常見的5個(gè)python數(shù)據(jù)可視化庫!
Python探索性數(shù)據(jù)分析,這樣才容易掌握
Python數(shù)據(jù)可視化的10種技能
推薦兩個(gè)實(shí)用Python庫,文末送Python書籍
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服