一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

 River_LaLaLa 2016-07-30

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

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

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

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

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

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


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

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

airports.head()

部分數(shù)據(jù)截圖:


airlines.head()

部分數(shù)據(jù)截圖:

routes.head()

部分數(shù)據(jù)截圖:


我們可以對每個數(shù)據(jù)集做各種各樣有趣的探索,但是通過把這些數(shù)據(jù)集合并起來,我們能有最大的收獲。當我們做數(shù)據(jù)分析的時候,Pandas可以幫助我們,因為它可以幫助我們很容易的過濾矩陣類型的數(shù)據(jù),或著對矩陣數(shù)據(jù)使用某個函數(shù)。我們將深入一些有趣的度量,比如分析航空公司和航線。

  在我們做這些之前,我們需要做一點數(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ù)。我們的第一個圖,將使用matplotlib庫。Matplotlib在Python中繪圖庫,是一個相對低水平的,所以為了畫出一個看起來很漂亮的圖,它通常要使用比其他的庫需要更多的命令。另一方面,你幾乎可以使用matplotlib繪制任何你想畫的圖。它非常靈活,但是靈活性帶來的問題就是冗余問題。

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

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

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


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

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

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

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



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

使用Seaborn

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

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


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

條形圖

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


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

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

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


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

  上述圖的問題是我們不能很容易的看出哪家航空公司擁有什么航線長度。所以我們需要看到坐標軸標簽。這有一點難,因為有太多的航空公司了。一種能使這個工作變得簡單的方法就是繪制交互圖,它允許我們放大或縮小來查看標簽。我們可以使用bokeh庫——它使繪制交互圖和意義伸縮的圖會變得簡單。

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


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

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

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


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

  在notebook中產(chǎn)生的圖并不是圖像,它實質(zhì)上是一個javascript插件,也正因為如此,我們在下面展示的是一個屏幕截圖,而不是真正的圖表。


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

水平條形圖

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


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


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    99久久精品久久免费| 91亚洲国产成人久久| 加勒比东京热拍拍一区二区| 国语对白刺激高潮在线视频| 国产成人精品一区二区在线看| 婷婷一区二区三区四区| 91天堂免费在线观看| 国产亚洲精品香蕉视频播放| 成年人黄片大全在线观看| 91精品国产av一区二区| 深夜视频在线观看免费你懂| 中文精品人妻一区二区| 欧美精品亚洲精品一区| 色丁香之五月婷婷开心| 免费国产成人性生活生活片| 麻豆剧果冻传媒一二三区| 欧美在线观看视频三区| 国内精品偷拍视频久久| 欧美午夜一区二区福利视频| 欧美日韩成人在线一区| 老熟妇2久久国内精品| 青青久久亚洲婷婷中文网| 国产日韩欧美专区一区| 精品视频一区二区不卡| 久久综合九色综合欧美| 亚洲欧美一二区日韩高清在线| 玩弄人妻少妇一区二区桃花| 国产目拍亚洲精品区一区| 日韩精品在线观看完整版| 亚洲日本中文字幕视频在线观看| 亚洲欧洲精品一区二区三区| 九九热视频免费在线视频| 欧美日韩国产福利在线观看| 五月天综合网五月天综合网| 日本办公室三级在线观看| 久久偷拍视频免费观看| 91亚洲人人在字幕国产| 亚洲av日韩一区二区三区四区| 91亚洲熟女少妇在线观看| 黄片在线免费看日韩欧美| 久久精品色妇熟妇丰满人妻91|