肖慧明
(遼寧軌道交通職業(yè)學(xué)院,遼寧沈陽(yáng),11000)
Python是目前主流的程序設(shè)計(jì)語(yǔ)言,主要是面向?qū)ο蟮摹⒛芎?jiǎn)單快速的編程,它為開(kāi)發(fā)者提供了高效的高級(jí)數(shù)據(jù)結(jié)構(gòu)。Python的創(chuàng)始人為吉多·范羅蘇姆 為打發(fā)圣誕節(jié)的無(wú)聊,決定研發(fā)一款基于ABC語(yǔ)言的新腳本解釋性程序。Python開(kāi)發(fā)技術(shù)主要特征就是簡(jiǎn)潔性、易讀易學(xué)、靈活擴(kuò)展、免費(fèi)開(kāi)源、強(qiáng)大的數(shù)據(jù)庫(kù)等。Python另一大重要的技術(shù)發(fā)展特色社會(huì)就是被我們所昵稱(chēng)為一種膠水式類(lèi)型編譯器編程設(shè)計(jì)語(yǔ)言,它幾乎沒(méi)有可以很容易地把我們需要使用一些諸如C語(yǔ)言、C++語(yǔ)言、Java語(yǔ)言等其他數(shù)據(jù)類(lèi)型編譯器編程教學(xué)語(yǔ)言學(xué)習(xí)所需要做的各個(gè)管理工作分析模塊都直接聯(lián)結(jié)起來(lái)到一起。因此,一些大型操作系統(tǒng)通常可以使用 Python快速構(gòu)建基于一個(gè)應(yīng)用程序的原型,然后用它來(lái)重新修改其所有符合特殊要求的基礎(chǔ)組件。
2008年在世界著名的TIOBE編程通用語(yǔ)言榜單上完全成為編程黑馬,現(xiàn)在世界排名第三,成為T(mén)IOBE2018編程通用語(yǔ)言,在人工智能研究領(lǐng)域排名第一,在編程腳本語(yǔ)言編寫(xiě)工程技術(shù)研究領(lǐng)域排名第一,在電子系統(tǒng)測(cè)試工程技術(shù)研究領(lǐng)域排名第一。除此之外,Python還在微機(jī)編程和電子信息科學(xué)理論計(jì)算電子數(shù)據(jù)技術(shù)發(fā)展兩個(gè)不同方面都已經(jīng)是一直占據(jù)著重要的技術(shù)領(lǐng)導(dǎo)者這個(gè)社會(huì)地位。
Python具有強(qiáng)大的交互式網(wǎng)絡(luò)可視化信息管理庫(kù)的能力,具有眾多的信息可視性?xún)?yōu)化庫(kù),如在2D、3D信息可視化優(yōu)化庫(kù)matplotlib、seaborn及Pandas等。地圖信息可視化優(yōu)化庫(kù) folium、basemap、mapbox、geoplotlib、pyechartsmap、geo等,社會(huì)服務(wù)網(wǎng)絡(luò)的信息可視化管理庫(kù)networkx,詞典和云圖的信息可視性?xún)?yōu)化庫(kù)wordcloud、pyecharts的wordcloud等。本文介紹幾個(gè)簡(jiǎn)單的實(shí)例Python基本可視化數(shù)據(jù)庫(kù)。
Matplotlib庫(kù)占據(jù)Python可視化程序庫(kù)的高級(jí)地位,在幾十年的程序變更中,它依然是Python社區(qū)中使用最廣泛的數(shù)據(jù)可視化繪圖庫(kù),它的設(shè)計(jì)與MATLAB基本一致。Matplotlib 是Python中第一款數(shù)據(jù)可視化的第三方庫(kù),它可以很方便迅速地獲得數(shù)據(jù)的大致信息,其強(qiáng)大的功能超出想象,但是使用起來(lái)卻非常復(fù)雜,上手相對(duì)較難。因此,后來(lái)陸續(xù)出現(xiàn)了很多第三方庫(kù)都是建立在Matplotlib庫(kù)的基礎(chǔ)上,有些甚至直接調(diào)取Matplotlib庫(kù)中的方法,例如Pandas庫(kù)、Seaborn庫(kù),這兩個(gè)庫(kù)都是Matplotlib庫(kù)的外包,開(kāi)發(fā)者調(diào)取 Matplotlib的方法不需復(fù)雜的代碼,只需幾條簡(jiǎn)單的代碼即可調(diào)取,方便快捷。通過(guò)Matplotlib開(kāi)發(fā)者可以很輕松地繪制各種圖表,僅僅幾行源碼就能根據(jù)數(shù)據(jù)繪制各種直方圖、線(xiàn)圖、功率譜、條形圖、錯(cuò)誤圖等,如圖1所示。
圖1 Matplotlib的直方圖示例
Seaborn基于matplotlib的圖形可視化python包,其優(yōu)勢(shì)是專(zhuān)攻于統(tǒng)計(jì)可視化,提供了一種高度交互式界面,它可以和pandas進(jìn)行無(wú)縫對(duì)接,更適用于初學(xué)者,簡(jiǎn)單上手操作快速,用簡(jiǎn)潔的代碼創(chuàng)建信息豐富和有吸引力的統(tǒng)計(jì)圖形庫(kù),Seaborn提供了種類(lèi)繁多的功能,比如用通過(guò)內(nèi)置的主題、各種函數(shù)及工具,利用這些就能實(shí)現(xiàn)單/雙因素、數(shù)據(jù)矩陣、線(xiàn)性回歸等,從而使開(kāi)發(fā)者能夠快速構(gòu)建比較復(fù)雜的可視化數(shù)據(jù)信息。如圖二所示。Seaborn與Matplotlib相比較,其最大的不同在于Seaborn默認(rèn)繪圖的風(fēng)格、具有當(dāng)代審美觀(guān)點(diǎn)的顏色搭配。同時(shí)Seaborn的語(yǔ)法結(jié)構(gòu)更加簡(jiǎn)潔明了,Seaborn庫(kù)僅僅能作為Matplotlib庫(kù)的補(bǔ)充庫(kù),不可代替Matplotlib庫(kù)。Seaborn的兼容性較好,支持numpy和pandas的數(shù)據(jù)結(jié)構(gòu),掌握Seaborn庫(kù)能很大程度幫助我們更高效的觀(guān)察數(shù)據(jù)與圖表。Seaborn[6]有著如下特點(diǎn):基于matplotlib aesthetics繪圖風(fēng)格,增加了一些繪圖模式;增加調(diào)色板功能,利用色彩豐富的圖像揭示您數(shù)據(jù)中的模式;運(yùn)用數(shù)據(jù)子集繪制與比較單變量和雙變量分布的功能;運(yùn)用聚類(lèi)算法可視化矩陣數(shù)據(jù);靈活運(yùn)用處理時(shí)間序列數(shù)據(jù);利用網(wǎng)格建立復(fù)雜圖像集。
圖2 Seaborn繪制的直方圖
ggplot庫(kù)是基于R的一個(gè)作圖包 ggplot2,ggplot的運(yùn)行方式與matplotlib區(qū)別很大:它允許你對(duì)組件進(jìn)行分層以創(chuàng)建完整的繪圖,疊加不同的圖層。例如,可以從軸開(kāi)始,然后添加點(diǎn)、添加線(xiàn)、趨勢(shì)線(xiàn)等。繪圖很直觀(guān),但不適合制作非常個(gè)性化的圖像,它犧牲了圖像的復(fù)雜性,以達(dá)到簡(jiǎn)單性。它于pandas的整合度非常高,所以當(dāng)你使用它的時(shí)候,最好將你的數(shù)據(jù)讀成 DataFrame。ggplot2的中心思想是將繪圖和數(shù)據(jù)徹底分離開(kāi),將與數(shù)據(jù)有關(guān)的繪圖同與數(shù)據(jù)無(wú)關(guān)的繪圖分離開(kāi)。真正實(shí)現(xiàn)按照?qǐng)D層來(lái)繪圖,同時(shí)保留命令式作圖,可以根據(jù)命令調(diào)整目標(biāo)函數(shù),使繪圖變得更加靈活,并將這些常見(jiàn)的統(tǒng)計(jì)數(shù)據(jù)變換可以融入學(xué)習(xí)到了繪圖中,如圖3所示。
圖3 ggplot繪制的圖
Bokeh庫(kù)與ggplot庫(kù)一樣,都是一個(gè) Python 交互式可視化庫(kù)。但與ggplot庫(kù)不同的是,它是原生Python的,而不是從R語(yǔ)言移植過(guò)來(lái)的。Bokeh庫(kù)的優(yōu)點(diǎn)是可用于創(chuàng)建可直接用于網(wǎng)絡(luò)的交互式站點(diǎn)圖。它能夠輕松地將其輸出為JSON對(duì)象、HTML頁(yè)面,甚至是交互式的Web應(yīng)用程序。Bokeh庫(kù)同時(shí)還支持流媒體和實(shí)時(shí)數(shù)據(jù)的實(shí)現(xiàn)。支持現(xiàn)代 web 瀏覽器,提供優(yōu)雅、簡(jiǎn)潔和創(chuàng)新的圖形樣式,以及與大型數(shù)據(jù)集的高性能交互,允許您快速創(chuàng)建交互式圖形、儀表板和數(shù)據(jù)應(yīng)用程序,如圖4所示。其缺點(diǎn)是語(yǔ)法較復(fù)雜,不易上手。Bokeh根據(jù)不同的用戶(hù)需求,它提供三種不同的控制水平。最高級(jí)的控制管理水平可以幫助開(kāi)發(fā)者實(shí)現(xiàn)快速地繪制圖表,主要包括用于制作常用圖像,比如直方圖、散點(diǎn)圖等。中等的控制管理水平,跟matplotlib庫(kù)原理相同,允許開(kāi)發(fā)者控制圖像的基本元素信息(比如分布圖中的點(diǎn))。最低的控制級(jí)管理水平主要是針對(duì)高端的開(kāi)發(fā)者和軟件工程師。這個(gè)級(jí)別的沒(méi)有默認(rèn)值,需要對(duì)圖表中的每個(gè)元素進(jìn)行定義。
圖4 Bokeh繪制的圖
Pygal庫(kù)與 Bokeh 、 Plotly相類(lèi)似,Pygal庫(kù)的可交互圖表能夠直接嵌入到Web瀏覽器中,方便靈活。這就與另外兩個(gè)庫(kù)存在差異,Pygal庫(kù)可以將圖表的輸出定義為SVG格式。如果你使用較小的數(shù)據(jù)集,SVG格式的圖像就可以了。但是,如果您制作包含數(shù)十萬(wàn)個(gè)數(shù)據(jù)點(diǎn)的圖表,它們可能難以呈現(xiàn)且響應(yīng)遲鈍。因?yàn)樗械膱D都包裝在方法中,而且默認(rèn)樣式很好,所以用幾行代碼就可以很容易地制作出漂亮的圖,如下所示。
圖5 Pygal繪制的圖
Python強(qiáng)大的可視化庫(kù),使得每位開(kāi)發(fā)人員都能輕松地將數(shù)據(jù)進(jìn)行分析,進(jìn)而繪制成滿(mǎn)足我們需要的圖表,通過(guò)這種數(shù)據(jù)可視化的方式用來(lái)表達(dá)管理分析數(shù)據(jù),反應(yīng)相應(yīng)數(shù)據(jù)信息的能力,從而向用戶(hù)展示數(shù)據(jù)內(nèi)部隱藏的信息,或系統(tǒng)地表達(dá)對(duì)數(shù)據(jù)的理解。一旦用戶(hù)接觸到這些可視化圖表(如直方圖、箱線(xiàn)圖、線(xiàn)圖、條形圖等)。用戶(hù)立刻會(huì)有感知到數(shù)據(jù)信息,認(rèn)知信息,進(jìn)而進(jìn)行數(shù)據(jù)交互及有效溝通。數(shù)據(jù)可視化在數(shù)據(jù)集分析中起著關(guān)鍵作用。最大的優(yōu)勢(shì)在于可以幫助開(kāi)發(fā)者及客戶(hù)甚至決策者更深入的理解那些隱藏在數(shù)據(jù)集中的細(xì)微動(dòng)態(tài)發(fā)展變化,讓用戶(hù)更容易的理解就是我們的數(shù)據(jù)。