基于机器学习预测未来的二氧化碳排放量(随机森林和XGBoost)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 基于机器学习预测未来的二氧化碳排放量(随机森林和XGBoost)

基于机器学习预测未来的二氧化碳排放量(随机森林和XGBoost)

简介:

CO2排放是当今全球关注的环境问题之一。本文将使用Python对OWID提供的CO2排放数据集进行分析,并尝试构建机器学习模型来预测未来的CO2排放趋势。我们将探索数据集中的CO2排放情况,分析各国/地区的排放趋势,并利用机器学习算法来预测未来的CO2排放量。

1. 数据集介绍:

我们使用的数据集是OWID(Our World in Data)提供的CO2排放数据集。该数据集包含了各国/地区自1949年至2020年的CO2排放量以及相关的经济、人口等数据。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
dataset = pd.read_csv('owid-co2-data.csv')
print(dataset.head()) #显示数据集的前5行。 
print(dataset.shape) #显示数据集的行数和列数
  iso_code      country  year    co2  consumption_co2  co2_growth_prct  \
0      AFG  Afghanistan  1949  0.015              NaN              NaN   
1      AFG  Afghanistan  1950  0.084              NaN            475.0   
2      AFG  Afghanistan  1951  0.092              NaN              8.7   
3      AFG  Afghanistan  1952  0.092              NaN              0.0   
4      AFG  Afghanistan  1953  0.106              NaN             16.0   

   co2_growth_abs  trade_co2  co2_per_capita  consumption_co2_per_capita  ...  \
0             NaN        NaN           0.002                         NaN  ...   
1           0.070        NaN           0.011                         NaN  ...   
2           0.007        NaN           0.012                         NaN  ...   
3           0.000        NaN           0.012                         NaN  ...   
4           0.015        NaN           0.013                         NaN  ...   

   ghg_per_capita  methane  methane_per_capita  nitrous_oxide  \
0             NaN      NaN                 NaN            NaN   
1             NaN      NaN                 NaN            NaN   
2             NaN      NaN                 NaN            NaN   
3             NaN      NaN                 NaN            NaN   
4             NaN      NaN                 NaN            NaN   

   nitrous_oxide_per_capita  population           gdp  \
0                       NaN   7624058.0           NaN   
1                       NaN   7752117.0  9.421400e+09   
2                       NaN   7840151.0  9.692280e+09   
3                       NaN   7935996.0  1.001732e+10   
4                       NaN   8039684.0  1.063052e+10   

   primary_energy_consumption  energy_per_capita  energy_per_gdp  
0                         NaN                NaN             NaN  
1                         NaN                NaN             NaN  
2                         NaN                NaN             NaN  
3                         NaN                NaN             NaN  
4                         NaN                NaN             NaN  

[5 rows x 58 columns]
(25204, 58)

2. 数据预处理:

df = dataset.drop(columns=[ 'consumption_co2','co2_growth_prct','co2_growth_abs' ])
df.head()

image.png

image.png

image.png

image.png

5 rows × 55 columns

df1 = df[['country', 'year','co2','coal_co2','cement_co2', 'flaring_co2','gas_co2','oil_co2', 'other_industry_co2','methane', 'nitrous_oxide', 'population' ]]
df1

image.png

image.png

25204 rows × 12 columns

final_df = df1[df1['year' ]>1995]
final_df


image.png

image.png


6073 rows × 12 columns

final_df = final_df[(final_df['country'].isin(['United States', 'Africa', 'Antartica','South Korea', 'Bangladesh', 'Canada', 'Germany', 'Brazil', 'Argentina','Japan', 'India', 'United Kingdom', 'Saudi Arabia', 'China', 'Australia','Russia']) & (final_df['co2'] > 0))]
final_df

image.png

image.png

375 rows × 12 columns

final_df.isnull().sum()

country                 0
year                    0
co2                     0
coal_co2               25
cement_co2              0
flaring_co2            77
gas_co2                 0
oil_co2                 0
other_industry_co2    125
methane                81
nitrous_oxide          81
population              0
dtype: int64

3.数据可视化

我们将根据我们的数据集绘制图表并分析一些结果。 我们绘制一下随时间线的co2排放趋势图:

px.line(dataset, x = 'year', y = 'co2', color='country')

dataset = dataset.dropna(subset=['co2'])

px.scatter(dataset[dataset['year']==2019], x="co2_per_capita", y="energy_per_capita", size="co2", color="country", hover_name="country", log_x=True, size_max=60)

continent_data =  dataset[(dataset['country'].isin(['Europe', 'Africa', 'North America', 'South America', 'Oceania', 'Asia'])) & (dataset['co2'] > 0)]
continent_data



image.png

image.png

image.png

image.png

1111 rows × 58 columns

px.pie(final_df, names='country', values='co2')

final_df_2020 = final_df[(final_df[ 'year' ]==2020) ]
final_df_2020
final_df_2020[['country','coal_co2','cement_co2','flaring_co2','gas_co2', 'oil_co2','other_industry_co2']].plot(x='country', kind='bar',figsize=(9,5),width=0.9)
plt.title('2020 CO2 consumption')
plt.xlabel('Countries' )
plt.ylabel('CO2 measured in million tonnes')

