【python】横截面数据分析及可视化报告示例

问题描述

题目:

共享的数据文件夹包含 2 个外部文件。第一个文件 "project data.xls "涉及国家层面的数据(2000-2019 年),变量大多摘自世界发展指标。变量解释在第二个文件中

创建一个模型,解释为什么一些国家的人均温室气体排放量更高。人均温室气体排放量的增长率如何?虽然数据是按面板数据排列的,但可以进行横截面分析。您可以进行聚类分析,找出数据中的模式。

您的报告必须约 5000 字。包括文献综述、数据分析、结论和建议。

摘要

随着科技的发展变化,温室气体的排放量逐渐增长,为探索出影响温室气体排放量的关键因素。对2000-2019年间多个国家的数据进行分析,挖掘出数据中潜藏的规律,总结造成人均温室气体排放量增加的原因,以及计算出人均温室气体排放量的增长率。

本文通过数据分析和清洗,利用数据清洗的方式对数据进行规范,去掉未统计出温室气体排放量的数据,以及去掉空缺比例大于百分之五十的数据属性。利用皮尔逊相关性分析,得出对人均温室气体排放量影响较大的因素有人口,温室气体排放总量,Agricultural methane emissions (thousand metric tons of CO2 equivalent),Urban population等。并进行了多角度的数据可视化,发现随着经济增长,人均温室气体排放量总体在不断增加。2000年-2019年整体呈上涨态势,有少部分国家人均温室气体排放量下降。

使用k均值聚类的方法,将不同国家的数据分为三类,描述不同类别国家的数据特点。进行横截面分析,选取各个国家2019年的数据建立决策树模型,查看各个特征对人均温室气体排放量的重要性排序。再对比各个分类中特种的重要性,发现不同分类间的区别。

最终根据结果,提出对减少人均温室气体排放量的针对性建议,应根据不同国家的特点采取针对性的控制温室气体排放的措施。

一、 数据处理

共有2780条数据,包括214个属性,共包含139个国家的数据,每个国家从2000-2019年间的数据统计情况。包括经济、人口、环境、政策、医疗等方面的数据。

1.2数据清洗

1.2.1筛选数据

PCGHGE计算方法

计算出每个国家其年份的人均温室气体排放量,计算方法为Total greenhouse gas emissions (kt of CO2 equivalent)除以总的人口数量。将 PCGHGE作为单独一列加入到dataframe中。

筛选出有 PCGHGE的数据

对数据进行筛选,选择出per capita Green House Gas emissions.值大于零的数据,否则无法分析人均温室气体排放量与其他影响因素之间的关系。

1.2.2缺失值填充

统计数据中的缺失值发现多列存在有缺失值的情况,缺失值会影响数据对数据的分析。

python 复制代码
missing_values_count = df.isnull().sum()  
total_count = len(df)  
missing_values_percentage = missing_values_count / total_count  
columns_to_drop = missing_values_percentage[missing_values_percentage > 0.5].index  
df.drop(columns_to_drop, axis=1, inplace=True)  
remaining_columns = len(df.columns)  
print(f"Number of remaining columns: {remaining_columns}")

为了确保使用的属性具有科学性和可靠性,通过数据预处理去除那些缺失值超过总数据量百分之五十的记录或特征,以此来优化数据集。

使用0填充,补充数据中的缺失值,使数据更加完整。现在数据不存在任何的空值。

二、 数据分析和可视化

2.1相关性分析

python 复制代码
def plotCorrelationMatrix(df, graphWidth):  
    df = df.iloc[:, 1:]  
    df.select_dtypes(include=['number'])  
    df = df[[col for col in df if df[col].nunique() > 1]]  
    corr = df.corr()  
    top_corr_with_ PC PCGHGEE = corr[' PCGHGE'].abs().sort_values(ascending=False).index[:101]  
    corr_top = corr.loc[top_corr_with_ PCGHGE, top_corr_with_ PCGHGE]  
    plt.figure(num=None, figsize=(graphWidth, graphWidth), dpi=80, facecolor='w', edgecolor='k')  
    corrMat = plt.matshow(corr_top, fignum=1)  
    plt.xticks(range(len(corr_top.columns)), corr_top.columns, rotation=90)  
    plt.yticks(range(len(corr_top.columns)), corr_top.columns)  
    plt.gca().xaxis.tick_bottom()  
    plt.colorbar(corrMat)  
    plt.title('Correlation Matrix for Top 100 Correlated Features with  PCGHGE', fontsize=15)  
    plt.show() 

