根据不完整统计,90%想用sankey图的朋友都是因为被它炫酷的外表所吸引,举个例子:

在这里插入图片描述

关于sankey图的定义是这样描述的:

即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。

流程图的一种

由若干个三元素组成(节点,边,流量)

遵循守恒定律,无论怎么流动,开端和末端数据始终一致

下面我们来简单实现一个Sankey图

第一步,我们先收集数据。

这里我在2020意大利新冠肺炎案例统计收集了意大利的患者年龄分布。

我们用pandas库来绘制统计表。当然也可以用excel保存为xlsx文件。

db1 = pd.DataFrame({

'country':['Italy','Italy','Italy','Italy'],

'ages':['18岁以下','19-50岁','50-70岁','70岁以上'],

'confirm':['1677','31394','43617','43139'],

'Deceased':['167','408','4492','34813'],

'Active/Recovered': ['1510','30986','39125','8326']

})

print(db1)

那么打印下统计表得到:

country ages confirm Deceased Active/Recovered

0 Italy 18岁以下 1677 167 1510

1 Italy 19-50岁 31394 408 30986

2 Italy 50-70岁 43617 4492 39125

3 Italy 70岁以上 43139 34813 8326

如果是要读入excel保存的表格那么只要简单的一行命令:

db1 = pd.read_excel('statistik.xlsx)

第二步,我们开始处理数据

画图按照Sankey图的规则,需要定义节点,边,流量。

可以理解为两个数据结构:nodes和links。

在这个案例,所有节点就是:Italy,18岁以下,19-50岁,50-70岁,50-70岁,confirm,Deceased,Active/Recovered

我们用一个字典嵌套的链表来储存:

nodes=[]

for i in range(2):

values = db1.iloc[:,i].unique()

for value in values:

dic={}

dic['name'] = value

nodes.append(dic)

nodes.append({'name':'Deceased'})

nodes.append({'name':'Active/Recovered'})

[{'name': 'Italy'}, {'name': '18岁以下'}, {'name': '19-50岁'},

{'name': '50-70岁'}, {'name': '70岁以上'}, {'name': 'Deceased'},

{'name': 'Active/Recovered'}]

然后定义边和流量,数据从哪里流向哪里,流量为多少,按照source-target-value的格式保存。我们用循环加字典可以轻松搞定

links = []

for i in db1.values:

dic={}

dic['source']=i[0]

dic['target']=i[1]

dic['value']=i[2]

links.append({'source':i[0],'target':i[1],'value':i[2]})

links.append({'source':i[1],'target':db1.keys()[3],'value':i[3]})

links.append({'source':i[1],'target':db1.keys()[4],'value':i[4]})

print(links)

[{'source': 'Italy', 'target': '18岁以下', 'value': '1677'},

{'source': '18岁以下', 'target': 'Deceased', 'value': '167'},

{'source': '18岁以下', 'target': 'Active/Recovered', 'value': '1510'},

{'source': 'Italy', 'target': '19-50岁', 'value': '31394'},

{'source': '19-50岁', 'target': 'Deceased', 'value': '408'},

{'source': '19-50岁', 'target': 'Active/Recovered', 'value': '30986'},

{'source': 'Italy', 'target': '50-70岁', 'value': '43617'},

{'source': '50-70岁', 'target': 'Deceased', 'value': '4492'},

{'source': '50-70岁', 'target': 'Active/Recovered', 'value': '39125'},

{'source': 'Italy', 'target': '70岁以上', 'value': '43139'},

{'source': '70岁以上', 'target': 'Deceased', 'value': '34813'},

{'source': '70岁以上', 'target': 'Active/Recovered', 'value': '8326'}]

nodes和links定义好了之后,就已经完成了80%

第三步,绘图

我们可以使用pyecharts的库来实现,这一段代码几乎是固定的格式

from pyecharts.charts import Sankey

from pyecharts import options as opts

pic = (

Sankey().add('',

nodes,

links,

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('test.html')

好了,到这来大功告成,运行python文件,最后会生成一个test.html。

用浏览器打开就可以欣赏做出来的的sankey图:

在这里插入图片描述

python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图相关推荐

  1. python 桑基图 地理坐标_利用Python+Excel制作桑基(Sankey)图

    利用Python+Excel制作桑基(Sankey)图 桑基图的简介 桑基图 (Sankey  Diagram),是一种特定类型的流图,用于描述一组值到另一组值的流向.下图为1869年,查尔斯米纳德( ...

  2. python 桑基图_数据可视化之 Sankey 桑基图的实现

    什么是桑基图 Google 搜索桑基图,可以搜到一大堆定义.简而言之,桑基图是一种数据流图,展示了数据是如何从左到右流向最后的节点,每条边代表一条数据流,宽度代表数据流的大小.桑基图常用于流量分析,可 ...

  3. python解放二次开发_[转载]Python二次开发程序详解

    ###################################### ## Fundamentschwingungsstudie ## ## nur geeignet fuer ABAQUS ...

  4. python中读取文件编码_[转载]python中使用文件的读取编码问题

    原文链接:https://www.cnblogs.com/qianboping/p/6524420.html 今天想写个程序合并文件的,以前一直觉得python的编码解码好烦,只要处理文件合并之类的都 ...

  5. python二级选择题及答案_转载 |python二级选择题与分析(6)

    算法的时间复杂度是指 A 执行算法程序所需要的时间 B 算法程序的长度 C 算法程序中的指令条数 D 算法执行过程中所需要的基本运算次数 正确答案: D 下列关于栈的叙述中正确的是 A 在栈中只能插入 ...

  6. python收入波动告警分析_使用Python/Pandas分析告警日志数据

    作者:吕磊 文章来自微信公众号:平台人生 Python Python是一种面向对象的解释型程序设计语言.作为一种脚本语言,Python在运行性能上相对C/C++等编译型语言有一定不足,但Python语 ...

  7. Python+Flask实现全国、全球疫情大数据可视化(二):网页页面布局+echarts可视化中国地图、世界地图、柱状图和折线图

    文章目录 相关文章 一.实现效果 二.页面布局html+css main.html main.css 三.echarts图表制作 1.全国累计趋势折线图ec_l1.js 2.全国趋势变化折线图ec_l ...

  8. python数据分析是什么意思_选择python进行数据分析的理由和优势

    1.python大量的库为数据分析提供了完整的工具集 2.比起MATLAB.R语言等其他主要用于数据分析语言,python语言功能更加健全 3.python库一直在增加,算法的实现采取的方法更加创新 ...

  9. python数据分析之连接MySQL数据库并进行数据可视化

    大家好,我是带我去滑雪! 本期将熟悉MySQL数据库以及管理和操作MySQL数据库的数据库管理工具Navicat Premium,然后在python中调用MySQL数据库进行数据分析和数据可视化. 目 ...

最新文章

  1. 今天看到的如何做个坏男人的招数
  2. android自助终端界面_ZTHP500 | 桌面式人脸消费终端
  3. 使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
  4. 对一个存储过程语法的解读
  5. Jenkins集群搭建
  6. LABVIEW宝典(第2版)简版电子书出炉了,需要赶紧下
  7. windows7共享打印机无法连接0x00000bcb错误怎么解决
  8. Python 贪吃蛇小游戏
  9. 小米笔记安装双系统linux,小米笔记本电脑怎么安装双系统?-小米win7
  10. ERP项目学习(一)
  11. html5富文本编辑器菜鸟手册,富文本编辑器froalaEditor(全面)附教程
  12. leetcode 5724. 绝对差值和
  13. C++ 使用fdk-aac对音频编码
  14. 谷歌浏览器被2345主页强制绑定
  15. 【b503】篝火晚会
  16. art mac air 使用优盘安装windows7
  17. ios-破解ipa包中的png 图片
  18. 市面上常用的语音识别模块主要包含哪些组件?
  19. CSS_css sprite原理优缺点及使用
  20. jc机制是什么_单片机中jc指令表示什么?有什么用?

热门文章

  1. iOS关于像素的适配
  2. JS计算两个时间相差多久,相差年,月,日,小时,分钟
  3. VUE还没生效,页面闪屏的问题解决办法 v-cloak
  4. Go进阶:反射3定律
  5. 仿美团外卖的全栈项目(vue+node+mongodb)带支付-大三求实习
  6. MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
  7. 自己动手,做一款抬头显示的「Todo Hud」
  8. 为什么Scrum模式适合软件开发?
  9. Oracle之sqlpluse显示格式
  10. 45个优秀的国外电子商务网站设计实例