print(dataset.info)
print(dataset.head())
<bound method DataFrame.info of       iso_code      country  year     co2  consumption_co2  co2_growth_prct  \
0          AFG  Afghanistan  1949   0.015              NaN              NaN   
1          AFG  Afghanistan  1950   0.084              NaN           475.00   
2          AFG  Afghanistan  1951   0.092              NaN             8.70   
3          AFG  Afghanistan  1952   0.092              NaN             0.00   
4          AFG  Afghanistan  1953   0.106              NaN            16.00   
...        ...          ...   ...     ...              ...              ...   
25199      ZWE     Zimbabwe  2016  10.738           12.153           -12.17   
25200      ZWE     Zimbabwe  2017   9.582           11.248           -10.77   
25201      ZWE     Zimbabwe  2018  11.854           13.163            23.72   
25202      ZWE     Zimbabwe  2019  10.949           12.422            -7.64   
25203      ZWE     Zimbabwe  2020  10.531              NaN            -3.82   

       co2_growth_abs  trade_co2  co2_per_capita  consumption_co2_per_capita  \
0                 NaN        NaN           0.002                         NaN   
1               0.070        NaN           0.011                         NaN   
2               0.007        NaN           0.012                         NaN   
3               0.000        NaN           0.012                         NaN   
4               0.015        NaN           0.013                         NaN   
...               ...        ...             ...                         ...   
25199          -1.488      1.415           0.765                       0.866   
25200          -1.156      1.666           0.673                       0.790   
25201           2.273      1.308           0.821                       0.912   
25202          -0.905      1.473           0.748                       0.848   
25203          -0.418        NaN           0.709                         NaN   

       ...  ghg_per_capita  methane  methane_per_capita  nitrous_oxide  \
0      ...             NaN      NaN                 NaN            NaN   
1      ...             NaN      NaN                 NaN            NaN   
2      ...             NaN      NaN                 NaN            NaN   
3      ...             NaN      NaN                 NaN            NaN   
4      ...             NaN      NaN                 NaN            NaN   
...    ...             ...      ...                 ...            ...   
25199  ...           4.703    11.92                0.85           6.55   
25200  ...             NaN      NaN                 NaN            NaN   
25201  ...             NaN      NaN                 NaN            NaN   
25202  ...             NaN      NaN                 NaN            NaN   
25203  ...             NaN      NaN                 NaN            NaN   

       nitrous_oxide_per_capita  population           gdp  \
0                           NaN   7624058.0           NaN   
1                           NaN   7752117.0  9.421400e+09   
2                           NaN   7840151.0  9.692280e+09   
3                           NaN   7935996.0  1.001732e+10   
4                           NaN   8039684.0  1.063052e+10   
...                         ...         ...           ...   
25199                     0.467  14030338.0  2.096179e+10   
25200                       NaN  14236599.0  2.194784e+10   
25201                       NaN  14438812.0  2.271535e+10   
25202                       NaN  14645473.0           NaN   
25203                       NaN  14862927.0           NaN   

       primary_energy_consumption  energy_per_capita  energy_per_gdp  
0                             NaN                NaN             NaN  
1                             NaN                NaN             NaN  
2                             NaN                NaN             NaN  
3                             NaN                NaN             NaN  
4                             NaN                NaN             NaN  
...                           ...                ...             ...  
25199                        47.5           3385.574           1.889  
25200                         NaN                NaN             NaN  
25201                         NaN                NaN             NaN  
25202                         NaN                NaN             NaN  
25203                         NaN                NaN             NaN  

[23949 rows x 58 columns]>
  iso_code      country  year    co2  consumption_co2  co2_growth_prct  \
0      AFG  Afghanistan  1949  0.015              NaN              NaN   
1      AFG  Afghanistan  1950  0.084              NaN            475.0   
2      AFG  Afghanistan  1951  0.092              NaN              8.7   
3      AFG  Afghanistan  1952  0.092              NaN              0.0   
4      AFG  Afghanistan  1953  0.106              NaN             16.0   

   co2_growth_abs  trade_co2  co2_per_capita  consumption_co2_per_capita  ...  \
0             NaN        NaN           0.002                         NaN  ...   
1           0.070        NaN           0.011                         NaN  ...   
2           0.007        NaN           0.012                         NaN  ...   
3           0.000        NaN           0.012                         NaN  ...   
4           0.015        NaN           0.013                         NaN  ...   

   ghg_per_capita  methane  methane_per_capita  nitrous_oxide  \
0             NaN      NaN                 NaN            NaN   
1             NaN      NaN                 NaN            NaN   
2             NaN      NaN                 NaN            NaN   
3             NaN      NaN                 NaN            NaN   
4             NaN      NaN                 NaN            NaN   

   nitrous_oxide_per_capita  population           gdp  \
0                       NaN   7624058.0           NaN   
1                       NaN   7752117.0  9.421400e+09   
2                       NaN   7840151.0  9.692280e+09   
3                       NaN   7935996.0  1.001732e+10   
4                       NaN   8039684.0  1.063052e+10   

   primary_energy_consumption  energy_per_capita  energy_per_gdp  