使用皮尔逊相关系数对影响人均温室气体排放量的因素进行计算,对筛选出的属性进行排序,筛选出影响力前100的因素进行可视化。

由图可知影响力最大的因素有人口,温室气体排放总量,Agricultural methane emissions (thousand metric tons of CO2 equivalent),Urban population,Renewable internal freshwater resources, total (billion cubic meters)等等。由此推测,人均的温室气体的排放量大小与国家类型有着很大关系,人口多、资源丰富的国家人均温室气体排放量更高。

2.2数据变化分析

python 复制代码
countries = ['United States', 'China', 'South Africa', 'Thailand', 'Norway','Angola','Germany']  
filtered_data = df[df['Country.1'].isin(countries)]  
plt.figure(figsize=(12, 8))  
for country in countries:  
    country_data = filtered_data[filtered_data['Country.1'] == country]  
    plt.plot(country_data['YEAR'], country_data['PCGHGE'], label=country, marker='o')  
	plt.grid(True, which='both', linestyle='--', linewidth=0.5)  
 	plt.xlabel('YEAR')  
	plt.ylabel('PCGHGE (EN.ATM.GHGT.KT.CE per population)')  
	plt.title('Change in PCGHGE with Year')  
	plt.legend()  
	plt.show() 

分国家进行分析,对比不同国家之间随时间增长,人均温室气体排放的情况,以此了解其中潜藏的信息。

部分国家人均温室气体排放量随时间变化情况

由图可知不同国家之间的人均温室气体排放量体现出了显著差异,有的国家人均温室气体排放量的值非常高,部分国家的值较低,大部分国家随着时间的变化人均温室气体的排放量都在增加。

根据统计,人均温室气体排放量前十的国家分别是Uruguay.Turkmenistam.Slovenia.Zimbabwe.在后续的分析中应当着重分析人均气体排放量较大的国家的数据特点,比较与其他人均温室气体排放量较低国家的数据差异,从而发掘导致人均温室气体排放量高的原因。

python 复制代码
1.	emission_gp = df[['Country.1', 'PCGHGE']].groupby('Country.1').agg('sum').reset_index().sort_values(by='PCGHGE', ascending=False)  
2.	world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))  
3.	world = world.merge(emission_gp, how='left', left_on='name', right_on='Country.1')  
4.	fig, ax = plt.subplots(1, 1, figsize=(15, 10))  
5.	world.plot(column='PCGHGE', linewidth=0.8, ax=ax, edgecolor='0.8', legend=True)  
6.	ax.set_title('Global Map of PCGHGE')  
7.	plt.show() 

人均温室气体排放量全球分布

如图所示,更具地域分布来看,多个大洲都出现了人均温室气体排放量较高的国家,得出结论为人均温室气体排放量的分布无明显的地域特点,不从地域分布的角度作为影响人均温室气体排放的主要原因。

近年全球人均温室气体排放量随时间变化情况

如图所示,从2000-2019年全球人均温室气体排放量呈不断上涨的趋势,2000年-2012年这个时间段增长的速度较为迅速,自2012年以后,上升速度逐渐平缓,2014-2016年之间出现了短暂的下降情况。整体来讲,温室气体的排放仍旧在不断增加,需要发掘出影响其不断上升的原因并采取相应的措施。

二、计算人均温室气体排放量增长率

