当前位置: 首页 > 编程日记 > 正文

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

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

00ee07d50140

在这里插入图片描述

关于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图:

00ee07d50140

在这里插入图片描述

相关文章:

[恢]hdu 2015

2011-12-14 05:49:09 地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2015 题意&#xff1a;中文&#xff0c;忒麻烦了。 代码&#xff1a; # include <stdio.h>int main (){int n, m, flag ;int i, sum, cnt ;while (~scanf ("%d%d", &n, &a…

http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站

wordpress是世界上使用最多的php开源博客系统&#xff0c;功能强大&#xff0c;而且拥有众多的插件&#xff0c;可扩展性强。 最近&#xff0c;我也用它做了一个企业网站&#xff0c;欢迎浏览&#xff1a;http://www.shanghaihaocong.com&#xff0c;上海灏璁实业有限公司转载于…

蓝桥杯 扑克序列(全排列)

扑克序列 A A 2 2 3 3 4 4&#xff0c; 一共4对扑克牌。请你把它们排成一行。要求&#xff1a;两个A中间有1张牌&#xff0c;两个2之间有2张牌&#xff0c;两个3之间有3张牌&#xff0c;两个4之间有4张牌。 请填写出所有符合要求的排列中&#xff0c;字典序最小的那个。 例如&a…

tensorflow with求导_3.4tensorflow2.x自动求导原理函数详解

自己开发了一个股票智能分析软件&#xff0c;功能很强大&#xff0c;需要的点击下面的链接获取&#xff1a;1.1 tensorflow2.x自动求导1.1.1 自动求导GradientTape类GradientTape的作用就是用于自动求导&#xff0c;需要有自变量x和因变量y&#xff0c;调用gradient(y…

WinRAR也能实现智能备份

日志 唐山郎&#xffe5; 一切随缘,顺其自然.加博友 关注他 最新日志 2012年意味着机会还是灾难墙壁网线插座的接法佛度有缘人我~想~你&#xff0c;但不。会找你asp.net"服务器应用程序不可超惊艳! 古装美女超精美剪辑该作者的其他文章 博主推荐 相关日志 随机阅读 首页推…

MediaCodeC解码视频指定帧,迅捷、精确

原创文章&#xff0c;转载请联系作者 若待明朝风雨过&#xff0c;人在天涯&#xff01;春在天涯 原文地址 提要 最近在整理硬编码MediaCodec相关的学习笔记&#xff0c;以及代码文档&#xff0c;分享出来以供参考。本人水平有限&#xff0c;项目难免有思虑不当之处&#xff0c;…

threejs 绘制球体_ThreeJs 绘制点、线、面

所有的三位物体都是由点构成&#xff0c;两点构成线&#xff0c;三点构成面&#xff0c;ThreeJs又如何绘制出点、线、面呢 &#xff1f;在ThreeJs中&#xff1a;模型由几何体和材质构成模型以何种形式(点、线、面)展示取决于渲染方式1. 几何体首先我们来创建一个自定义的几何体…

model多表操作

一. 创建模型 from django.db import models# Create your models here.#比较常用的作者信息放到这个表里面 class Author(models.Model): id models.AutoField(primary_keyTrue)namemodels.CharField(max_length32)agemodels.IntegerField()authorDetailmodels.OneToOneField…

cocos2d-x注意事项(十)Lua发展飞机战争-4-创建主角

二战中被称为二战飞机飞机&#xff0c;当然&#xff0c;以飞机作业。这是一个游戏&#xff0c;我们必须加入一个飞机——这是我们的英雄。 首先创建一个层&#xff08;PlaneLayer&#xff09;要显示飞机。然后&#xff0c;create飞机初始化方法 module("PlaneLayer",…

.PHONY makefile中的伪目标

拿clean举例&#xff0c;如果make完成后&#xff0c;自己另外定义一个名叫clean的文件&#xff0c;再执行make clean时&#xff0c;将不会执行rm命令。 为了避免出现这个问题&#xff0c;需要.PHONY: clean所谓伪目标就是这样一个目标&#xff0c;它不代表一个真正的文件名&…

jq父级绑定事件的意义_jq——事件

$(document),$(body)加载事件&#xff1a;$(document).ready(fn)$(document).ready(function(){ alert("这是加载事件"); });简写&#xff1a;$(function(){});工作中简写比较多js:window.οnlοadfn 把页面上的DOM和资源加载完成之后执行jq:$(document).ready(fn)…

美妆彩妆宣传PPT模板

还有四天就是三八妇女节了&#xff0c;相信有不少从事美妆美容行业的工作者也要开始对产品的一个宣传简介了&#xff0c;对外进行一番交流配上一份优秀的PPT模板是再好不过的了。今天办公资源要和大家分享的PPT模板是可用于美妆美容美发行业的工作策划&#xff0c;总结汇报等。…

报表性能优化方案之报表服务器优化基础讲解

内存 JVM堆栈内存是决定应用服务器性能的关键指标&#xff0c;一般服务器默认的内存配置都比较小&#xff0c;在较大型的应用项目中&#xff0c;这点内存是不够的&#xff0c;因此需要进行查看与修改Web服务器内存大小&#xff0c;接下来就介绍服务器内存查看的方法以及不同服务…

windows下git bash乱码问题

网上有很多相关资料&#xff0c;备份一下&#xff1a; 1,/etc/gitconfig&#xff1a;[gui] encoding utf-8 #代码库统一用urf-8,在git gui中可以正常显示中文[i18n] commitencoding GB2312 #log编码&#xff0c;window下默认gb2312,声明后发到服务器才不会乱码[svn] …

python tcp server分包_如何创建线程池来监听tcpserver包python

