對於人類來說,圖案和文字這兩種信息表現方式,圖案應該更早於文字被髮明,現代考古人員時常在山洞裡發現原始人刻畫的一些巖畫。
總的來說,圖案比文字更具有視覺衝擊力和表現力,所以在計算機世界裡,我們通常喜歡把文字數據轉化為圖表數據,用於向別人更加精準有效的傳達數據信息。
今天我們就來講講在Python中如何把數據轉換為可視化的圖表。
本章知識點:
- pyecharts簡介與安裝
- pyecharts創建第一個圖表
- pyecharts的實際數據應用
pyecharts簡介與安裝
說到 pyecharts 要先提到它的前身 ECharts, ECharts是由百度開源的一款使用 JavaScript 實現的開源可視化庫,涵蓋了各種圖表、滿足各類業務需求,現在已經命名為Apache ECharts(由Apache基金會接管)。
而 pyecharts 就是 ECharts 在Python中的實現,其核心原理主要是寫了一個Python的庫,封裝了ECharts各類圖表的基本操作,然後通過渲染機制,輸出一個包含JS代碼的HTML文件,其核心思想還是借用了ECharts的底層庫,只是用Python封裝了一次之後便於本地應用程序使用罷了。
安裝pyecharts很簡單,直接pip即可
<code>pip install pyecharts/<code>
現在pyecharts的最新版本是 1.7.1 需要Python3.6+的環境運行。
pyecharts創建第一個圖表
pyecharts的使用很簡單,直接import需要用到的圖表組件、設置相關參數、渲染即可。
現在讓我們先用幾行代碼來創建一個柱狀圖。
以上代碼會在程序當前運行目錄創建一個render.html的文件,用於展示圖表。
來解釋一下代碼:
- from pyecharts.charts import Bar 用於導入Bar 這個類,Bar就是用於柱狀圖處理的類。
- bar = Bar() 實例化Bar類,命名為bar。
- bar.add_xaxis()方法用於添加柱狀圖的X座標數據,它可以接收一個列表或元祖數據。
- bar.add_yaxis()方法用於添加柱狀圖的Y座標數據,它可以接收一個列表或元祖數據。
- bar.render()用於渲染結果HTML內容,不傳參數默認文件名為 render.html,也可以自定義文件名作為參數傳遞進去。
再來看看render.html的源碼。
通過源碼我們可以看他它實際上就是一堆HTML+JS代碼的實現,通常情況下我們不用關心render.html的源碼內容,只需要生成之後在瀏覽器直接展示它即可。
介紹完pyecharts的基本使用後,讓我們來一點實際的例子吧。
pyecharts的實際數據應用
首先我想到了以成都市2019年的統計年鑑數據作為數據源進行一系列的圖表展示。
接下來,我準備選擇幾組具體的數據來進行圖表展示。
第一組我選擇成都歷年社會經濟主要指標人均水平的數據。
如下圖:
把地區生產總值數據提取出來,代碼如下:
我們可以看到代碼跟之前的例子變化不大,無非是把x,y軸的數據換了而已。
最後通過圖表的展示,我們可以發現2000年後的10多年間,成都的人均GDP變化巨大。
數據太單薄?我們多加一個居民儲蓄餘額來看看。
柱狀圖的參數基本規則就是X軸只有一個,Y軸可以多個。
現在再來看看兩個Y軸數據的表現。
毫不誇張的說,我的儲蓄餘額肯定給成都人民嚴重拖後腿了......
接著我們來弄一個餅圖,用來分析一下人口數據,數據源如下。
最終代碼和效果如下:
餅圖的代碼和柱狀圖稍微有點區別,來解釋一下吧。
- 首先引入了一個新的庫,叫做opts,該庫主要用於圖表參數設置的,在這裡我們用c.set_global_opts(title_opts=opts.TitleOpts(title="成都全市人口男女比例")) 把圖表標題設置為了成都全市人口男女比例,這個寫法是pyecharts封裝的不夠優雅,大家記住這種寫法就是了,set_global_opts() 函數可以用來設置標題、工具條、提示文本等等。
- 在第6行有一個zip(keys,values)的操作,zip()函數用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。簡單的說就是zip()函數可以用於重組多個迭代對象,重組過程中相同元素下標的數據會被重新打包組合在一起,比如將["a","b","c"]和[1,2,3]這兩個列表進行zip之後,就會得到一個包含 三個元組('a', 1)、('b', 2)、('c', 3) 的對象,因為直接zip()之後得到的是一個迭代對象,而不是列表或者元組數據,所以如果我們要直接將結果作為數據使用,需要進行一次類型轉換 list(zip(**args))。那麼顯而易見,本例子中的zip()結果就應該是 ('男性', 7322452)、('女性', 7438028)。這個數據正好是餅圖需要的。
- 在第9行有一個 c.add("", list(data))的代碼,Pie類的add()函數用於餅圖繪製所需要用到的參數。至於為什麼第一個參數是一個空字符串,其實因為add()函數第一個參數名為series_name,用來表示序列名稱,其實在圖表展示上沒什麼用處,所以我就給它設置為空字符串了,大家可以隨意設置什麼都行 。最後list(data)沒什麼好說的,就是把zip結果轉換成列表,
- 在11行的render()中,我自定義了輸出文件名pie.html。
其實我們也可以在一個頁面上提供多個圖表。可以用多個函數將所以用到圖表的代碼包裝起來,然後統一調渲染即可。
最終效果如下:
總結
今天主要講到了使用pyecharts產生各種圖表的基礎之後,還有各種酷炫的圖表效果等待著我們去一一實現,例如用地圖展現各地區人均消費水平,消費品種等等,我們將在Python數據分析系列的後續章節繼續給大家分享相關知識。
歡迎關注我 “紙飛機編程”,獲取更多有趣的Python編程信息。