python 复制代码
1.	df['PCGHGE_growth_rate'] = df.groupby('Country.1')['PCGHGE'].pct_change()  
2.	  
3.	avg_growth_rate = df.groupby('Country.1')['PCGHGE_growth_rate'].mean().sort_values(ascending=False)  
4.	# print(avg_growth_rate)  
5.	  
6.	top_10_countries = avg_growth_rate.head(10)  
7.	print(top_10_countries)  
8.	  
9.	plt.figure(figsize=(10, 6))  
10.	top_10_countries.plot(kind='bar', color='skyblue')  
11.	plt.title('Top 10 Countries by Average GHG Emissions Growth Rate')  
12.	plt.xlabel('Country')  
13.	plt.ylabel('Average Growth Rate')  
14.	plt.xticks(rotation=45)  
15.	plt.show()  

计算出每个国家每一年的人均温室气体排放量,再通过前后两年的人均温室气体排放量的变化计算出对应的国家的人均温室气体排放量增长率。对计算出的结果进行排序和可视化。

Country Growth Rate

Kazakhstan 0.078725

Albania 0.070009

Pakistan 0.067674

El Salvador 0.063387

Bosnia and Herzegovina 0.061484

...

Papua New Guinea -0.057141

由表可知,增长率最快的国家是Kazakhstan,值为0.078725.大部分国家随着时间变化人均温室气体排放量在不断增长,但也有部分国家2000-2019整体人均温室气体排放量在下降,其中下降最快的国家为Papua New Guinea,增长率为-0.057141.增长率下降的国家一共有50个。

根据统计图可知,增长率前十国家的平均增长速度均超过了百分之5%,增长速度比较快。

三、 聚类

3.1聚类过程

不同国家具有不同的经济特点、气候特征、工业能力等,为更好的探索其他因素对人均温室气体排放量的影响,根据不同的数据特点将国家数据分为不同的类别,使用和人均温室气体排放量相关性较大的前五十个因素作为特征进行聚类分析。

python 复制代码
#kmeans  
df = df.drop('PCGHGE_growth_rate', axis=1)  
df = df.drop('SP.POP.TOTL', axis=1)  
df = df.drop('EN.ATM.METH.AG.KT.CE', axis=1)  
features = df.iloc[:,3:]  
scaler = StandardScaler()  
scaled_features = scaler.fit_transform(features)  
# kmeans = KMeans(n_clusters=3, random_state=42)  
# df['Cluster'] = kmeans.fit_predict(scaled_features)  
#  
# plt.figure(figsize=(10, 6))  
# plt.scatter(df['PCGHGE'], df['Cluster'], c=df['Cluster'], cmap='viridis')  
# plt.xlabel('PCGHGE')  
# plt.ylabel('Cluster')  
# plt.title('Clustering Results')  
# plt.colorbar(label='Cluster')  
# plt.show()  
  
linked = linkage(scaled_features, method='ward')  
plt.figure(figsize=(10, 7))  
dendrogram(linked, orientation='top', labels=df.index, distance_sort='descending', show_leaf_counts=True)  
plt.title('Hierarchical Clustering Dendrogram')  
# plt.xlabel('Sample index')  
plt.ylabel('Distance')  
plt.show()  
	  
from scipy.cluster.hierarchy import fcluster  
df['Cluster'] = fcluster(linked, t=3, criterion='maxclust')  
plt.figure(figsize=(10, 6))  
plt.scatter(df['PCGHGE'], df['Cluster'], c=df['Cluster'], cmap='viridis')  
plt.xlabel('PCGHGE')  
plt.ylabel('Cluster')  
plt.title('Hierarchical Clustering Results')  
plt.colorbar(label='Cluster')  
plt.show()  	  
df.to_csv('path/sorted.csv')  

聚类采用了两种方法,分别是K-均值聚类和层次聚类,通过聚类结果再分别进行分析。

使用层次聚类的方法,将不同国家数据分为了三类,过程如图所示。

使用K均值聚类,将国家的数据分为三类,类序号为1的国家数量最多,类序号为3的国家最少。与层次聚类相比,k均值分类分布更加均匀。最终采用K均值聚类的方法将数据分为三类。

3.2聚类结果分析

类别一:这一类国家在各项属性指标上普遍较低,具体表现为较小的人口总数、较低的温室气体排放量,以及总体国力较小。这类国家通常由于经济规模、工业化水平和人口规模的限制,对全球环境和经济的影响相对较小。

