python数据分析-CO2排放分析

news2024/11/15 15:55:43

导入所需要的package

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
import datetime
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号

数据清洗和读取数据

df = pd.read_csv("energy.csv")
df.shape
###展示数据前6行
df.head(6)

# 删除特定的列   在数据中体现为 Unnamed: 0
df = df.drop(['Unnamed: 0'], axis=1)
df.head(6)

###重新命名列名称 即简化名称
 

df.rename(columns={'Energy_type' : 'e_type', 'Energy_consumption' : 'e_con', 'Energy_production' : 'e_prod'
             , 'Energy_intensity_per_capita' : 'ei_capita', 'Energy_intensity_by_GDP' : 'ei_gdp'}, inplace=True)

df['e_type'] = df['e_type'].astype('category')

df['e_type'] = df['e_type'].cat.rename_categories({'all_energy_types': 'all', 'natural_gas': 'nat_gas','petroleum_n_other_liquids': 'pet/oth',
                                    'renewables_n_other': 'ren/oth'})

df['e_type'] = df['e_type'].astype('object')

df.info()

###对所以特征进行统计性描述
 

df.describe(include='all')

##得出每一种变量的总数

for var in df:
    print(f'{var}: {df[var].nunique()}')

###缺失值的处理
#先查看缺失值
for var in df:
    print(f'{var}: {df[var].isnull().sum()}')

从上面可以看到有的特征变量有很多缺失值

 由于大多数国家不消费或生产核能,因此缺少e_con和e_prod的许多价值,因此他们将其保留为Nan。我将添加 0 来代替这些

nuclear = df[df['e_type']=='nuclear']
    

temp_ecp = df[df['e_type']!='nuclear']

# Replacing all Nan values of e_con and e_prod of e_type nuclear to 0
nuclear[['e_con', 'e_prod']] = nuclear[['e_con', 'e_prod']].replace(np.nan, 0)

# Joining them back up
df = pd.concat([nuclear, temp_ecp]).sort_index()

处理完之后再看,没有缺失值了 

 现在可以开始查看数据了,可视化

 

从上图可以看出分布高度右偏。

接下来查看能源类型分布 

###画出其环形图 看其分布和占比情况
percent = temp_dist['CO2_emission']
labels= temp_dist['e_type']

my_pie,_,_ = plt.pie(percent, radius = 2.2, labels=labels, autopct="%.1f%%")
plt.setp(my_pie, width=0.6, edgecolor='white') 
plt.show()

 

从上图可以看出,所有能源都分布较为均匀

计算相关系数并画出其热力图

 

不同可视化分析

with plt.rc_context(rc = {'figure.dpi': 250, 'axes.labelsize': 9,
                          'xtick.labelsize': 10, 'ytick.labelsize': 10,
                          'legend.title_fontsize': 7, 'axes.titlesize': 12,
                          'axes.titlepad': 7}):

    # Data with only the 'World' values
    cd = df[df['Country']=='World']

    
    fig, ax = plt.subplots(2, 2, figsize = (10, 7), # constrained_layout = True,
                               gridspec_kw = {'width_ratios': [3, 3], 
                                                'height_ratios': [3, 3]})

    ax_flat = ax.flatten()

    
    ### 1st graph
    sns.lineplot(ax=ax_flat[0], data=cd[cd['e_type']=='all'],
                 x='Year', y='CO2_emission', lw=3).set_title('Global CO2 Emission Yearly (MMtonnes CO2)')

    
    ### 2nd graph
    sns.lineplot(ax=ax_flat[1], data=cd[cd['e_type']!='all'],
            x='Year',
            y='CO2_emission',
            hue='e_type',
            lw=3,
            ).set_title('Yearly CO2_emission for each e_type globally (MMtonnes CO2)')
    
    ax_flat[1].legend(fontsize=8, title='Energy Type', title_fontsize=9, loc='upper left', borderaxespad=0)
    ax_flat[1].tick_params(axis='x', rotation=35)
    
    
    ### 3rd graph
    sns.lineplot(ax=ax_flat[2], data=cd,
                x='e_con', y='CO2_emission', lw=2
               ).set_title('Relationship of global CO2 Emission and Energy Consumption')
    
    
    ### 4th graph
    for_dist = df[df['Country']!='World'][df['e_type']=='all']
    sns.distplot(for_dist['CO2_emission'], ax=ax_flat[3]).set_title('Density of CO2 Emission Globally')

    
    plt.tight_layout(pad = 1)
    plt.show()

 # 前 6 个国家/地区的年度二氧化碳排放量

