通过seaborn对全球204个国家和地区进行定量分析

2024-02-06 14:59

本文主要是介绍通过seaborn对全球204个国家和地区进行定量分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据集为全球204个国家和地区的经济、外贸、寿命、疫情数据,主要以2021年数据为基准,部分缺失国家采用了2020年的数据。本文通过seaborn对世界数据进行定量和定性分析。

a74f18a3ce2ab5e66e708c621c8988e8.png

国际组织评定一个国家是否属于发达国家所考虑的指标除了该国的GDP规模之外,还会考虑其人均GDP/GNI、工业化水平、国民生活水平和它拥有的技术基础设施数量。除此之外,不过国际组织还会根据自身针对的领域特点,加入其他的考核因素。发达国家,又称已开发国家和先进国家。是指那些经济和社会发展水准较高,人民生活水准较高的国家,又称作高经济开发国家(MEDC)。发达国家的普遍特征是较高的人类发展指数、人均国民生产总值、工业化水准和生活品质。根据2021年的数据,目前获得全球正式承认的发达国家共有31个,这31个发达国家中,欧洲有23个国家、美洲有2个、澳洲有2个、亚洲有4个。

为划分世界各经济体收入水平,世界银行于 1978 年在世界发展报告中首次发布了国家收入分类标准以及人均国民总收入(GNI)指标的国家排序数据。世界银行国家收入分类标准,是国际社会分析研究世界各经济体经济社会发展状况、发展趋势、发展水平和发展差距的重要工具,也是世界各经济体开展全球合作治理、做出行政决策和制定发展战略的重要统计依据。世界银行按图表集法计算各经济体人均国民总收入(GNI),对世界各经济体经济发展水平进行分组。世界银行把全世界经济体划入四个收入组别:高收入、中等偏上收入、中等偏下收入以及低收入。通常,中、低收入国家被称为发展中国家,高收入国家被称为发达国家。

按照人均GNI,将它们分成四类,2021年的阈值是:

人均GNI在1085美元及以下是低收入经济体。

人均GNI在1086至4255美元是中等偏下收入经济体。

人均GNI在4256至13205美元是中等偏上收入经济体。

人均GNI在13205美元以上是高收入经济体。

第一部分为读取数据,查看数据为空和缺失情况

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import rcParams# ----------------------读取数据-----------------------
# 读取数据文件
dataset = pd.read_csv('世界经济人口数据.csv', encoding='utf-8')# 设置pandas显示的列数和浮点数格式
pd.set_option("display.max_columns", 33)
pd.set_option("display.float_format", "{:.5f}".format)# 查看数据,并输出前5条记录
print(dataset.head())
#    序号 国家/地区   洲 是否发达经济体    经济体收入类型    年份              GDP(美元)  GDP占世界比重  \
# 0   1    美国  美洲       是     高收入经济体  2021 23315100000000.00000   0.24160
# 1   2    中国  亚洲       否  中等偏上收入经济体  2021 17734100000000.00000   0.18370
# 2   3    日本  亚洲       是     高收入经济体  2021  4940880000000.00000   0.05120
# 3   4    德国  欧洲       是     高收入经济体  2021  4259930000000.00000   0.04410
# 4   5    印度  亚洲       否  中等偏下收入经济体  2021  3176300000000.00000   0.03290# 查看数据类型和非空计数情况,以下仅为部分摘录数据
print(dataset.info())
# 部分字段为object类型,大部分指标为float64类型,序号和年份由于是数字的原因,也被认为是整数类型
# 有六个字段有空值情况
#  #   Column          Non-Null Count  Dtype
# ---  ------          --------------  -----
#  0   序号              204 non-null    int64
#  5   年份              204 non-null    int64
#  6   GDP(美元)         204 non-null    float64
#  7   GDP占世界比重        204 non-null    float64
#  10  工业增加值(美元)       194 non-null    float64
#  11  工业增加值占GDP比重     194 non-null    float64
#  12  农林牧渔业增加值(美元)    194 non-null    float64
#  13  农林牧渔业增加值占GDP比重  194 non-null    float64
#  14  服务业增加值(美元)      194 non-null    float64
#  15  服务业增加值占GDP比重    194 non-null    float64

