Py学习  »  Python

Python画境外新冠病例输入桑基图

小蚊子数据分析 • 3 年前 • 1397 次点击  

在国内疫情已经得到了控制并逐渐减少,但是国外的疫情出现大爆发,境外输入的情况也愈加严峻。鉴于新冠肺炎疫情在全球范围快速蔓延,我国自2020年3月28日0时起,暂时停止外国人持目前有效来华签证和居留许可入境。

那目前境外输入病历到到底有多少?都输入了哪些省份呢?相关的数据中,既包含了来源国、输入地,又有各地区输入病例详细数值,不用表格、不用多个柱状图折线图并列,应该如何表达这组数据呢?

这张图既能看到所有来源国和输入地,还能看出每一个数据流动的起点和终点,这就是桑基图,展现数据流动的小能手。

桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它主要由节点、边和流量三要素构成。


图中延伸的分支的宽度对应数据流量的大小,边越宽代表流量越大。因1898年Matthew Henry Phineas Riall Sankey绘制的"蒸汽机的能源效率图"而闻名,此后便以其名字命名为"桑基图"。

桑基图属于流程图的一种,核心在于展示数据的流转。大家是不是想到漏斗图?漏斗图是有转化流失,而桑基图只是流转,无论怎么流动,开端和末端数据总是一致的,这是他们之间的区别。

我们继续使用pyecharts进行绘制,本文使用v1.x版本进行绘制,如还没安装pyecharts,请先安装。

先导入需要的包跟数据

1import pandas
2from pyecharts.charts import Sankey
3from pyecharts import options as opts
4
5data = pandas.read_excel('D:/python/yq/ly.xlsx',sheet_name='1')

打开data数据框可以查看到数据是这样的

注:数据来源:国家卫健委,北京卫健委,上海卫健委,甘肃卫健委等,截至2020年4月1日,因来源地、输入地众多,所以只取来源地、输入地Top10的地区数据。


长按识别下方二维码,并关注公众号
回复“
SR”获取案例数据


桑基图在pyecharts中通过Sankey方法实现,要求绘制桑基图的数据是这样的,字典格式。

它接受两个数据输入,一个是所有类别的集合-nodes,一个是子类、父类、数据的三方集合-links。

So,先要做下数据转换处理,先处理节点数据nodes

nodes = []
for i in set(pandas.concat([data.来源地, data.输入地])):
    d1 = {}
    d1['name'] = i
    nodes.append(d1)

然后再处理边和流量数据links

links = []
for x, y, z in zip(data.来源地, data.输入地, data.数量):
    d2 = {}
    d2['source'] = x
    d2['target'] = y
    d2['value'] = z
    links.append(d2)

最后就可以画图了

 1pic = (
2    #创角桑基图对象,设置画布大小
3    Sankey(init_opts=opts.InitOpts(width="1600px", height="800px"))
4    .add('确诊病例'#图例名称
5         nodes,    #节点数据
6         links,   #边和流量数据
7         #设置透明度、弯曲度、颜色
8         linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = "source"),
9         label_opts=opts.LabelOpts(position="right"), #标签显示位置        
10         node_gap = 10 #节点之前的距离
11    )
12    .set_global_opts(title_opts=opts.TitleOpts(title = 'TOP10境外输入统计'))
13)
14
15pic.render('TOP10境外输入统计.html')

最后就得到了这张图

从图中可以发现几个有趣的地方:

伊朗、沙特病例主要流向甘肃;

西班牙大部分病例主要流向北京;

英国大部分病例主要流向北京、上海、广东;

菲律宾国大部分病例主要流向广东、福建;


--------------------------------
如果你喜欢本文,可以点击右下角在看
如果你在跟着学习,请在留言区留言:打卡如果你刚看到本文,可以查看本系列历史文章跟着学习:
8行Python代码轻松绘制新冠疫情地图
动态新冠疫情地图Python轻松画
Python绘制16省支援湖北地图
湖北动态新冠疫情地图Python轻松画
Python抓取实时数据绘制地图
世界动态疫情地图Python轻松画
Python抓取网易实时疫情数据
Python画火爆全网的央视图表
13行Python代码画美国疫情地图
-----------------

希望系统、快速学习Python数据分析知识,可以学习

数据分析专家@文彤老师

跟文彤老师学Python数据分析》系列视频课程

包含以下三门课程

Python数据分析--玩转Pandas

玩转Python统计分析

Python数据分析--玩转数据可视化

如有问题也可添加课程助理微信号咨询,添加时请注明咨询课程

参加课程学习,可享受6折优惠

购买课程直接点击文末“阅读原文”进入即可

 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/57357
 
1397 次点击