由 CDA 数据分析师制作
2020 年 3 月注定要载入史册。一方面,新冠肺炎疫情在全球范围内迅速蔓延,另一方面,控制着全球40%以上油气产量的巨头们纷纷撕破脸。
球王会面对在欧佩克+会议上坚持不减产的俄罗斯,沙特决定提高石油产能抢占市场,石油价格战毫无预兆地打响。国际原油价格大幅波动。 3月9日黑色星期一中国石油分布图,世界油价暴跌逾30%。
那么,作为现代工业最重要的命脉,
世界石油产量分布如何?
球王会谁才是真正的石油之王?
中国的石油储量是多少?
今天教你
球王会通过地图了解全球石油分布情况。
01 桑基图,展示数据流向的强大工具
球王会这里我们使用的是桑基图。
可能你没看过这张图,是一张比较小众的图表。
我们可以看到,桑基图主要由边、流和支点组成。边代表流动的数据中国石油分布图,流动代表流动数据的具体值,节点代表不同的类别。边的宽度与流量成正比显示,边越宽数值越高。
02 桑基图的最早发展
最著名的桑基图是查尔斯·米纳德 1812 年绘制的拿破仑俄国战役地图。此活动地图将桑基图叠加到地图上,将流程图与地图相结合。
桑基图粉红色部分描绘了拿破仑军队在欧洲的动向和人数,显示1812年6月,拿破仑率领42万人入侵俄罗斯。但随着战事不断深入,部队人数一路减少,战败撤退时,只剩下一万人。最早的桑基图创建于 1869 年,但直到 29 年后,一位爱尔兰船长出现,才被称为桑基图。
桑基图的命名
1898 年,爱尔兰船长 Matthew Henry Phineas Riall Sankey 使用这种图表来展示蒸汽的能源效率。同时,这张图也以船长的名字命名为“桑基图”。
当时这张黑白图表只显示了一种流动(例如蒸汽);使用不同的颜色可以代表不同类型的流,从而表达多种变量。
随着时间的推移,桑基图已成为科学和工程中用来表示热平衡、能量流和物质流的标准模型。
与普通流程图或条形图相比,桑基图反映了清晰美观的数据流向,因此桑基图越来越多地用于能源管理、设施管理、过程工程和过程控制等数据可视化。很受欢迎。
03 桑基图的用例
桑基图的最大特点之一是,无论数据如何流动,桑基图的总值都保持不变中国石油分布图,秉承了数据的“能量守恒”。
汽车能耗
在这张桑基图中,您可以看到汽车的能量平衡。除了车轮行驶所消耗的能量外,还有很大一部分能量损失了,尤其是热量损失。此外,水泵、转向支架等还有额外的能源消耗。图表中的流量可以通过颜色来区分,它们的宽度与它们所代表的流量成正比。
国家的能源平衡
在区域或国家能源平衡表中,通常使用桑基图绘制能源流程图。这样可以清楚地看到能源和能源的不同用途。
此图表是马来西亚 2011 年的能源平衡。图表中的流量代表“百万吨石油当量”(Mtoe)。
法国公关局的资金来源
法国公共行政部门使用桑基图来阐明其收入和支出资金的来源以及它们的分配方式。最左边的支点代表不同的资金来源,包括社会税、个人税等。这些资金汇集到法国四大公共行政部门后,重新分配到交通、环保、住房、教育等各个领域和文化。
04 教你用Python轻松绘制世界石油分布图
可以看出,桑基图在表示数据流向方面非常清晰漂亮。早些时候,我们展示了世界石油产量前 30 位国家分布的桑基图。下面我们就教大家使用pyecharts来实现。
如果你没有安装pyecharts,可以在终端使用如下代码pip安装。
pip 安装 pyecharts
首先我们需要导入我们需要使用的包,其中pandas用于数据排序,pyecharts用于绘图。
import pandas as pd from pyecharts.charts import Sankeyfrom pyecharts import options as opts
然后使用 pandas 读入数据。使用的数据来自 BP 世界能源统计年鉴-2019 版。排序后的数据以数据框的形式存储,其中state代表国家名称,continent代表大陆名称,num代表石油产量(单位:百万吨)
df1 = pd.read_excel('石油产量排名.xlsx')df1.head()
在pyecharts中通过Sankey方法实现Sankey图,该方法接受两个外部输入。一个是所有类别节点的集合,另一个是子类、父类和数据链接的三方集合。也就是说中国石油分布图,首先需要将数据转换成Sankey可以接受的形式。以下是官网示例的数据格式:
让我们编写一个简单的循环语句将数据转换为节点和链接:
# 产生节点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_)
准备好节点和链接后,就可以调用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文件后,可以直接通过浏览器打开,可以看到交互式的桑基图。效果是不是很惊艳?快来自己试试吧!
球王会