0                         NaN                NaN             NaN  
1                         NaN                NaN             NaN  
2                         NaN                NaN             NaN  
3                         NaN                NaN             NaN  
4                         NaN                NaN             NaN  

[5 rows x 58 columns]

4. 数据预处理:

在进行数据分析之前,我们需要对数据进行预处理,包括处理缺失值和选择感兴趣的特征列。

features = ['year', 'population', 'gdp', 'primary_energy_consumption', 'energy_per_capita', 'energy_per_gdp']
target = 'co2'
data = dataset[features + [target]].dropna()

5. 机器学习建模:

我们将尝试使用随机森林回归和XGBoost算法建立CO2排放的预测模型,并评估其性能。

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error


# 分割数据集
X = data[features]
y = data[target]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 随机森林回归
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
y_pred_rf = rf_model.predict(X_test)
mse_rf = mean_squared_error(y_test, y_pred_rf)
print("随机森林回归均方误差:", mse_rf)
随机森林回归均方误差: 5564.344690878827
from xgboost import XGBRegressor

# XGBoost 回归
xgb_model = XGBRegressor(n_estimators=100, random_state=42)
xgb_model.fit(X_train, y_train)
y_pred_xgb = xgb_model.predict(X_test)
mse_xgb = mean_squared_error(y_test, y_pred_xgb)
print("XGBoost 回归均方误差:", mse_xgb)

# 查看测试集的预测结果
results_rf = pd.DataFrame({'Actual': y_test, 'Predicted_RF': y_pred_rf})
results_xgb = pd.DataFrame({'Actual': y_test, 'Predicted_XGB': y_pred_xgb})

print("随机森林回归预测结果:\n", results_rf.head())
print("XGBoost 回归预测结果:\n", results_xgb.head())
XGBoost 回归均方误差: 6550.179319235124
随机森林回归预测结果:
          Actual  Predicted_RF
4678   1183.215    1140.30654
22293     2.536       3.88285
1552    187.609     171.56567
22409     7.440       9.76497
11248   129.475      76.18446
XGBoost 回归预测结果:
          Actual  Predicted_XGB
4678   1183.215    1219.047852
22293     2.536       5.083570
1552    187.609     184.427612
22409     7.440       9.800858
11248   129.475      98.655746

6.结论:

通过对CO2排放数据集的分析和机器学习建模,我们可以更好地理解全球CO2排放的情况,并为未来的环境保护和可持续发展提供数据支持。未来的研究可以进一步探索CO2排放与气候变化、经济增长等因素之间的关系,并提出相应的政策建议。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
2月前
|
机器学习/深度学习 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-4
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
1月前
|
机器学习/深度学习 数据采集 算法
【阿旭机器学习实战】【35】员工离职率预测---决策树与随机森林预测
【阿旭机器学习实战】【35】员工离职率预测---决策树与随机森林预测
|
2月前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
1月前
|
机器学习/深度学习
基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)(二)
基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)(二)
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)(一)
基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)(一)
基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)(一)
|
1月前
|
机器学习/深度学习 数据采集 分布式计算
【机器学习】XGBoost: 强化学习与梯度提升的杰作
在机器学习的广阔领域中,集成学习方法因其卓越的预测性能和泛化能力而备受瞩目。其中,XGBoost(Extreme Gradient Boosting)作为梯度提升决策树算法的杰出代表,自其诞生以来,便迅速成为数据科学竞赛和工业界应用中的明星算法。本文旨在深入浅出地介绍XGBoost的核心原理、技术优势、实践应用,并探讨其在模型调优与解释性方面的考量,为读者提供一个全面且深入的理解框架。
45 2
|
17天前
|
机器学习/深度学习 数据采集 JavaScript
技术心得记录:机器学习——用逻辑回归及随机森林实现泰坦尼克号的生存预测
技术心得记录:机器学习——用逻辑回归及随机森林实现泰坦尼克号的生存预测
22 0
|
2月前
|
机器学习/深度学习 数据采集 前端开发
【机器学习】随机森林:深度解析与应用实践
在机器学习的广阔天地中,集成学习方法因其卓越的预测能力和泛化性能而备受青睐。其中,随机森林(Random Forest)作为集成学习的一个重要分支,凭借其简单、高效且易于实现的特性,在分类和回归任务中展现了非凡的表现。本文将深入探讨随机森林的基本原理、核心构建模块、关键参数调优以及在实际应用中的策略与案例分析,旨在为读者提供一个全面而深入的理解。
522 3
|
2月前
|
机器学习/深度学习 算法 Python
【Python 机器学习专栏】随机森林算法的性能与调优
【4月更文挑战第30天】随机森林是一种集成学习方法,通过构建多棵决策树并投票或平均预测结果,具有高准确性、抗过拟合、处理高维数据的能力。关键性能因素包括树的数量、深度、特征选择和样本大小。调优方法包括调整树的数量、深度,选择关键特征和参数优化。Python 示例展示了使用 GridSearchCV 进行调优。随机森林广泛应用于分类、回归和特征选择问题,是机器学习中的重要工具。