专栏首页CDA数据分析师一张图看懂世界石油分布?用Python轻松搞定!

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

CDA数据分析师 出品

【导语】:今天我们教你用Python画出世界石油分布桑基图,Python技术部分可以直接看第四部分。

作者:Mika

数据:真达

后期:泽龙 设计:一凡

Show me data,用数据说话

今天我们聊聊 世界石油分布桑基图

点击下方视频,先睹为快:

https://v.qq.com/x/page/m0942ikcfdw.html

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

桑基图的用例

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

汽车的能量消耗

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

图源: Prof. Mario Schmidt, INEC, Pforzheim University

国家的能源平衡

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

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

图源:Chong, C.; Ni, W.; Ma, L.; Liu, P.; Li, Z. The Use of Energy in Malaysia: Tracing Energy Flows from Primary Source to End Use. Energies 2015, 8, 2828-2866.

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

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

图源:www.behance.net

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'] = x
    dic_['target'] = y 
    dic_['value'] = z 
    links.append(dic_) 

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

官网链接:https://pyecharts.org

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文件后,直接通过浏览器打开即可,就可以看到能交互的桑基图了,生成的图形如下:

以上这就是成品啦,是不是效果十分惊艳呢!快来自己试试吧!

参考资料:

What is a Sankey diagram?

https://www.ifu.com/en/e-sankey/sankey-diagram/

Wikipedia :Matthew Henry Phineas Riall Sankey

https://en.wikipedia.org/wiki/Matthew_Henry_Phineas_Riall_Sankey

Wikipedia : Sankey diagram

https://en.wikipedia.org/wiki/Sankey_diagram

油价暴跌对我们意味着什么?

https://mp.weixin.qq.com/s/8bTdVlrzdeln_0H2rTTpOg

本文分享自微信公众号 - CDA数据分析师(cdacdacda),作者:爱用Python的C君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 媲美Pandas?Python的Datatable包怎么用?

    【导读】工具包 datatable 的功能特征与 Pandas 非常类似,但更侧重于速度以及对大数据的支持。此外,datatable 还致力于实现更好的用户体验...

    CDA数据分析师
  • 埃博拉与大数据——正在流失的机会

    在抗击埃博拉病毒的过程中,手机所能体现的价值是不可估量的,不仅仅因为手机本身作为通信工具可以用来向公众发布健康信息或用来求救,手机所产生的数据也很有价值。移动运...

    CDA数据分析师
  • 数据可视化:如何为数据寻找适合的配色

    本期责编:Sophie 文 | Samantha Zhang 来源 | GRAPHIQ 摘要:虽然如今好的配色方案已经唾手可得,但为数据可视化找到合适的配色方案...

    CDA数据分析师
  • 一个简单的通过浏览器共享命令行的工具ttyd

    今天调研的时候看到了ttyd工具,一个可以简单的通过浏览器共享命令行工具,只需要在命令行运行一个命令,就可以通过浏览器来直接访问终端了。下面就看看怎么使用吧。

    kongxx
  • 苹果传出放弃研发自动驾驶,因iPhone销量不佳收紧支出

    据国外媒体报道,Lynx公司的两位股票策略分析师最近对外透露,他们收到消息称,苹果可能会放弃自动驾驶汽车的研发计划。

    量子位
  • JMeter5性能测试

    上面的测试,每次发送的URL请求都是同一个,可能因为缓存等原因导致性能数据偏差。 可以使用读取CSV文件的方式,对每个请求构造不同的请求。

    十毛
  • uni-app 结合云函数开发小程序博客(二):云函数实现登录注册

    不好意思大家,个人原因拖了一周时间才发表第二篇,没想到还有朋友在支持,非常感谢和抱歉。第一篇中已经引入了第三方样式,实现了主题和语言的切换;本篇主要开始页面的搭...

    一只图雀
  • 两列布局——但只用右浮动

    xing.org1^
  • 高并发之Nginx的限流 顶

    upstream web_app { server 到达Ip1:端口 max_conns=10; server ...

    算法之名
  • 算法基础

    分治法的基本思想: 将一个规模为 n 的问题分解为 k 各规模较小的子问题, 这些子问题互相独立且与原问题是同类型问题。 递归地解这些子问题, 然后把各个子问题...

    yawn

扫码关注云+社区

领取腾讯云代金券