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ù)框:
部分數(shù)據(jù)截圖:
部分數(shù)據(jù)截圖:
部分數(shù)據(jù)截圖:
在我們做這些之前,我們需要做一點數(shù)據(jù)清理的工作:
這行代碼保證我們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ù):
最后,我們使用pandas庫來在routes數(shù)據(jù)框上使用這個計算距離的函數(shù)。這將得到一個pandas序列包含所有的航線長度。航線長度都是千米級的。
現(xiàn)在我們已經(jīng)擁有了一系列的航線長度,我們可以創(chuàng)建一個直方圖,將我們得到的值轉(zhuǎn)換成范圍,然后計算每個范圍內(nèi)有多少個數(shù)據(jù)點。
使用Seaborn 我們可以使用python的高水平繪圖庫Seaborn,繪制出一樣的圖。Seaborn是基于matplotlib的,Seaborn用來繪制特定類型的圖,它通常需要做一些比較簡單統(tǒng)計工作。我們可以使用distplot函數(shù)來繪制一個頂端帶有核密度估計的直方圖。和密度估計是一條曲線,實質(zhì)上是直方圖的平滑以后的版本,這樣能使我們更容易發(fā)現(xiàn)里面的模式。
條形圖 直方圖很好,但是或許我們想看一下航空公司的平均航線長度。這時我們就可以使用條形圖,每條航線會單獨對應(yīng)條形圖里面的一條,告訴我們每個航空公司的平均航線長度。這可以告訴我們哪些航班是飛本地區(qū)的,哪些是國際的。我們可以使用pandas,python的一個數(shù)據(jù)分析庫,計算出每個航空公司的平均航線長度。
然后我們可以把它用matplotlib畫出來
上述圖的問題是我們不能很容易的看出哪家航空公司擁有什么航線長度。所以我們需要看到坐標軸標簽。這有一點難,因為有太多的航空公司了。一種能使這個工作變得簡單的方法就是繪制交互圖,它允許我們放大或縮小來查看標簽。我們可以使用bokeh庫——它使繪制交互圖和意義伸縮的圖會變得簡單。 為了使用bokeh,我們首先需要預(yù)處理一下我們的數(shù)據(jù):
最后我們重置索引來得到所有的唯一值,沒有這一步bokeh就不能正常的工作。 現(xiàn)在,我們繼續(xù)我們的圖表問題:
在notebook中產(chǎn)生的圖并不是圖像,它實質(zhì)上是一個javascript插件,也正因為如此,我們在下面展示的是一個屏幕截圖,而不是真正的圖表。
水平條形圖 Pygal是python的一個數(shù)據(jù)分析庫,它能夠快速的繪制出很有吸引力的圖。我們可以用它來對路線按長度進行拆分。首先,我們把我們的路線分成短,中,長三類,并計算出在route_lengths中每一類所占的百分比。 英文原文:https://www./blog/python-data-visualization-libraries/ |
|
來自: River_LaLaLa > 《Python》