↑ 关注 + 置顶 ~ 别错过小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 optspic = (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,就能以不变应万变。

最后,通过上面的桑基图,我们能够非常直观的洞察到客户购买流转规律:

  • 出于试错成本的考量,大部分客户第一次购买的是小规格狗粮。

  • 第一次购买小规格狗粮的客户,流失(第二次未购买)情况严重,且再次购买客户,更倾向于继续选择小规格狗粮尝试,而不是信任性的购买大规格狗粮。

  • 第一次购买大规格狗粮的客户,留存下来的客户已经建立起对品牌的信任感,再次购买大部分选择了大规格狗粮。

  • 购买狗粮的客户第二次复购鲜有尝试玩具的,而第一次购买玩具的客户,也并未建立起对品牌狗粮的兴趣。

原本死板的数据,在桑基的装扮之下,变得楚楚动人。

注:相关数据源和代码,已经规整好,在“数据不吹牛”公众号后台回复“桑基图”即可获取。

参考来源:

  1. pyecharts官方文档

  2. 百度百科

  3. 朱卫军:公众号《python大数据分析》

  4. 镝数dydata.io

  5. 经济学人:www.economist.com


End
    趣味实例 | 商业分析3步走!    Python数据分析实战 | 同期群分析    同同同期群分析到底是个啥?
数据不吹牛读者群已经建立后台回复“入群”,加入组织,一起吹水和交流干货

用Python绘制诱人的桑基图,一眼看透熬夜和狗粮的秘密...相关推荐

  1. 用python可以画的可爱的图形_利用Python绘制诱人的桑基图

    作者:小z 来源:数据不吹牛 大家好,我是小z~ 最近,不止一次收到群里小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 小z本没有 ...

  2. 用python画太阳花原理_用Python绘制诱人的桑基图,一眼看透熬夜和狗粮的秘密

    最近,不止一次收到群里小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 问的人多了,也便有了干货. 此图姓桑名基,平素不喜露面.奈何 ...

  3. python画简单图片-Python绘制“高颜值”桑基图

    请看以下图片: 相信许多小伙伴第一眼就会被它美丽的外表所吸引,由此引发一连串的惊叹: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 为了满足大家的好 ...

  4. Python图形系列之桑基图

    Python图形之桑基图 工作过程中,上司曾经发了一个下面的图问是否可以做一个这样的图,当时刚刚培训完大数据的我四处询问童鞋也没有问出这个图到底怎么做,偶然的一天,在读公众号的时候看到了一篇用pyth ...

  5. R语言多层桑基图_绘制炫酷桑基图,R语言(networkD3包)能搞定?

    你知道如何使用R语言绘制桑基图吗? 小锐当然知道啦,并且教你 绘制酷炫的桑基图. 开课啦 桑基图(Sankey)是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,其最明显的特征就是,始末 ...

  6. 数据治理 Python桑基图处理表关系

    数据治理 Python桑基图处理表关系 需求 随着hive库表越来越多,调度出问题后,排查时间越来越长.计划通过桑基图以及血缘图谱解决,当前先用桑基图页面顶一段时间.后期做成web服务,如果有可能,尽 ...

  7. 【D3.js数据可视化实战】--(3)桑基图(sankey)的绘制

    什么是桑基图 用D3绘制简单的Sankey图 添加文字 圆形节点 添加交互效果 注:本文未经作者允许严禁转载和演绎 1 什么是桑基图? 桑基图是流图 (flow diagram )的一种,用来描述能量 ...

  8. 设计桑基图_教你用pyecharts制作交互式桑基图,赶快学起来吧!

    由于工作的需要,经常需要进行可视化展示,除了一些常用的BI工具,我也会使用python对数据进行可视化. python的第三方可视化库有很多,比如matplotlib.seaborn.plotly.b ...

  9. 桑基图(Echarts)——自定义风格

    桑基图绘制--使用Echarts 桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源.材料成 ...

最新文章

  1. ACMNO.16用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数 输入 X 输出 X的
  2. DeepMind大招,以视觉为媒介,做无监督机器翻译,效果极好
  3. 【jQuery Demo】图片瀑布流实现
  4. Spring(IOC+AOP)
  5. git rm–r folder/file fatal:pathspec did not match any files
  6. linux 不能发送邮件可能的原因
  7. 窗口闪退_今天只讲一件事,精雕软件的BUG(进浮雕闪退,笔刷变圈圈等)
  8. 电脑ping服务器显示传输失败,Win10系统ping时出现传输失败常见故障解决办法
  9. 类增量学习(Class-Incremental Learning)领域部分经典论文汇总
  10. error C2143: 语法错误 : 缺少“;”(在“using”的前面)
  11. RenderTransformOrigin 的作用
  12. python基础--集合
  13. java jave1.0.2_GitHub - dadiyang/jave at v1.0.2
  14. 2019年win10最精简版本——win10企业2019长期服务版本下载和激活密钥
  15. 智能科学与技术是不是属于计算机专业,智能科学与技术专业属于什么类别
  16. HDU - 1546 Idiomatic Phrases Game(dijkstra最短路)
  17. java 计算日期时间差_Java计算日期和时间差
  18. 力扣(LeetCode)个人主页draw()方法怎么画出好看图案? // 使用函数 draw 绘制图形,反斜杠 “\“ 请使用 “\\“ 转义
  19. 一个统计Word文档中行数的VBA例程
  20. 金融业移动管理驾驶舱产品功能介绍

热门文章

  1. FastAdmin 多表联查 踩坑
  2. SOAP UI工具填写用户名密码校验通不过,需要报文头添加
  3. iOS——SDWebImage解读
  4. 定时器Timer(一)—— 定时器Timer的使用
  5. matlab——遗传算法中的选择,交叉,变异等一系列问题解析(一)
  6. 自己制作游戏(怎么自己做游戏)
  7. Fedora Core 6 服务详解
  8. 05Linux 第2天 进阶指令
  9. 数据结构 第5章 树和二叉树 课后答案
  10. 解码人类基因组:人类基因组计划后17年,X染色体被解码了