由于工作的需要,經(jīng)常需要進行可視化展示,除了一些常用的BI工具,我也會使用python對數(shù)據(jù)進行可視化。 python的第三方可視化庫有很多,比如matplotlib、seaborn、plotly、bokeh、pyecharts等等。 這次就來說一說,如何用python的第三方庫-pyecharts制作交互式?;鶊D。 
示例 ?;鶊D是可視化圖表的一種,一般用來表示數(shù)據(jù)流量。桑基圖(Sankey diagram),即?;芰糠至鲌D,也叫桑基能量平衡圖。它是一種特定類型的流程圖,圖中延伸的分支的寬度對應(yīng)數(shù)據(jù)流量的大小,比較適用于用戶流量等數(shù)據(jù)的可視化分析。因1898年Matthew Henry Phineas Riall Sankey繪制的“蒸汽機的能源效率圖”而聞名,此后便以其名字命名為“?;鶊D”。 ?;鶊D主要由邊、流量和支點組成,其中邊代表了流動的數(shù)據(jù),流量代表了流動數(shù)據(jù)的具體數(shù)值,節(jié)點代表了不同分類。邊的寬度與流量成比例地顯示,邊越寬,數(shù)值越大。 舉個例子,假如我記錄了自己一段時間的消費金額,并且分門別類列出清單:數(shù)據(jù)展示不足以一目了然地看出哪類消費多、哪類消費少,如果把它做成?;鶊D,就可以很完美地展現(xiàn)消費特征:

可交互 大部分人可能聽過echarts,它是百度旗下用于可視化設(shè)計的開源項目,而pyecharts則將echarts和python結(jié)合,方便在python中調(diào)用echarts接口,直接生成可視化圖表。
- 簡潔的 API 設(shè)計,使用如絲滑般流暢,支持鏈式調(diào)用
- 支持主流 Notebook 環(huán)境,Jupyter Notebook 和 JupyterLab
- 可輕松集成至 Flask,Django 等主流 Web 框架
- 詳細的文檔和示例,幫助開發(fā)者更快的上手項目
- 多達 400+ 地圖文件以及原生的百度地圖,為地理數(shù)據(jù)可視化提供強有力的支持
pyecharts安裝過程很簡單,用pip安裝即可,在命令行輸入:
from pyecharts.charts import Bar
bar = Bar() bar.add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]) bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) # render 會生成本地 HTML 文件,默認會在當前目錄生成 render.html 文件 # 也可以傳入路徑參數(shù),如 bar.render("mycharts.html") bar.render()
 ?;鶊D在pyecharts中通過Sankey方法實現(xiàn),它接受兩個外部輸入。一個是所有類別的集合-nodes,一個是子類、父類、數(shù)據(jù)的三方集合-links。這兩個都是以json數(shù)據(jù)格式傳入,最后以html形式輸出圖表。也就是說,首先你要把數(shù)據(jù)轉(zhuǎn)換成Sankey可以接受的形式。 我們已經(jīng)有這樣的數(shù)據(jù)表:對數(shù)據(jù)進行整理,我的做法是先初步整理成:子類-父類-數(shù)據(jù),以這樣的數(shù)據(jù)形式保存在csv中: 接著,寫個簡單轉(zhuǎn)換代碼,將上面數(shù)據(jù)轉(zhuǎn)換成nodes和links:# 導(dǎo)入相關(guān)庫 import pandas as pd from pyecharts.charts import Page, Sankey from pyecharts import options as opts
# 讀取csv文件 data = pd.read_csv(r'sample.csv',encoding='gbk',header=None)
# 生成nodes nodes = [] nodes.append({'name':'總支出'}) for i in data[0].unique(): dic = {} dic['name'] = i nodes.append(dic)
# 生成links links = [] for i in data.values: dic = {} dic['source'] = i[0] dic['target'] = i[1] dic['value'] = i[2] links.append(dic) 準備好nodes和links后,就可以調(diào)用Sankey函數(shù)
# pyecharts 所有方法均支持鏈式調(diào)用。 c = ( Sankey() .add( "費用/元", nodes, links, linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source",type_="dotted"), label_opts=opts.LabelOpts(position="right",), ) .set_global_opts(title_opts=opts.TitleOpts(title="我的生活支出一覽")) ) # 輸出html可視化結(jié)果 c.render('result.html') 你可以通過配置項otps來設(shè)置圖表的顏色、標簽、標題等信息,具體細節(jié)可以去官網(wǎng)查詢,這里不做贅述。 生成html文件后,直接通過瀏覽器打開即可,就可以看到能交互的桑吉圖了本文介紹了如何使用pyecharts在python中制作交互式桑基圖,希望能給大家的可視化提供幫助!
|