用python可以画的可爱的图形_利用Python绘制诱人的桑基图
作者:小z
来源:数据不吹牛
大家好,我是小z~
最近,不止一次收到群里小伙伴的截图追问:
“这个图叫什么???”
“这个图真好看!!!怎么画啊?”
小z本没有干货,问的人多了,也便有了干货。
此图姓桑名基,平素不喜露面。奈何天生丽质,偶有露面,必引众人围观。
时人有云:“桑基桑基,高贵美丽!”
桑基是何许图也
据小z不严谨的抽样提问统计,90%想学习桑基图的旁友,都是被她妖艳炫酷的外表所吸引。
而桑基图真正代表了什么?和类似图表相比的独特性是什么?却几乎无人问津。
害!人真的是视觉动物!
言归正传,我们来看看百科的官方解释:
桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的"蒸汽机的能源效率图"而闻名,此后便以其名字命名为"桑基图"。
Emmm,有点内个意思了,结合其他资料,做进一步的汇总提炼:
桑基两个字取自“发明”者的名字
属于流程图的一种,核心在于展示数据的流转
主要由节点、边和流量三要素构成,边越宽代表流量越大
遵循守恒定律,无论怎么流动,开端和末端数据总是一致的
文字太苍白,下面我们用Python来绘制一个具体的实例~
Python手把手绘制桑基图
动手之前,我们再次敲黑板,回顾桑基图组成要素的重点——节点、边和流量。
任何桑基图,无论展现形式如何夸张,色彩如何艳丽,动效如何炫酷,本质都逃不出上述3点。
只要我们定义好上述3个要素,Python的pyecharts库能够轻松实现桑基图的绘制。
这里我们用“当代青年熬夜原因分析”数据为例:
数据来源:这个数据是小z近两周卖炒粉时口头做的调研
很规整的性别、熬夜原因、人数三列数据。
不过,要用pyecharts来画图,得入乡随俗,按照它定的规则来规整数据源。
首先是节点,这一步需要把所有涉及到的节点去重规整在一起。也就是要把性别一列的“男”、“女”和熬夜原因一列的“打游戏”、“加班”、“看剧”以列表内嵌套字典的形式去重汇总:
接着,定义边和流量,数据从哪里流向哪里,流量(值)是多少,循环+字典依然可以轻松搞定:
source-target-value的字典格式,很清晰的描述了数据的流转情况。
这两块数据准备完毕,桑基图已经完成了80%,剩下的20%,只是固定格式的绘图代码:
from pyecharts.charts import Sankey
from pyecharts import options as opts
pic = (
Sankey()
.add('', #图例名称
nodes, #传入节点数据
linkes, #传入边和流量数据
#设置透明度、弯曲度、颜色
linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = "source"),
#标签显示位置
label_opts=opts.LabelOpts(position="right"),
#节点之前的距离
node_gap = 30,
)
.set_global_opts(title_opts=opts.TitleOpts(title = '熬夜原因桑基图'))
)
pic.render('test.html')
一个回车下去,看看成果:
果然,男打游戏女看剧,加班熬夜是儿戏。
如果想要垂直显示,只需要在add函数里面加一个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!不过,还有同学意犹未尽,这个是涉及到两层的流转,那如果三层,需要怎么画呢?
不慌,先导入(狗粮)数据:
这是某宠物品牌,3月份主要产品购买路径(第一次和第二次)的数据,先是品类,其次是第一次购买的产品类型,接着是第二次购买的产品类型,最后一列对应人数。
注:这里第一次购买的产品前面加了“1-”,第二次购买加了“2-”的区分标识。
画图必备的nodes节点实现很简单,所有节点(品类、第一次购买、第二次购买)做去重汇总,对上面生成nodes代码稍作调整就可以:
而linkes只接受source-traget-value的格式,得先对源数据进行格式调整,分别形成“品类-第一次购买-人数”,“第一次购买-第二次购买-人数”的样式,再统一汇总:
规整汇总好之后,只需要复用上面的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 = '客户购买路径流转图'))
)
pic.render('test3.html')
大功告成,So easy!无论是多少层数据的流转,只要定义好nodes和linkes,就能以不变应万变。
最后,通过上面的桑基图,我们能够非常直观的洞察到客户购买流转规律:
出于试错成本的考量,大部分客户第一次购买的是小规格狗粮。
第一次购买小规格狗粮的客户,流失(第二次未购买)情况严重,且再次购买客户,更倾向于继续选择小规格狗粮尝试,而不是信任性的购买大规格狗粮。
第一次购买大规格狗粮的客户,留存下来的客户已经建立起对品牌的信任感,再次购买大部分选择了大规格狗粮。
购买狗粮的客户第二次复购鲜有尝试玩具的,而第一次购买玩具的客户,也并未建立起对品牌狗粮的兴趣。
原本死板的数据,在桑基的装扮之下,变得楚楚动人。
注:相关数据源和代码,已经规整好,公众号后台回复“桑基图”即可获取。
参考来源:pyecharts官方文档
百度百科
朱卫军:公众号《python大数据分析》
镝数dydata.io
经济学人:www.economist.com
◆◆◆ ◆◆
长按二维码关注我们
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
用python可以画的可爱的图形_利用Python绘制诱人的桑基图相关推荐
- 用python可以画的可爱的图形_用Python的Turtple画图形
不知道各位是否还记得在小学或者初中的时候,我们接触过一种语言叫做logo语言,这个语言可以画正方形,画三角形,画圆.而用Python画图形也有点类似logo语言的意思. 在画图之前,我们需要启动一个模 ...
- 用python画太阳花原理_用Python绘制诱人的桑基图,一眼看透熬夜和狗粮的秘密
最近,不止一次收到群里小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 问的人多了,也便有了干货. 此图姓桑名基,平素不喜露面.奈何 ...
- 用Python绘制诱人的桑基图,一眼看透熬夜和狗粮的秘密...
↑ 关注 + 置顶 ~ 别错过小z的有趣内容 大家好,我是小z~ 最近,不止一次收到群里小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?&quo ...
- python怎么画出圆润的曲线_利用python画出AUC曲线的实例
以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...
- python画简单图片-Python绘制“高颜值”桑基图
请看以下图片: 相信许多小伙伴第一眼就会被它美丽的外表所吸引,由此引发一连串的惊叹: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 为了满足大家的好 ...
- python画二维温度云图_利用python画出词云图
本文将介绍如何利用python中相应的模块画出词云图.首先给出效果图: 其中词云图中的词汇是对手机短信中的垃圾短信的统计,字体越大表示在垃圾短信中出现的频次越高.下面给出具体的步骤. 读取" ...
- python代码画小猪佩奇动画片全集_使用python画个小猪佩奇的示例代码
本文给大家较详细的介绍了使用python画个小猪佩奇的示例代码,感兴趣的朋友一起看看吧 基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴, ...
- python自动化测试脚本可以测php吗_利用Python语言实现实验室自动化
作为一名系统和应用工程师,得益于自动化仪器和软件,我已经节省了不计其数的日日夜夜;例如LabVIEW,这是一款系统设计平台和开发环境,支持可视化编程语言.LabVIEW支持用户利用友好的图形用户界面( ...
- python对数据进行合并的函数_利用Python pandas对Excel进行合并的方法示例
前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...
最新文章
- 一份来自贾扬清的AI修炼指南:不存在算法工程师,调参侠没有市场
- 【opus源码分析】【互相关函数源码分析】xcorr_kernal_c
- Swift3.0语言教程字符串与文件的数据转换
- 三问TDD: 单元测试总是好的吗?
- 双十一 手淘技术用了这几招
- 阐述简称PO,VO,TO,BO,DAO,POJO
- C语言 堆内存操作
- 哪些事情瞬间暴露了你的贫穷?
- 有很帅气的微信头像推荐吗?
- 解决Windows 2000起动时“NTLDR is missing”故障
- IOS contentOffset该如何理解
- 【QGIS】【OsGeo4w】安装方法
- 国内常见的14款低代码平台介绍
- XCodeGhost 病毒检查方法
- 数据分析之客户价值模型(RFM)技术总结
- 垃圾小白羊leetcode刷题记录1
- android wifi 移植记录
- PHP文案馆头像壁纸小程序源码独立后台
- 知识:ubuntu硬盘挂载详细步骤:
- Vuex状态刷新状态丢失的处理方法