第二部分为数据预处理,主要包括数据类型转换和数据缺失填充

# ----------------------数据预处理-----------------------
# ----------------------修改数据类型-----------------------
# 为避免序号和年份列参与计算,将序号和年份列设置为string类型
dataset["序号"] = dataset["序号"].astype("string")
dataset["年份"] = dataset["年份"].astype("string")# 再次查看一下数据类型,已变更为字符串类型
print(dataset.info())
#  0   序号              204 non-null    string
#  5   年份              204 non-null    string# ----------------------缺失值处理-----------------------
# 关于数据缺失情况,也可以用isna()查看,通过sum(),可以得到各列空值记录数
print(dataset.isna().sum())
# 工业增加值(美元)         10
# 工业增加值占GDP比重       10
# 农林牧渔业增加值(美元)      10
# 农林牧渔业增加值占GDP比重    10
# 服务业增加值(美元)        10
# 服务业增加值占GDP比重      10# 查看哪些行列存在缺失数据情况
print(dataset[dataset.isna().T.any()])
#       序号    国家/地区    洲 是否发达经济体    经济体收入类型    年份           GDP(美元)  GDP占世界比重  \
# 145  146   新喀里多尼亚  大洋洲       否  中等偏上收入经济体  2021 10071351960.00000   0.00010
# 152  153      索马里   非洲       否     低收入经济体  2021  7628000011.00000   0.00010
# 154  155       关岛  大洋洲       否  中等偏上收入经济体  2021  6123000000.00000   0.00010
# 155  156    列支敦士登   欧洲       否     高收入经济体  2020  6113951011.00000   0.00010
# 156  157  法属波利尼西亚  大洋洲       否     高收入经济体  2021  6054676735.00000   0.00010
#       人均GDP  GDP年度增长率  工业增加值(美元)  工业增加值占GDP比重  农林牧渔业增加值(美元)  农林牧渔业增加值占GDP比重  \
# 145   37159   0.02100        NaN          NaN           NaN             NaN
# 152     446   0.04050        NaN          NaN           NaN             NaN
# 154   35904   0.01060        NaN          NaN           NaN             NaN
# 155  157754  -0.04980        NaN          NaN           NaN             NaN
# 156   19914   0.01020        NaN          NaN           NaN             NaN# 将对缺失列进行填充
# 因为前期对数据已经做了处理,数据质量还是挺高的,但这几个小国家的工农业增加值和占比,实在找不到相关数据
# 这些国家有两种分类方式,
# 一种是联合国的分类方式,即发达经济体和发展中经济体
# 一种是世界银行的分类方式:高收入、中等偏上收入、中等偏下收入以及低收入
# 基于同类型国家的经济模式大致是类似的判断,可以按照第二种标准进行数据缺失值填充
# 按经济体收入类型分组统计各指标的平均值
print(dataset.groupby("经济体收入类型").agg(['mean']))
#                      GDP(美元) GDP占世界比重       人均GDP GDP年度增长率          工业增加值(美元)  \
#                         mean     mean        mean     mean               mean
# 经济体收入类型
# 中等偏上收入经济体 423777386707.42188  0.00439 14797.26562  0.06155 164856592593.98306
# 中等偏下收入经济体 164538363330.30188  0.00170  2584.90566  0.03528  49974011480.17308
# 低收入经济体     19149231901.72000  0.00020   694.56000  0.02198   4905145283.08333
# 高收入经济体    962921271208.74194  0.00998 44964.09677  0.04696 229544124425.28815
# 将相关缺失项的国家按照经济体类型的平均值进行缺失值天聪
dataset["工业增加值占GDP比重"] = dataset.groupby("经济体收入类型")["工业增加值占GDP比重"].transform(lambda x: x.fillna(x.mean()))
dataset["农林牧渔业增加值占GDP比重"] = dataset.groupby("经济体收入类型")["农林牧渔业增加值占GDP比重"].apply(lambda x: x.ffill().bfill())
dataset["服务业增加值占GDP比重"] = dataset.groupby("经济体收入类型")["服务业增加值占GDP比重"].apply(lambda x: x.ffill().bfill())
dataset['工业增加值(美元)'] = dataset['GDP(美元)'] * dataset['工业增加值占GDP比重']
dataset['农林牧渔业增加值(美元)'] = dataset['GDP(美元)'] * dataset['农林牧渔业增加值占GDP比重']
dataset['服务业增加值(美元)'] = dataset['GDP(美元)'] * dataset['服务业增加值占GDP比重']
# 再次查看哪些行列缺失数据,发现找不到了
print(dataset[dataset.isna().T.any()])