fig, ax = plt.subplots(2, 3, figsize = (20, 10))


# Top 6 Countries
countries = temp_cd['Country'].head(6)
    
# Average CO2 Emission each year for top 6 emiters
for idx, (country, axes) in enumerate(zip(countries, ax.flatten())):
        
    cd3 = df[df['Country']==country][df['e_type']=='all']
    temp_data = cd3.groupby(['Year'])['CO2_emission'].sum().reset_index().sort_values(by='CO2_emission',ascending=False)
    plot_ = sns.barplot(ax=axes, data=temp_data, x='Year', y='CO2_emission', palette="Reds_d")
    
    # Title
    axes.set_title(country)
    
    # Reducing Density of X-ticks
    for ind, label in enumerate(plot_.get_xticklabels()):
        if ind % 4 == 0:  # every 10th label is kept
            label.set_visible(True)
        else:
            label.set_visible(False)
    
    # Rotating X axis
    for tick in axes.get_xticklabels():
        tick.set_rotation(45)
    
    
### Removing empty figures
else:
    [axes.set_visible(False) for axes in ax.flatten()[idx + 1:]]
    

    
plt.tight_layout(pad=0.4, w_pad=2, h_pad=2)
plt.show()

 # 在此期间,中国和印度的排放量增加了很多。
#从这一时期开始到结束,二氧化碳排放量增加/减少幅度最大的国家

# 然后绘图
# Countries with biggest increase in CO2 emission

Countries with biggest decrease in CO2 emission

结论

关于CO2排放量的结论

1.在此期间,二氧化碳排放量一直在增加。
2.煤炭和石油/其他液体一直是这一时期的主要能源。
3.二氧化碳排放量平均每年增长1.71%,整个时期整体增长68.14%。
4.截至2019年,当年平均二氧化碳排放量为10.98(百万吨二氧化碳)。
5.在整个时期,二氧化碳排放量最大的国家是中国和美国,这两个国家的二氧化碳排放量几乎是其他国家的4倍或更多。
6.在此期间,中国和印度的二氧化碳排放量增加是其他所有国家中最多的。
7.在此期间,前苏联加盟共和国的二氧化碳排放量下降幅度最大,英国和德国的排放量也略有下降。
8.一般来说,人口越多,该国排放的二氧化碳就越多。
9.GDP越大,该国二氧化碳排放量越大。
10.一个国家的能源消耗越大,二氧化碳排放量就越大。
11.按人均能源强度的GDP计算的高或低能源强度并不一定能预测大量的二氧化碳排放量,但一般来说,它越低越好(节约的能量越多意味着二氧化碳排放量越少)。

代码和数据

创作不易,希望大家多多点赞收藏和评论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1699218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RedHat9 | DNS剖析-建立子域并进行区域委派

一、实验环境 1、委派DNS服务器 域名空间由多个域构成,DNS提供了将域名空间划分为1个或多个区域的方法,这样使得管理更加方便。在域的规模增大后,可以为域添加附加域,上级域为父域,下级域为子域,下列案例…

00Java准备工作

目录 JDK的安装目录 JAVA环境变量的配置 JDK的安装目录 目录名称说明bin该路径下存放了JDK的各种工具命令,javac和java就放在这个目录conf该路径下存放了JDK的相关配置文件include该路径下存放了一些平台特定的头文件jmods该路径下存放了JDK的各种模块legal该路径下存放了JD…

Windows下安装配置深度学习环境

Windows下安装配置深度学习环境 1. 准备工作 1.1 环境准备 操作系统:win10 22H2 GPU:Nvidia GeForce RTX 3060 12G 1.2 安装Nvidia驱动、cuda、cuDNN 下载驱动需要注册并登录英伟达账号。我这里将下面用到的安装包放到了百度网盘,可以关注微信…

【MATLAB】信号的熵

近似熵、样本熵、模糊熵、排列熵|、功率谱熵、奇异谱熵、能量熵、包络熵 代码内容: 获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复信号的熵本公众号致力于解决找代码难,写代码怵。各位有什么急需…

JavaRedis-主从集群-分片-数据结构-回收处理-缓存问题

一、主从集群 1.主从集群 主从集群读写分离,主能读能写,从只能读,读的数据是同步主的 docker搭建: docker-compose 这里设置网络模式为model,就直接暴露在了宿主机中,就不用映射端口了 不改就是默认的桥…

Java进阶学习笔记30——BigDecimal

