CDA数据分析师 出品

2020年的3月注定将载入史册。一边是新冠肺炎疫情在全世界快速扩散,另一边是掌控着世界40%以上油气产量的巨头们撕破脸皮。

面对在OPEC+会议中坚持不再减产的俄罗斯,沙特阿拉伯决意提升石油产能抢占市场,石油价格战毫无征兆地开打。国际原油价格出现大幅波动。3月9日,黑色星期一,世界油价剧烈杀跌,跌幅超过30%。

那么作为现代工业里最重要的命脉,

世界石油产量分布究竟如何?

谁才是石油界的真正王者呢?

中国的石油储量什么水平?

今天我们就教你

用一张图看懂世界石油分布。

01

展现数据流动的利器
桑基图

这里我们用到的是桑基图(Sankey diagram)。

也许你没见过这张图,这算是一个比较小众的图表。

我们可以看到桑基图主要由边、流量和支点组成,其中边代表了流动的数据,流量代表了流动数据的具体数值,节点代表了不同分类。边的宽度与流量成比例地显示,边越宽,数值越大。

02

桑基图的发展
最早的桑基图

最著名的桑基图是查尔斯·米纳德(Charles Minard)绘制的1812年拿破仑俄国战役地图。这张战役地图将一张桑基图叠加到一张地图上,是一张流程图与地图结合的图表。

桑基图中的粉色部分描绘了拿破仑军队在欧洲的移动和数量变化情况,显示了在1812年6月,拿破仑带领了42万人入侵俄罗斯。然而随着战争不断深入,军队人数一路减少,到了战败撤退时,只剩下1万人。这张最早的桑基图创建于1869年,但它那时候还不叫桑基图,直到29年后一位爱尔兰船长的出现。

桑基图的命名

1898年,爱尔兰船长马修·亨利·菲尼亚斯·里亚尔·桑基(Matthew Henry Phineas Riall Sankey)使用了这种类型的图表展示了蒸汽的能源效率。与此同时,这个图也以船长的名字命名为“桑基图”。

当时在这张黑白图表只显示了一种类型的流动(如蒸汽); 使用不同颜色能表示不同类型的流动,从而表达出多种变量。

随着时间的推移,桑基图逐渐成为科学和工程中用来表示热平衡、能量流、物质流动的标准模型。

比起普通的流程图或条形图,桑基图体现的数据流动清晰且美观,因此在能源管理、设施管理、过程工程和过程控制等数据可视化方面,桑基图也越来越受欢迎。

03

桑基图的用例

桑基图一个最大的特点就是,无论数据怎么流动,桑基图的总数值保持不变,坚持数据的“能量守恒”。

汽车的能量消耗

在这个桑基图中,你可以看到汽车的能量平衡。除了车轮行驶所消耗的能量之外,还有很大一部分能量损失了,尤其是热量损失。此外,还有水泵、转向支持等定额外的能源消耗。图表中的流量可以用颜色来区分,它们的宽度与所代表的流量成比例。

国家的能源平衡

在地区或国家的能源平衡经常使用桑基图绘制能源流程图。从而可以清晰的看出能源和能源来源的不同用途。

这张图是2011年马来西亚的能源平衡。图中流动表示的是“百万吨石油当量”(Mtoe)。

法国公关管理部门资金来源

法国公共管理部门就曾用一张桑基图理清了他们的收支资金来源,以及他们是如何分配这些资金的。最左边的支点代表了不同的资金来源,包括社会、个人税收等。这些资金在汇总到法国的四大公共管理部门后,被再分配到交通、环境保护、住房、教育、文化等各个领域。

04

教你用Python
轻松绘制世界石油分布图

可见在表示数据流动方面,桑基图十分清晰而且美观。前面我们展示了一张世界石油产量前30国家分布桑基图,下面我们教你就用pyecharts来实现它。

如果你没有安装pyecharts,可以使用以下代码在终端进行pip安装。

pip install pyecharts

首先需要导入我们需要使用的包,其中pandas用于数据整理,pyecharts用于绘图。

import pandas as pd
from pyecharts.charts import Sankey
from pyecharts import options as opts

然后使用pandas读入数据,所使用数据来自于BP世界能源统计年鉴-2019版,整理之后的数据使用数据框的形式进行存储,其中state表示国家名称,continent表示大洲名,num表示石油产量(单位百万吨)

df1 = pd.read_excel('石油产量排名.xlsx')
df1.head()

桑基图在pyecharts中通过Sankey方法实现,它接受两个外部输入。一个是所有类别的集合-nodes,一个是子类、父类、数据的三方集合-links。也就是说,首先你要把数据转换成Sankey可以接受的形式,下面这个是官网的示例的数据格式:

下面我们写个简单的循环语句,将数据转换成nodes和links形式:

# 产生节点
nodes = []for i in set(pd.concat([df1.state, df1.continent])):dic_ = {}dic_['name'] = i nodes.append(dic_) # 产生链接
links = []for x, y, z in zip(df1.state, df1.continent, df1.num):dic_ = {}dic_['source'] = xdic_['target'] = y dic_['value'] = z links.append(dic_)

准备好nodes和links后,就可以调用Sankey函数进行绘图,你可以通过配置项otps来设置图表的颜色、标签、标题等信息,具体细节可以去官网查询,这里不做赘述。