类别二:这类国家在各项属性指标上表现突出,人口总数较高,温室气体排放量也相对较大,反映出其较高的工业化水平和经济发展程度。由于国家整体的体量较大,这些国家对全球的温室气体排放贡献显著,具有重要的全球影响力。

类别三:这一类国家的各项属性指标处于中等水平,人口总数适中,温室气体排放量和国家整体体量均居于中游。这些国家尽管不如类别二的国家那样对全球环境和经济产生巨大影响,但由于其适中的规模和排放量,仍然在全球气候变化和经济体系中占据一定的地位。

四、 影响因素分析

4.1决策树回归模型

python 复制代码
1.	import pandas as pd  
2.	from sklearn.tree import DecisionTreeRegressor  
3.	from sklearn.model_selection import train_test_split  
4.	from sklearn.metrics import mean_squared_error, r2_score  
5.	  
6.	file_path = 'path/result.csv'  
7.	df = pd.read_csv(file_path)  
8.	  
9.	filtered_df = df[(df['Final_Cluster'] == 0) & (df['YEAR'] == 2019)]  
10.	  
11.	features = filtered_df.columns[3:-2]  
12.	X = filtered_df[features]  
13.	y = filtered_df['PCGHGE']  
14.	  
15.	X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
16.	model = DecisionTreeRegressor(random_state=42)  
17.	model.fit(X_train, y_train)  
18.	  
19.	y_pred = model.predict(X_test)  
20.	  
21.	mse = mean_squared_error(y_test, y_pred)  
22.	r2 = r2_score(y_test, y_pred)  
23.	  
24.	print(f'Mean Squared Error: {mse}')  
25.	print(f'R^2 Score: {r2}')  
26.	  
27.	feature_importances = pd.DataFrame(model.feature_importances_, features, columns=['Importance'])  
28.	feature_importances = feature_importances.sort_values(by='Importance', ascending=False)  
29.	  
30.	print(feature_importances)

选取所有国家2019年的数据进行分析,建立决策树模型,查看影响人均温室气体排放量属性的重要性。

Feature Feature

1 ER.H2O.FWTL.K3 16 AG.PRD.LVSK.XD

2 SL.IND.EMPL.FE.ZS 17 AG.PRD.FOOD.XD

3 EN.ATM.CO2E.PP.GD 18 AG.LND.TOTL.K2

4 EN.ATM.METH.AG.KT.CE 19 NY.GDP.MKTP.PP.CD

5 ER.H2O.INTR.K3 20 ER.H2O.FWIN.ZS

6 EN.ATM.NOXE.KT.CE 21 NY.GNP.MKTP.KD

7 EN.ATM.NOXE.EG.KT.CE 22 NY.GDP.MKTP.PP.KD

8 ER.H2O.FWDM.ZS 23 EN.ATM.CO2E.KD.GD

9 NV.IND.TOTL.ZS 24 NV.SRV.TOTL.CD

10 AG.LND.FRST.K2 25 NV.AGR.TOTL.CD

11 SP.POP.TOTL 26 SP.URB.TOTL

12 EN.ATM.CO2E.KT 27 EN.ATM.GHGT.KT.CE

13 EN.ATM.CO2E.PP.GD.KD 28 NY.GDP.MKTP.CD

14 AG.LND.CREL.HA 29 NV.IND.TOTL.KD

15 SL.TLF.TOTL.IN 30 NV.SRV.TOTL.KD

根据总体数据构建决策树,对影响人均温室气体排放量的属性进行排序,特征重要性结果排序表如表所示。影响力较大的数据有Annual freshwater withdrawals, total (billion cubic meters), CO2 emissions (kg per PPP $ of GDP), Employment in industry, female (% of female employment) (modeled ILO estimate),Agricultural methane emissions (thousand metric tons of CO2 equivalent), Renewable internal freshwater resources, total (billion cubic meters), Nitrous oxide emissions (thousand metric tons of CO2 equivalent), Industry (including construction), value added (% of GDP)

4.2分类别分析