我试图创建线程池来同时对传入的tcp包执行一些操作。在我在python3中找不到任何内置线程池。我也读了一些关于multiprocessing.Pool的文章&#xff0c;但是它不支持内存共享。所以我使用Queue来模拟线程池。在为每个线程创建一个队列是否更好&#xff1f;有没有人有建议或更好的…

R语言 股价分析

首先判断股价的分布是不是正态分布: #获取3m公司收盘价 mmmdata read.csv("E:\\kuaipan\\A Introduction to Analysis of Financial Data with R\\chapter 1\\ch1data\\d-mmm-0111.txt",header T) mmmprice as.numeric(sapply(mmmdata, function(l){substring(l,1…

JavaのFile类基础操作之问题

在上一章节&#xff0c;介绍了File类的基础操作&#xff0c;比如文件的创建&#xff0c;文件的删除等等。这一章节&#xff0c;将介绍在File类基础操作中遇到的问题。 1.路径分割符问题 在实际的软件开发与运行过程中&#xff0c;往往都会在Windows环境下进行项目的开发&#x…

把时间当作朋友(第一版)笔记

平生第一次下载并阅读了电子版的关于学习类型的书籍&#xff0c;并且用软件&#xff08;MindManager)记录了读书摘要&#xff08;其实最多能叫摘录&#xff09;&#xff0c;不过也不妨碍我发篇随笔记录下。 平常&#xff0c;我更喜欢读纸质的书籍&#xff0c;用日志本记录笔记&…

python中执行linux命令(调用linux命令)_Python调用Linux bash命令

import subprocess as sup # 以下注释很多(为了自己以后不忘), 如果只是想在python中执行Linux命令, 看前5行就够了# 3.5版本之后官方推荐使用sup.run()sup.run("ls -l", shellTrue) # 如果参数args是字符串, shell要设置为Truesup.run(("ls", "-l&…

IOS中CoreLocation框架地理定位

1.CoreLocation框架使用前提&#xff1a; #import <CoreLocation/CoreLocation.h> CoreLocation框架中所有数据类型的前缀都是CL &#xff0c;CoreLocation中使用CLLocationManager对象来做用户定位 2.CLLocationManager的常用操作&#xff1a; 开始用户定位 - (void)sta…

Your First Concordion.Net Project (Part 5)-Running Specs with Gallio

http://living-in-concordion.blogspot.com/2009/05/your-first-concordionnet-project-part-5.html 需要一些自动运行Spec的Runner&#xff0c;这里采用的为Gallio写的一个插件。 Gallio是一个开源的测试框架&#xff0c;能够运行各种.net的测试框架&#xff0c;具有较高的扩展…

Vue学习的路径

接下来我将正式学习Vue,根据Vue作者所给的学习路径进行学习。每天做好学习笔记。​ vue学习路径和建议----尤雨溪 ​ vue官网

ssh mysql环境搭建 myeclipse_MyEclipse整合ssh三大框架环境搭载用户注册源码下载

前言SSH不是一个框架&#xff0c;而是多个框架(strutsspringhibernate)的集成&#xff0c;是目前较流行的一种Web应用程序开源集成框架&#xff0c;用于构建灵活、易于扩展的多层Web应用程序。集成SSH框架的系统从职责上分为四层&#xff1a;表示层、业务逻辑层、数据持久层和域…

IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法

在IIS7.5打开网页的时候&#xff0c;提示&#xff1a; HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败&#xff0c;在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll,经过排除发现原来是两个斜杠导致在IIS7.5打开网页的时…

Android学习笔记之progressBar(进度条)

一、说明 <1>在某项延续性工作的进展过程中为了不让用户觉得程序死掉了&#xff0c;需要有个活动的进度条&#xff0c;表示此过程正在进行中。 <2>在某些操作的进度中的可视指示器&#xff0c;为用户呈现操作的进度&#xff0c;还它有一个次要的进度条&#xff0c;…

在hadoop上运行python_hadoop上运行python程序

数据来源&#xff1a;http://www.nber.org/patents/acite75_99.zip首先上传测试数据到hdfs&#xff1a;[rootlocalhost:/usr/local/hadoop/hadoop-0.19.2]#bin/hadoopfs -ls /user/root/test-inFound 5 items-rw-r--r-- 1root supergroup101 2010-10-24 14:39 /user/root/test-…

leetcode 237: Delete Node in a Linked List

题目&#xff1a; Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become…

一次奇怪的AP注册异常问题处理

很久没遇到值得分享的经验&#xff0c;今天遇到一个问题&#xff0c;处理过程很有意思&#xff0c;和大家一起分享一下。有一个客户部署华三的一套无线&#xff0c;采用控制器瘦AP的方式。部署过程都是轻车熟路&#xff0c;配置全部完成&#xff0c;静等AP上线&#xff0c;这时…

今天是第一次开博客,for--futurechild!!!

今天刚刚开了一个博客&#xff0c;或许觉得每一个比较牛叉的人都会经历一个不平凡的过程。通往高手之路是一个及其不平凡的路途。学校教育不能培养出真正高手。学习的最高境界是---悟。自己一步一个脚印最终能到达高手的殿堂。当然&#xff0c;我也希望能记录下自己的这个过程。…

memcache php mysql_PHP中的数据库二、memcache

在一个高并发的web应用中&#xff0c;数据库存取瓶颈一直是个大问题&#xff0c;一旦达到某个极限&#xff0c;数据库很容易崩溃&#xff0c;但是如果我们把常用的数据放到内存中&#xff0c;在需要的时候从内存中取&#xff0c;不光读取速度快&#xff0c;而且节约数据库IO。m…