colors = ['#54B4F9', '#F29150', '#FF7BAE', '#D69AC0', '#485CE0', '#28BE7A'] s = Sankey(init_opts=opts.InitOpts(width='1350px', height='1350px'))
s.set_colors(colors)
s.add('sankey', nodes, links, pos_left='10%',pos_right='60%',linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color='source'), itemstyle_opts=opts.ItemStyleOpts(border_width=1, border_color="#aaa"),tooltip_opts=opts.TooltipOpts(trigger_on="mousemove"),is_draggable=True,label_opts=opts.LabelOpts(position="left", font_family='Arial', margin=10,font_size=13, font_style='italic')) s.set_global_opts(title_opts=opts.TitleOpts(title='世界石油产量top30国家分布'))
s.render()

生成html文件后,直接通过浏览器打开即可,就可以看到能交互的桑基图了,是不是效果十分惊艳呢?快来自己试试吧!

通过一张图就能看懂世界石油分布?Python爬虫轻松搞定!相关推荐

  1. 一张图看懂世界石油分布?用Python轻松搞定!(附数据下载)

     CDA数据分析师 出品   [导语]:今天我们教你用Python画出世界石油分布桑基图,Python技术部分可以直接看第四部分. 获取数据: 扫描下方公众号 回复关键字"石油" ...

  2. 一张图看懂世界石油分布?用Python轻松搞定!

     CDA数据分析师 出品   [导语]:今天我们教你用Python画出世界石油分布桑基图,Python技术部分可以直接看第四部分. 作者:Mika 数据:真达   后期:泽龙  设计:一凡   Sho ...

  3. 场效应与三极管 电路标识符_看懂这6个提示,轻松搞定恒流源电源电路设计!...

    基本的恒流源电路主要是由输入级和输出级构成,输入级提供参考电流,输出级输出需要的恒定电流. 恒流源电路就是要能够提供一个稳定的电流以保证其它电路稳定工作的基础.即要求恒流源电路输出恒定电流,因此作为输 ...

  4. 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率

    一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率 几天前发布的 iPhone 6 Plus 官方标称屏幕是 1920 x 1080 的,但是在 Xcode 中我们发现模拟器的屏幕其实是看似奇怪 ...

  5. 7张图让你看懂互联网营销思维与传统思维本质区别

    7张图让你看懂互联网营销思维与传统思维本质区别 有一些人这样说过,如果在一年前谈论"互联网思维"就会显得有一点点装逼,但是如果到了一年之后的今天,再谈论的话,就会显得有一点点落伍. ...

  6. 一张图让你看懂HDMI针脚定义

    一张图让你看懂HDMI针脚定义 摘自:http://www.hdmiaoc.com/cjwt-175.html 什么是HDMI线,HDMI插头的每根PIN脚是什么意思? 大部分使用HDMI标准的研发及 ...

  7. 一分钟,六张图让您看懂Linux系统对程序员的重要性。

    文章目录 1.Linux与Windows职位数之比2.6:1 2.C/C++程序员Linux与Windows职位数之比3.5:1 3.88.2%的WEB系统部署在Linux系统下 4.数据解读 5.获 ...

  8. webassembly类型_几张图让你看懂WebAssembly

    (图片来源:giphy.com) 编者按:本文由明非在众成翻译平台上翻译. 最近,WebAssembly 在 JavaScript 圈非常的火!人们都在谈论它多么多么快,怎样怎样改变 Web 开发领域 ...

  9. 我的世界java版袭击图片_我的世界:你mc“中毒”有多深?这8张图都能看懂,绝对是真爱粉...

    MC玩家特别喜欢用各种趣图来展示MC的内容,每当有人发出一张有趣图片的时候,必定会得到一大堆玩家的响应.MC趣图除了给我们带来快乐之外,还引发我们的深思,从游戏到生活,MC一个不落.这可能就是mc的魅 ...

最新文章

  1. COS 访谈第 19 期:张志华教授
  2. 聊聊resilience4j的CircuitBreakerStateMachine
  3. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
  4. 延长EEPROM使用寿命的程序优化方法
  5. Redis学习日记-05:SORT命令
  6. 初等数论及其应用——中国剩余定理
  7. android imageview 上蒙版,在iOS中为UIImageView的圆形蒙版设置动画
  8. css相关笔记(一)
  9. 前后端数据交互(八)——请求方法 GET 和 POST 区别
  10. python双击py一闪_python双击py一闪 python编程
  11. 申请https证书相关说明
  12. eset找不到服务器更新失败,ESET NOD32连接到服务器以更新常见的错误检测方法
  13. 开始写博客~~~~~
  14. 服务器本地视频怎么网站播放视频教程,远程服务器的视频怎么在本地播放
  15. springcloudconfig使用教程
  16. springboot志愿者活动报名服务系统jsp ssm maven
  17. sfsdfsdffsdf
  18. apt apt-get_Windows用户准备好进行apt-get吗?
  19. kong笔记——认识kong
  20. ubuntu系统使用quilt命令自定义配置制作补丁包解析

热门文章

  1. 如何退出root权限
  2. 独立按键和矩阵按键c语言,第八章 独立按键和矩阵按键
  3. [Swift]封装一个网络工具Moya+HandyJSON
  4. 【Java核心技术卷】静态语言和动态语言对比
  5. xubuntu 搭建基于 gitolite 的 git 服务器
  6. 【知识强化】第一章 绪论 1.1数据结构的基本概念
  7. LISP 圆孔标记_AUTOLISP编程实现正交开孔圆管展开图快速绘制
  8. 解决中国教育考试网中小学教师资格考试报名系统的页面显示问题
  9. js中 json对象的转化 JSON.parse()
  10. WPF WinAPI 编程详解(四 实例 )