第三部分为相关性分析

相关性是一种确定数据集中的两个变量是否以任何方式关联的方法。如何衡量相关性?

在数据科学中,我们可以使用r值,也称为Pearson的相关系数。这可测量两个数字序列(即列,列表,序列等)之间的相关程度。

r值是介于-1和1之间的数字。它告诉我们两列是正相关,不相关还是负相关。越接近1,则正相关越强。接近-1时,负相关性越强(即,列越“相反”)。越接近0,相关性越弱。

但是相关性强的列会造成共线性问题:

相关性高的特征放大了噪声的作用,多个特征实际平分了这类特征对模型的贡献,这就导致了模型对于数据的变动更加敏感,泛化误差增大;对于变量的分析造成影响,衡量变量的重要性贡献时候造成困难;越多的变量对于数据的处理计算压力越大。

首先看一下整体数据的相关性

# 输出数据相关性
print(dataset.corr())

将数据拷贝到excel表中进行相关性分析,可以得到许多有趣和不为人知的结论。

3adb23285c0646bda9cc4085b0f8f8c7.png

第四部分删除相关性较高的列

# 查看数据的相关性,并删除相关性较高的列
# 创建相关性矩阵
corr_matrix = dataset.corr().abs()
# 获取矩阵的上三角数据
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))
# 查找相关性系数>0.95的列
to_drop = [column for column in upper.columns if any(upper[column] > 0.95)]
# ['GDP占世界比重', '工业增加值(美元)', '服务业增加值(美元)', '服务业增加值占GDP比重',
# '65岁及以上人口总数', '人均预期寿命-女', '人均预期寿命', '货物进口总额',
# '货物出口总额', '新冠肺炎累计确诊人数', '新冠肺炎累计死亡人数']
# 删除相关列
dataset.drop(to_drop, axis=1, inplace=True)
print(dataset)
# 从26个指标项简化为16个指标项
# GDP(美元)  人均GDP  GDP年度增长率   工业增加值占GDP比重
# 农林牧渔业增加值(美元) 农林牧渔业增加值占GDP比重 人口总数   人口生育率
# 人口年度增长率  65岁及以上人口占总人口比重 人口密度(每平方公里人数)  各国国土面积(平方公里)
# 人均预期寿命-男 货物进出口总额    新冠肺炎新增确诊人数 新冠肺炎新增死亡人数# 查看数据基本统计
print(dataset.describe())
#                    GDP(美元)  GDP占世界比重        人均GDP  GDP年度增长率  \
# count            204.00000 204.00000    204.00000 204.00000
# mean    470696743226.79413   0.00488  19064.52451   0.04544
# std    2127064905351.60278   0.02204  29457.11997   0.05957
# min         63100961.00000   0.00000    221.00000  -0.20740
# 25%       7940374102.75000   0.00010   2362.25000   0.01872
# 50%      28612804150.50000   0.00030   6930.00000   0.04235
# 75%     216967750000.00000   0.00222  23867.25000   0.06943
# max   23315100000000.00000   0.24160 234315.00000   0.31370