4.2.1 类别0结果分析

1 NY.GDP.MKTP.CD 16 ER.H2O.FWIN.ZS

2 NV.IND.TOTL.ZS 17 ER.H2O.INTR.K3

3 EN.ATM.NOXE.KT.CE 18 AG.LND.FRST.K2

4 NV.SRV.TOTL.CD 19 SL.TLF.TOTL.IN

5 NV.AGR.TOTL.CD 20 SP.URB.TOTL

6 NY.GDP.MKTP.KD 21 IS.AIR.PSGR

7 AG.LND.TOTL.K2 22 EN.ATM.METH.AG.KT.CE

8 EN.ATM.GHGT.KT.CE 23 NV.IND.TOTL.KD

9 SL.IND.EMPL.FE.ZS 24 ER.FSH.AQUA.MT

10 AG.PRD.CREL.MT 25 EN.ATM.CO2E.PP.GD.KD

11 ER.H2O.FWDM.ZS 26 EN.ATM.CO2E.SF.ZS

12 NY.GDP.MKTP.PP.KD 27 EG.ELC.COAL.ZS

13 NV.IND.TOTL.CD 28 EN.ATM.CO2E.KD.GD

14 NY.GNP.MKTP.CD 29 EG.ELC.FOSL.ZS

15 AG.PRD.LVSK.XD 30 EN.ATM.CO2E.LF.ZS

选择分类号为0的数据,构建决策树模型,分类0是国家在各项属性指标上普遍较低,这些国家人均温室气体排放主要受GDP (current US ) , I n d u s t r y ( i n c l u d i n g c o n s t r u c t i o n ) , v a l u e a d d e d ( ), Industry (including construction), value added (% of GDP), Services, value added (current US ),Industry(includingconstruction),valueadded() ,Agriculture, forestry, and fishing, value added (current US$), Cereal production (metric tons)等因素等影响。

4.2.2 类别1结果分析

1 AG.LND.AGRI.K2 16 AG.PRD.LVSK.XD

2 NV.IND.TOTL.ZS 17 AG.LND.TOTL.K2

3 NY.GDP.MKTP.KD 18 ER.H2O.FWDM.ZS

4 ER.FSH.AQUA.MT 19 EN.ATM.CO2E.SF.ZS

5 EN.ATM.CO2E.PP.GD.KD 20 EG.ELC.COAL.ZS

6 IS.AIR.PSGR 21 AG.LND.CREL.HA

7 IS.AIR.GOOD.MT.K1 22 ER.H2O.INTR.K3

8 EN.ATM.NOXE.AG.KT.CE 23 EN.CO2.MANF.ZS

9 NY.GDP.MKTP.PP.KD 24 EN.ATM.CO2E.LF.ZS

10 SL.TLF.TOTL.IN 25 AG.PRD.CREL.MT

11 EN.ATM.NOXE.KT.CE 26 EN.ATM.CO2E.PP.GD

12 SL.IND.EMPL.FE.ZS 27 EG.USE.COMM.FO.ZS

13 EN.ATM.GHGT.KT.CE 28 SP.URB.TOTL

14 EN.ATM.CO2E.KT 29 EN.ATM.CO2E.KD.GD

15 SP.POP.TOTL 30 ER.H2O.FWIN.ZS

选择分类号为1的数据,构建决策树模型,分类1是国家在各项属性指标上最高的大型国家,这些国家人均温室气体排放主要受Agricultural land (sq. km), Industry (including construction), value added (% of GDP), Aquaculture production (metric tons), Air transport, passengers carried, Labor force, total等因素等影响。

4.2.3 类别2结果分析

1 AG.LND.AGRI.K2 16 NV.IND.TOTL.KD

2 ER.H2O.INTR.K3 17 SL.IND.EMPL.FE.ZS

3 EN.ATM.NOXE.EG.KT.CE 18 ER.H2O.FWIN.ZS

4 IS.AIR.PSGR 19 IS.AIR.GOOD.MT.K1

5 AG.LND.FRST.K2 20 AG.LND.CREL.HA

