提到數(shù)據(jù)可視化,大家可能腦海里就會出現(xiàn)里各種圖表、絢麗大屏、或者科幻電影里酷炫儀表。其實,日常生活里面,到處都有數(shù)據(jù)可視化的影子。
手表就是數(shù)據(jù)可視化的例子,最少只需要3個視覺元素(時針、分針和秒針),就可以表達43200個狀態(tài)。另外,水銀溫度計和地鐵線路圖,也是生活中數(shù)據(jù)可視化的運用!
視覺是人類獲取外界信息最高速,最主要也是最重要渠道。 超過50%的人腦功能用于視覺感知,而大腦接收到的信息 90% 來自視覺,人類利用視覺獲取和處理的信息量,遠遠超出其他途徑。
視覺的信息帶寬是最大的,其次是觸覺和聽覺。
人類大腦處理圖像的速度比文本快 6 萬倍。所謂的“可視化”,就是利用人類視覺化的思考能力,對數(shù)據(jù)進行可視表達以增強認(rèn)知的技術(shù)。
說到python的常見應(yīng)用,很多人會想到python的數(shù)據(jù)分析,作為數(shù)據(jù)分析中的表現(xiàn)層面,數(shù)據(jù)可視化都是其中必不可少的部分。但本文并非只推薦無任何數(shù)據(jù)分析需求僅需要做漂亮可視化圖表的人學(xué)習(xí)python數(shù)據(jù)可視化。本文介紹的只是一些常見的python第三方庫,畢竟作為一個工具來說,這些第三方庫使用起來并不是非常方便,也有一定的學(xué)習(xí)成本,普通的可視化推薦使用excel、wps,有條件的可以使用各種BI工具如:tableau,powerBI等。
那什么情況下需要用到python數(shù)據(jù)可視化庫呢?
如果是在某些特定場景中,需要用到python做數(shù)據(jù)分析,輸出各種圖表用于輔助分析或者數(shù)據(jù)報告展示,那這些庫則顯得必不可少,接下來將介紹一些如何學(xué)習(xí)的方法和第三方庫的介紹:
比如選擇一款合適的庫,先了解各種庫的特點,選擇合適的庫,然后學(xué)習(xí)繪圖原理,掌握的知識點
選擇官網(wǎng)是最省錢和系統(tǒng)的學(xué)習(xí)的最佳路徑,至于效率方面見仁見智。選擇書籍或視頻的方式也未嘗不可。
推薦學(xué)習(xí)使用的開發(fā)工具:JupyterNotebook。在數(shù)據(jù)分析和可視化的應(yīng)用中,jupyter無疑是首選,相比其他如pycharm等工具,可以將每一步的可視化圖表輸出在同一頁面中,方便比較分析。
- 1 -
Matplotlib
官方文檔地址:
https://matplotlib.org/2.0.2/index.html
Gallery畫廊地址:
https://matplotlib.org/2.0.2/gallery.html
matplotlib是Python數(shù)據(jù)可視化庫的OG。盡管它已有十多年的歷史,但仍然是Python社區(qū)中使用最廣泛的繪圖庫。它的設(shè)計與MATLAB非常相似,MATLAB是20世紀(jì)80年代開發(fā)的專有編程語言。通常在python數(shù)據(jù)分析的教程中經(jīng)常會包含該庫的學(xué)習(xí)。
基礎(chǔ)講解:使用matplotlib繪圖的原理,主要就是理解figure(畫布)、axes(坐標(biāo)系)、axis(坐標(biāo)軸)三者之間的關(guān)系。
步驟:創(chuàng)建figure圖形對象-> 獲取對應(yīng)位置的axes坐標(biāo)系對象->調(diào)用axes對象,進行對應(yīng)位置的圖形繪制->顯示圖形。下圖是幫助我們理解figure和axes的關(guān)系。
- 2 -
Seaborn
官方文檔地址:
https://seaborn.pydata.org/tutorial.html
Gallery畫廊地址:
https://seaborn.pydata.org/examples/index.html
Seaborn利用matplotlib的強大功能,可以只用幾行代碼就創(chuàng)建漂亮的圖表。關(guān)鍵區(qū)別在于Seaborn的默認(rèn)款式和調(diào)色板設(shè)計更加美觀和現(xiàn)代。由于Seaborn是在matplotlib之上構(gòu)建的一個更高級的庫,因此還需要了解matplotlib以便調(diào)整Seaborn的默認(rèn)值,所以在matplotlib上的調(diào)參也可以在Seaborn上面使用。Seaborn針對的點主要是數(shù)據(jù)挖掘和機器學(xué)習(xí)中的變量特征選取,seaborn可以用短小的代碼去繪制描述更多維度數(shù)據(jù)的可視化效果圖。
基礎(chǔ)講解:原理比較簡單,主要是通過sns對象調(diào)用各種類型表格的函數(shù),這里舉一個例子:
import numpy as npimport seaborn as snsfrom scipy import stats, integrate%matplotlib inline #導(dǎo)入庫sns.set(color_codes=True)np.random.seed(sum(map(ord, 'distributions')))#構(gòu)造數(shù)據(jù),每次產(chǎn)生的隨機數(shù)相同x = np.random.gamma(6, size=200) #輸出圖像的主要函數(shù),distplot是直方圖,根據(jù)需求選擇不同的圖表函數(shù)即可sns.distplot(x, kde=False, fit=stats.gamma)
- 3 -
Pyecharts
官方文檔地址:
https://pyecharts.org/
Gallery畫廊地址:
http://gallery.pyecharts.org/#/README
Echarts 是一個由百度開源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設(shè)計,得到了眾多開發(fā)者的認(rèn)可。而 Python 是一門富有表達力的語言,很適合用于數(shù)據(jù)處理。當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時,pyecharts 誕生了。
這是國人開發(fā)的一個Echarts與Python結(jié)合的輪子,可以結(jié)合JavaScript等前端技術(shù)定制我們要的主題風(fēng)格,功能非常強大,也是數(shù)據(jù)可視化非常常用的一個工具,也是比較推薦新手學(xué)習(xí)的。
基礎(chǔ)講解: 選擇圖表類型-> 聲明圖形類并添加數(shù)據(jù),比如添加x軸和y軸的數(shù)據(jù)->選擇全局變量set_global_opts,設(shè)置參數(shù)->顯示及保存圖表;
from pyecharts.charts import Barfrom pyecharts import options as opts# V1 版本開始支持鏈?zhǔn)秸{(diào)用bar = ( Bar() .add_xaxis(['襯衫', '毛衣', '領(lǐng)帶', '褲子', '風(fēng)衣', '高跟鞋', '襪子']) .add_yaxis('商家A', [114, 55, 27, 101, 125, 27, 105]) .add_yaxis('商家B', [57, 134, 137, 129, 145, 60, 49]) .set_global_opts(title_opts=opts.TitleOpts(title='某商場銷售情況')))bar.render()# 不習(xí)慣鏈?zhǔn)秸{(diào)用的開發(fā)者依舊可以單獨調(diào)用方法bar = Bar()bar.add_xaxis(['襯衫', '毛衣', '領(lǐng)帶', '褲子', '風(fēng)衣', '高跟鞋', '襪子'])bar.add_yaxis('商家A', [114, 55, 27, 101, 125, 27, 105])bar.add_yaxis('商家B', [57, 134, 137, 129, 145, 60, 49])bar.set_global_opts(title_opts=opts.TitleOpts(title='某商場銷售情況'))bar.render()
注:各種不同的圖表輸入的數(shù)據(jù)格式會有所不同,導(dǎo)致部分復(fù)雜圖表的設(shè)置難度較大。
- 4 -
ggplot
官方文檔地址:
http://ggplot.yhathq.com/
ggplot基于ggplot2,一個 R 語言繪圖系統(tǒng),以及The Grammar of Graphics的概念。ggplot的運行方式與matplotlib不同:它允許你對組件進行分層以創(chuàng)建完整的繪圖。例如,你可以從軸開始畫,然后添加點,然后是線、趨勢線等。雖然圖形語法被稱為繪圖的“直觀”方法,但經(jīng)驗豐富的matplotlib用戶可能需要時間來適應(yīng)這個新的方式。
- 5 -
Bokeh
官方文檔地址:
https://docs.bokeh.org/en/latest/
Gallery畫廊地址:
https://docs.bokeh.org/en/latest/docs/gallery.html
與ggplot一樣,Bokeh同樣基于The Grammar of Graphics,但與ggplot不同的是,它是原生Python的,而不是從R語言移植過來的。它的優(yōu)勢在于能夠創(chuàng)建交互式的網(wǎng)站圖,它可以很容易地輸出為JSON對象、HTML或交互式Web應(yīng)用程序。Bokeh還支持流媒體和實時數(shù)據(jù)。
- 6 -
Pygal
官方文檔地址:
http://www.pygal.org/en/stable/
與Bokeh和Plotly一樣,pygal提供可以嵌入Web瀏覽器的交互式圖。它的主要區(qū)別在于能夠?qū)D表輸出為SVG格式。如果你使用較小的數(shù)據(jù)集,SVG格式的圖像就可以了。但是如果制作的圖表包含數(shù)十萬個數(shù)據(jù)點,它們就會很難渲染并變得反應(yīng)遲鈍。
- 7 -
Plotly
官方文檔地址:
https://plotly.com/
你可能知道Plotly是一個數(shù)據(jù)可視化的在線平臺,但你是否也知道可以從Python筆記本使用它的功能?與Bokeh一樣,Plotly的強項正在制作交互式圖,但它提供了一些在大多數(shù)庫中沒有的圖表,如等高線圖,樹狀圖和3D圖表。
- 8 -
Geoplotlib
Github地址:
https://github.com/andrea-cuttone/geoplotlib
geoplotlib是一個用于創(chuàng)建地圖和繪制地理數(shù)據(jù)的工具庫。可以使用它來創(chuàng)建各種地圖類型,例如等值線,熱圖和點密度貼圖。你必須安裝Pyglet(面向?qū)ο蟮木幊探涌冢┎拍苁褂胓eoplotlib。盡管如此,由于大多數(shù)的Python數(shù)據(jù)可視化庫都沒有提供地圖類型,因此有一個專門的庫還是可以的。
參考文章:《數(shù)據(jù)可視化入門教程》https://www.yuque.com/mo-college/beginner-tutorial/uvaiu2
深度講解Python四大常用繪圖庫的“繪圖原理” https://my.oschina.net/u/4579597/blog/4444177