
大家好,我是小z~
最近,不止一次收到群里小伙伴的截圖追問:
“這個圖叫什么???”
“這個圖真好看?。?!怎么畫???”
小z本沒有干貨,問的人多了,也便有了干貨。
此圖姓桑名基,平素不喜露面。奈何天生麗質(zhì),偶有露面,必引眾人圍觀。
時人有云:“?;;?,高貴美麗!”
1
據(jù)小z不嚴謹?shù)某闃犹釂柦y(tǒng)計,90%想學習?;鶊D的旁友,都是被她妖艷炫酷的外表所吸引。
而桑基圖真正代表了什么?和類似圖表相比的獨特性是什么?卻幾乎無人問津。
害!人真的是視覺動物!
言歸正傳,我們來看看百科的官方解釋:
?;鶊D(Sankey diagram),即?;芰糠至鲌D,也叫?;芰科胶鈭D。它是一種特定類型的流程圖,圖中延伸的分支的寬度對應數(shù)據(jù)流量的大小,通常應用于能源、材料成分、金融等數(shù)據(jù)的可視化分析。因1898年Matthew Henry Phineas Riall Sankey繪制的"蒸汽機的能源效率圖"而聞名,此后便以其名字命名為"桑基圖"。
Emmm,有點內(nèi)個意思了,結(jié)合其他資料,做進一步的匯總提煉:
文字太蒼白,下面我們用Python來繪制一個具體的實例~
2
動手之前,我們再次敲黑板,回顧?;鶊D組成要素的重點——節(jié)點、邊和流量。
任何?;鶊D,無論展現(xiàn)形式如何夸張,色彩如何艷麗,動效如何炫酷,本質(zhì)都逃不出上述3點。
只要我們定義好上述3個要素,Python的pyecharts庫能夠輕松實現(xiàn)桑基圖的繪制。
這里我們用“當代青年熬夜原因分析”數(shù)據(jù)為例:
數(shù)據(jù)來源:這個數(shù)據(jù)是小z近兩周賣炒粉時口頭做的調(diào)研
很規(guī)整的性別、熬夜原因、人數(shù)三列數(shù)據(jù)。
不過,要用pyecharts來畫圖,得入鄉(xiāng)隨俗,按照它定的規(guī)則來規(guī)整數(shù)據(jù)源。
首先是節(jié)點,這一步需要把所有涉及到的節(jié)點去重規(guī)整在一起。也就是要把性別一列的“男”、“女”和熬夜原因一列的“打游戲”、“加班”、“看劇”以列表內(nèi)嵌套字典的形式去重匯總:
接著,定義邊和流量,數(shù)據(jù)從哪里流向哪里,流量(值)是多少,循環(huán)+字典依然可以輕松搞定:
source-target-value的字典格式,很清晰的描述了數(shù)據(jù)的流轉(zhuǎn)情況。
這兩塊數(shù)據(jù)準備完畢,?;鶊D已經(jīng)完成了80%,剩下的20%,只是固定格式的繪圖代碼:
from pyecharts.charts import Sankeyfrom pyecharts import options as optspic = ( Sankey() .add('', #圖例名稱 nodes, #傳入節(jié)點數(shù)據(jù) linkes, #傳入邊和流量數(shù)據(jù) #設(shè)置透明度、彎曲度、顏色 linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = "source"), #標簽顯示位置 label_opts=opts.LabelOpts(position="right"), #節(jié)點之前的距離 node_gap = 30, ) .set_global_opts(title_opts=opts.TitleOpts(title = '熬夜原因?;鶊D')))pic.render('test.html')
一個回車下去,看看成果:
果然,男打游戲女看劇,加班熬夜是兒戲。
如果想要垂直顯示,只需要在add函數(shù)里面加一個orient="vertical"就好:
pic = ( Sankey() .add('', nodes, linkes, linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = "source"), label_opts=opts.LabelOpts(position="top"), node_gap = 30, orient="vertical", #更改的是這里 ) .set_global_opts(title_opts=opts.TitleOpts(title = '熬夜原因細分桑基圖')))pic.render('test2.html')
OK!不過,還有同學意猶未盡,這個是涉及到兩層的流轉(zhuǎn),那如果三層,需要怎么畫呢?
不慌,先導入(狗糧)數(shù)據(jù):
這是某寵物品牌,3月份主要產(chǎn)品購買路徑(第一次和第二次)的數(shù)據(jù),先是品類,其次是第一次購買的產(chǎn)品類型,接著是第二次購買的產(chǎn)品類型,最后一列對應人數(shù)。
注:這里第一次購買的產(chǎn)品前面加了“1-”,第二次購買加了“2-”的區(qū)分標識。
畫圖必備的nodes節(jié)點實現(xiàn)很簡單,所有節(jié)點(品類、第一次購買、第二次購買)做去重匯總,對上面生成nodes代碼稍作調(diào)整就可以:
而linkes只接受source-traget-value的格式,得先對源數(shù)據(jù)進行格式調(diào)整,分別形成“品類-第一次購買-人數(shù)”,“第一次購買-第二次購買-人數(shù)”的樣式,再統(tǒng)一匯總:
規(guī)整匯總好之后,只需要復用上面的linkes代碼:
畫圖代碼幾乎沒變,只是改了個標題:
pic = ( Sankey() .add('', nodes, linkes, linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = 'source'), label_opts=opts.LabelOpts(position = 'top'), node_gap = 30, ) .set_global_opts(title_opts=opts.TitleOpts(title = '客戶購買路徑流轉(zhuǎn)圖')))pic.render('test3.html')
大功告成,So easy!無論是多少層數(shù)據(jù)的流轉(zhuǎn),只要定義好nodes和linkes,就能以不變應萬變。
最后,通過上面的桑基圖,我們能夠非常直觀的洞察到客戶購買流轉(zhuǎn)規(guī)律:
原本死板的數(shù)據(jù),在?;难b扮之下,變得楚楚動人。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10