6 NV.SRV.TOTL.KD 21 EN.ATM.GHGT.KT.CE

7 ER.H2O.FWTL.K3 22 ER.H2O.FWDM.ZS

8 NV.IND.TOTL.ZS 23 NV.AGR.TOTL.CD

9 AG.PRD.FOOD.XD 24 NY.GDP.MKTP.PP.CD

10 EN.ATM.NOXE.AG.KT.CE 25 EG.ELC.COAL.ZS

11 EN.ATM.NOXE.KT.CE 26 EN.ATM.CO2E.SF.ZS

12 ER.FSH.AQUA.MT 27 EN.ATM.CO2E.PP.GD.KD

13 AG.LND.TOTL.K2 28 SP.POP.TOTL

14 NY.GNP.MKTP.CD 29 EN.CO2.MANF.ZS

15 EN.ATM.METH.AG.KT.CE 30 EN.ATM.CO2E.LF.ZS

选择分类号为2的数据,构建决策树模型,分类2是国家在各项属性指标上处于中间位置的中型国家,这些国家人均温室气体排放主要受Agricultural land (sq. km), Renewable internal freshwater resources, total (billion cubic meters), Air transport, passengers carried,Nitrous oxide emissions in energy sector (thousand metric tons of CO2 equivalent), Forest area (sq. km)等因素等影响。

五、 结论

5.1 总体结论

一些国家人均温室气体排放较高的原因是,具有大规模的农业以及工业生产活动,以及发达的交通运输业。具备丰富的水和能源资源功能,使其能够不断产生大量的温室气体。

根据数据分析可知,人均温室气体排放呈现逐年增长的态势,2000年-2012年这个时间段增长的速度较为迅速,自2012年以后,上升速度逐渐平缓。少部分国家人均温室气体排放量在下降。

温室气体中二氧化碳排放占据主要影响,年淡水取水量、CO2排放量、农业甲烷排放量、可再生内陆淡水资源总量、氮氧化物排放量等在总体中是关键因素。大型的工业、农业会产生大量的温室气体,也说明温室气体的排放量和资源的丰富程度有很大的关联关系。

各个国家需要采取针对性的措施来应对人均温室气体排放的情况,减少温室气体对环境的破坏和影响。

5.2 分类结论

分类0(低排放国家),主要影响因素有GDP、工业(包括建筑业)的GDP贡献、农业、林业和渔业的价值、谷物生产量。这些国家虽然在各项指标上普遍较低,但人均温室气体排放仍受经济活动以及农业生产的影响。这些国家交通运输以及航运产生的温室气体量较小。

分类2(中等排放国家),主要的影响因素有农业用地、可再生内陆淡水资源总量、航空运输乘客数、能源部门的氮氧化物排放、森林面积。这些国家的人均温室气体排放量居中,主要受中等规模的农业用地、资源管理和交通运输的影响。

分类1(高排放国家), 主要影响因素有农业用地、工业(包括建筑业)的GDP贡献、水产养殖生产量、航空运输乘客数、总劳动人口。这些国家在人均温室气体排放量高,主要受较大规模的农业和工业活动、交通运输以及劳动市场的影响。

六、 建议

温室气体的排放量逐年增加,必须采取对应的措施控制温室气体的排放量,减少对空气以及环境的破坏,开发清洁能源,提高能源利用效率来减少温室气体的排放。

对于低排放国家,政策应关注提升经济活动的同时,控制农业和工业生产带来的排放。中等排放的国家建议加强对农业用地和资源管理的政策,同时关注减少能源部门的排放。高排放的国家需要制定综合的排放控制措施,特别是针对大型农业和工业活动,以及改进交通运输的环保技术,提高航运或空运的效率,避免不必要的资源浪费。

相关推荐
梧桐树04292 小时前
python常用内建模块:collections
python
Dream_Snowar2 小时前
速通Python 第三节
开发语言·python
蓝天星空4 小时前
Python调用open ai接口
人工智能·python
jasmine s4 小时前
Pandas
开发语言·python
郭wes代码4 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf4 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零14 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound4 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
天天要nx5 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
minstbe5 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机