当前位置: 首页 > 后端技术 > Python

你能通过一张图了解世界石油分布吗?Python爬虫好办!

时间:2023-03-26 13:00:20 Python

CDA数据分析师2020年3月出品,注定载入史册。一方面,新冠肺炎疫情在全球范围内快速蔓延,另一方面,控制全球40%以上油气产量的巨头们撕破脸皮。面对在OPEC+会议上坚持不减产的俄罗斯,沙特决定增加石油产能抢占市场,石油价格战毫无征兆地打响。国际原油价格大幅波动。3月9日黑色星期一,世界油价暴跌,跌幅超过30%。那么,作为现代工业最重要的命脉,世界石油产量分布情况如何?谁才是石油界真正的王者?中国的石油储备水平如何?今天我们就教大家用一张图了解世界石油的分布情况。01桑基图,展示数据流向的利器这里我们使用桑基图。可能你没看过这张图,这是一张比较小的图表。我们可以看到桑基图主要由边、流和支点组成,其中边代表流动的数据,流代表流数据的具体值,节点代表不同的类别。边的宽度显示与流量成比例,边越宽,值越高。 02桑基图的发展最早的桑基图最著名的桑基图是CharlesMinard绘制的1812年拿破仑征俄地图。这张战役图在地图上叠加了桑基图,是流程图和地图相结合的图。桑基图粉红色部分描绘了拿破仑在欧洲军队人数的动向和变化,显示1812年6月,拿破仑率领42万人入侵俄国。然而,随着战事的深入,军队的人数一路减少,大败而退时,只剩下一万人。这个最早的桑基图创建于1869年,但直到29年后一位爱尔兰船长的出现才被称为桑基图。命名桑基图1898年,爱尔兰船长MatthewHenryPhineasRiallSankey使用这种图来演示蒸汽的能源效率。同时,这张图也以船长的名字命名为“桑基图”。当时,这张黑白图只显示了一种流动(例如蒸汽);使用不同的颜色可以代表不同类型的流量,从而表达多个变量。随着时间的推移,桑基图逐渐成为科学和工程中用来表示热平衡、能量流和物质流的标准模型。与普通的流程图或条形图相比,桑基图体现了清晰、美观的数据流,因此桑基图在能源管理、设施管理、过程工程和过程控制等数据可视化中越来越受欢迎。03桑基图用例桑基图最大的特点之一就是无论数据如何流动,桑基图的总值保持不变,秉承了数据的“能量守恒”。汽车的能源消耗在这张桑基图中,您可以看到汽车的能量平衡。除了车轮运转所消耗的能量外,还有很大一部分能量以热量的形式流失了。此外,还有水泵、转向助力等额外的能源消耗。图中的流量可以通过颜色来区分,其宽度与所代表的流量成正比。一个国家的能源平衡一个地区或一个国家的能源平衡常用桑基图来绘制能量流向图。由此可以清楚地看出能源和能源的不同用途。这张图是马来西亚2011年的能源平衡表。图中的流量代表“百万吨油当量”(Mtoe)。法国公共关系行政部门的资金来源法国公共行政部门用桑基图来梳理他们的收支资金来源和分配方式。最左边的支点代表不同的资金来源,包括社会、个人税收等。这些资金汇集到法国的四大公共行政部门后,再分配到交通、环保、住房、教育、生活等各个领域。文化。04教你用Python轻松画出世界石油分布图。可以看出,桑基图在表示数据流向方面非常清晰美观。早些时候,我们展示了世界石油产量前30名国家分布的桑基地图。接下来教大家使用pyecharts来实现。如果你还没有安装pyecharts,可以在终端使用如下代码安装pip。pipinstallpyecharts首先需要导入我们需要使用的包,其中pandas用于数据组织,pyecharts用于绘图。importpandasaspdfrompyecharts.chartsimportSankeyfrompyechartsimportoptionsasopts然后用pandas读入数据。所用数据来自BP世界能源统计年鉴-2019年版。排序后的数据以数据框的形式存储,其中state代表国家名称,continent代表大陆名称,num代表石油产量(百万吨)df1=pd.read_excel('Oilproductionranking.xlsx')df1.head()在pyecharts中通过Sankey方法实现Sankey图。它接受两个外部输入。一个是所有类别的集合——节点,另一个是子类别、父类别和数据——链接的三方集合。也就是说,首先需要将数据转换成Sankey可以接受的形式。下面是官网例子的数据格式:下面我们写一个简单的循环语句,将数据转换成节点和链接的形式:#generatenodesnodes=[]foriinset(pd.concat([df1.state,df1.continent])):dic_={}dic_['name']=inodes.append(dic_)#生成链接links=[]forx,y,zinzip(df1.state,df1.continent,df1.num):dic_={}dic_['source']=xdic_['target']=ydic_['value']=z链接。append(dic_)准备好节点和链接后,就可以调用Sankey函数进行绘制了。可以通过配置项otps设置图表的颜色、标签、标题等信息。具体可以查看官网,这里就不赘述了。颜色=['#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文件后,直接通过浏览器打开,即可看到交互式Sankey图。效果是不是很惊人?快来亲身体验吧!获取更多优质内容,可以前往:当前疫情有所缓和,也是提升自我,为未来积蓄能量的好时机——蓄势待发!