BigDecimal: 用于解决浮点型运算的,出现结果失真的问题。 运行结果: package cn.ensource.d4_bigdecimal;import java.math.BigDecimal;public class Test {public static void main(String[] args) {// 目标:了解BigDecimal类do…

蓝桥楼赛第30期-Python-第三天赛题 统计学习数据题解

楼赛 第30期 Python 模块大比拼 统计学习数据 介绍 JSON(JavaScript Object Notation, /ˈdʒeɪsən/)是一种轻量级的数据交换格式,最初是作为 JavaScript 的子集被发明的,但目前已独立于编程语言之外,成为了通用的…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【00】补充

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【00】补充 WindowsCMD插件IDEAVsCode MavenvagrantDocker解决MySQL连接慢问题启动(自动)Docker注意切换到root用户远程访问MySQL MyBatisPlus代码地址参考 WindowsC…

分布式专题

一:分布式事务 1、理论基础 分布式事务主要区分本地事务 什么是本地事务(Local Transaction)?本地事务也称为数据库事务或传统事务(相对于分布式事务而言)。尤其对于数据库而言,为了数据安全…

解决Jupyter运行代码显示Kernel Restarting的错误

在Jupyter notebook上运行代码时发现如下错误: 使用VS Code运行在日志表中发现错误存在: 它表明在初始化"libiomp5md.dll"库时发生问题,因为该库已经被初始化过了,这个错误可能是由于程序中重复初始化OpenMP库导致的&am…

简单多状态 dp 问题

11. 按摩师&#xff08;easy&#xff09; 解法&#xff08;动态规划&#xff09;&#xff1a; 图解&#xff1a; C 算法代码&#xff1a; class Solution { public:int massage(vector<int>& nums) {// 1. 创建⼀个 dp 表// 2. 初始化// 3. 填表// 4. 返回值int n n…

ASP+ACCESS客户管理信息系统

摘要 本文介绍了客户管理系统的实现方法。目的在于让大家共享学习和运用这一语言的体会和收获。本系统是Internet/Intranet环境下面向电子商务的客户管理&#xff0c;通过企业管理技术、电子商务和信息技术的高度集成&#xff0c;讨论了客户管理系统的系统构架、系统的工作…

兰博基尼STO 激活carplay ,定制刷写原厂证书

兰博基尼STO 激活carplay &#xff0c;定制刷写原厂证书

变分自动编码器(VAE)深入理解与总结

本文导航 0 引言1 起源1.1 自编码器的任务定义1.2 自编码器存在的问题1.3 VAE的核心思路 2 VAE的建模过程2.1 VAE的任务定义2.2 真实分布 ϕ \phi ϕ是什么&#xff0c;为什么要逼近这个分布的参数&#xff0c;如何做&#xff1f;2.3 “重参数化&#xff08;Reparameterization…

SFP光模块使用注意事项

SFP光模块安装: SFP光模块卸载: SFP光模块的使用: 测试用光纤须保证端面清洁&#xff0c;使用光纤连接光功率计或SFP模块前&#xff0c;必须清洁端面。 不要让SFP模块接收光功率长期处于过载点以上&#xff0c;尤其对于采用APD接收器件的模块&#xff0c;以免损坏。 使用仪表…

【C++】二分查找算法:x的平方根

1.题目 2.算法思路 看到题目可能不容易想到二分查找。 这题考察我们对算法的熟练程度。 二分查找的特点&#xff1a;数组具有二段性(不一定有序)。 题目中没有数组&#xff0c;我们可以造一个从0到x的数组&#xff0c;然后利用二分查找找到对应的值即可。 3.代码 class S…

STL---unordered set和unordered multiset【无序集合】

1.1 定义及初始化&#x1f357; 下面列出常用的初始化方式 #include <unordered_set> #include <iostream> using namespace std; //输出s中的所有元素 template<typename T> void Show(const T& s) {for (auto& x : s) …

每日一题---有效的括号问题

文章目录 前言1.题目以及分析2.参考代码 前言 前面我们学习了栈的相关操作&#xff0c;现在我们做一道题&#xff0c;进行巩固 Leetcode—有效的括号 1.题目以及分析 这道题就可以使用栈进行操作&#xff0c;因为把最左边的括号当成栈底&#xff0c;最右边的是栈顶&#xff0c…

Ansible02-Ansible Modules模块详解

目录 写在前面4. Ansible Modules 模块4.1 Ansible常用模块4.1.1 Command模块4.1.2 shell模块4.1.3 scrpit模块4.1.4 file模块4.1.5 copy模块4.1.6 lineinfile模块4.1.7 systemd模块4.1.8 yum模块4.1.9 get_url模块4.1.10 yum_repository模块4.1.11 user模块4.1.12 group模块4.…