第五部分,可视化分析

# ----------------------相关性分析-----------------------
corrmat = dataset.corr()
# 解决下面报错问题:TypeError: vars() argument must have __dict__ attribute
mpl.use('TkAgg')
plt.figure(figsize=(11, 7))
# 解决中文显示乱码,以下两种均可
rcParams['font.family'] = 'SimHei'
# sns.set(font='simhei')
# 解决刻度条负号为框
plt.rcParams['axes.unicode_minus'] = False
# 输出各指标的相关性系数和热力图
with plt.style.context({'axes.labelsize': 8,  # 修改坐标轴标签字体大小'xtick.labelsize': 8,'ytick.labelsize': 8}):  # 修改坐标轴刻度字体大小sns.heatmap(corrmat, xticklabels=corrmat.columns, yticklabels=corrmat.columns, center=0, cmap='RdYlGn_r',annot=True, annot_kws={'size': 8})
plt.tight_layout()
plt.show()

f30395601d99380b6dd236c9c9c51ad5.png

直接通过明细数据做定性分析

# 也可以直接通过明细数据做定性分析
# 通过sns.pairplot可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图
plt.figure(figsize=(14, 10))
sns.pairplot(dataset, kind="scatter", diag_kind='hist',plot_kws=dict(s=25, edgecolor="white", linewidth=2.5))
plt.tight_layout()
plt.show()
picfile='pic1.png'
plt.savefig(picfile)

0d00348e6db7756969813f77e0c4135a.png

首先从直观上看:

1、GDP(美元) 、GDP占世界比重是一对100%强相关性指标

2、人均预期寿命-男、人均预期寿命-女、人均预期寿命是强相关性指标

3、货物进出口总额、货物进口总额、货物出口总额是强相关性指标

4、新冠肺炎新增确诊人数、新冠肺炎新增死亡人数、新冠肺炎累计确诊人数、新冠肺炎累计死亡人数是强相关性指标

其次,其他相关性较强的指标

工业增加值(美元)、服务业增加值(美元)、货物进口总额也是强相关性指标,毕竟工业和服务业越发达,GDP越高,货物出口也是刚刚的

人口总数、65岁及以上人口总数、农林牧渔业增加值(美元),也是强相关性指标,人数是靠农林牧副渔养的,也很正常

最后,异乎寻常的是

人均预期寿命-男、人均预期寿命-女、人均预期寿命和农林牧渔业增加值占GDP比重、人口生育率、65岁及以上人口占总人口比重成反比

可以说明的是,农林牧副渔比重越高就是农业和相对落后的国家,人口老龄化是不存在的,而且越是人均预期寿命越高,生育率越低。

新冠的相关指标和GDP关系不大,反而GDP越高,越不重视新冠疫情。

可以查看不同经济体与各组合指标的关系

# 还可以查看不同经济体与各组合指标的关系
plt.figure(figsize=(14, 10))
sns.pairplot(dataset, kind="scatter", diag_kind='hist', hue="是否发达经济体",plot_kws=dict(s=25, edgecolor="white", linewidth=2.5))
plt.tight_layout()
plt.show()
picfile='pic2.png'
plt.savefig(picfile)

dbe004637e12d9f1a67ca668dea5b843.png

可以查看不同收入经济体与各组合指标的关系

# 还可以查看不同经济体与各组合指标的关系
plt.figure(figsize=(14, 10))
sns.pairplot(dataset, kind="scatter", diag_kind='hist', hue="经济体收入类型",plot_kws=dict(s=25, edgecolor="white", linewidth=2.5))
plt.tight_layout()
plt.show()
picfile='pic3.png'
plt.savefig(picfile)

b0ef4375b31199247b7192b4cc7c2e55.png

欢迎关注python与大数据分析

b1d16b13292746e8afffba6a935b7772.jpeg

这篇关于通过seaborn对全球204个国家和地区进行定量分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684676

相关文章

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(