数据集:世界各国1960年至2020年国内生产总值

数据格式:CSV

数据来源:World Bank

实验环境:Jupyter Notebook

网盘链接: 百度网盘-GDP数据集


文章目录

  • 1.1 依赖准备
  • 1.2 数据准备
  • 1.3 数据观察
    • (1) 观察数据形状
    • (2) 观察数据前五行
    • (3) 观察数据列名称列表
    • (4) 观察各列数据类型
    • (5) 观察结果
  • 1.4 数据清洗
    • (1) 去除无用字段
    • (2) 确定缺失值
    • (3) 去除过多缺失的行列
    • (4) 填充缺失值
    • (5) 检验异常值
    • (6) 其余步骤
1.1 依赖准备
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

首先导入相关依赖,pandas/numpy用于数据处理 ,matplotlib.pyplot 用于数据可视化

1.2 数据准备

读入数据 此行代码需要将CSV文件与ipynb文件放置在同一目录下

df = pd.read_csv('GDP.csv',encoding = 'utf-8')

完成数据读取后,数据就以DataFrame类型存储在环境中

1.3 数据观察
(1) 观察数据形状
df.shape
(266, 65)
(2) 观察数据前五行
df.head()
Country Name Country Code Indicator Name Indicator Code 1960 1961 1962 1963
阿鲁巴 ABW GDP(现价美元) NY.GDP.MKTP.CD NA NA NA NA
NA AFE GDP(现价美元) NY.GDP.MKTP.CD 1.93E+10 1.97E+10 2.15E+10 2.57E+10
阿富汗 AFG GDP(现价美元) NY.GDP.MKTP.CD 5.38E+08 5.49E+08 5.47E+08 7.51E+08
NA AFW GDP(现价美元) NY.GDP.MKTP.CD 1.04E+10 1.11E+10 1.19E+10 1.27E+10
安哥拉 AGO GDP(现价美元) NY.GDP.MKTP.CD NA NA NA NA
(3) 观察数据列名称列表
df.columns
Index(['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code','1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968','1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977','1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986','1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995','1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004','2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013','2014', '2015', '2016', '2017', '2018', '2019', '2020'],dtype='object')
(4) 观察各列数据类型
df.dtypes
Country Name       object
Country Code       object
Indicator Name     object
Indicator Code     object
1960              float64...
2016              float64
2017              float64
2018              float64
2019              float64
2020              float64
(5) 观察结果

结合上述代码及运行结果,我们观察到

  • 二维数据 共计266行65列
  • 数据前四列解释了国家与指标
  • 后续列均为年份 数据类型为浮点数(float64)
  • 每行均为一个国家实体
1.4 数据清洗

完成数据观察后,我们对该数据集有了一个整体的印象,之后进行数据清洗。

(1) 去除无用字段

利用loc函数单独切片提取出数据集的两列数据

useless_column = df.loc[:,['Indicator Name','Indicator Code']]

我们观察其前后各三行

index Indicator Name Indicator Code
0 GDP(现价美元) NY.GDP.MKTP.CD
1 GDP(现价美元) NY.GDP.MKTP.CD
2 GDP(现价美元) NY.GDP.MKTP.CD
263 GDP(现价美元) NY.GDP.MKTP.CD
264 GDP(现价美元) NY.GDP.MKTP.CD
265 GDP(现价美元) NY.GDP.MKTP.CD

对于各实体均重复相同的值,无法为我们的数据挖掘提供有差别/有价值的信息,我们直接将整列删除。

print("进行删除前数据集的列数为:"+str(df.shape[1]))
df.drop(labels = 'Indicator Name',axis = 1,inplace = True)
df.drop(labels = 'Indicator Code',axis = 1,inplace = True)
print("完成删除后数据集的列数为:"+str(df.shape[1]))
(2) 确定缺失值

利用函数isnull确定表格内的空值数目

df.isnull().sum()
Country Name        2
Country Code        0
Indicator Name      0
Indicator Code      0
1960              138...
2016               10
2017               10
2018               10
2019               13
2020               24

绘制图像更加直观地观察缺失值数目

x = np.arange(0, df.shape[1])## 生成x轴数据
y = list(df.isnull().sum())## 生成y轴数据
plt.figure(figsize=(16,7))## 设置画布
plt.subplot(1, 2, 1)
## 原图
plt.plot(x,y)## 绘制sin曲线图
plt.title('列缺失值数目')
# plt.savefig('gen_pics/缺失值曲线.png')
plt.xlabel('列索引')## 添加横轴标签plt.subplot(1, 2, 2)
x = np.arange(0, df.shape[1])## 生成x轴数据
y = list(i/df.shape[0] for i in df.isnull().sum())## 生成y轴数据
## 绘制散点1
plt.bar(x,y)plt.xlabel('列索引')## 添加横轴标签
plt.title('列缺失值占比')
plt.show()

发现近乎每一列都存在缺失值 ,甚至在1960-1970期间,GDP数据缺失值占比均超过40%

(3) 去除过多缺失的行列

我们设定缺失值占比高于20%的列 便直接删除

这里删除的数量可能有些太多了 主要是展示一下方法。

for name in df.columns:if (df[name].isnull().sum()/df.shape[0])>0.2:df.drop(labels = name,axis = 1,inplace = True)

当前数据集保留着各国1990-2020年的GDP数据 缺失值占比均低于20%

再次观察列缺失值情况

能够感受到缺失值情况相较之前要良好了许多。

同上 对行做类似的处理 去除那些缺失值过多的国家。

(4) 填充缺失值

线性插值 关键代码如下:

# 对列进行前向线性插值
df = df.interpolate(method='linear', axis=0,inplace=False,limit_direction='forward')# 对列进行后向线性插值
df = df.interpolate(method='linear', axis=0,inplace=False,limit_direction='backward')

注意数据类型的转化 只有数值型才能够进行插值。

(5) 检验异常值

数据的数值分布几乎全部集中在区间(μ-3σ,μ+3σ)内,可以认为超出3σ的部分为异常数据。

for name in df.columns:min_GDP = df[0] < (df[0].mean() - 3*df[0].std())max_GDP = df[0] > (df[0].mean() + 3*df[0].std())GDP_fit = min_GDP | max_GDPprint(df.loc[GDP_fit,0])

也可以通过箱线图更加直观地观察异常值

label= ['南非','阿根廷','津巴布韦']## 定义标签
gdp = (list(b[263]),list(b[9]),list(b[265]))
plt.figure(figsize=(6,4))
plt.boxplot(gdp,labels = label)
plt.title('国民生产总值箱线图')
plt.show()

若发现异常值 对其进行清除或是平滑化处理。

(6) 其余步骤

此数据集质量较高 完整数据清洗还应包括其余步骤:

  • 去除不合理的值,例如某国超过全球总量的GDP数值
  • 去除符号错误,例如GDP字段内填写了文字
  • 去除重复行列, 例如一年的GDP统计了两次
  • 相关性检验,计算各字段间的相关性。
  • 等等

pandas:世界各国GDP数据集数据清洗案例相关推荐

  1. gdp python 变迁动图_19602018年世界各国GDP排名变化Python动图实现

    上一期用MATLAB实现了世界各国GDP排名变化的动态图:1960-2018年世界各国GDP排名变化--Matlab动图实现.今天在这里用Python实现一下. 数据来源: https://data. ...

  2. python爬虫实战1:1980~2020年世界各国GDP数据获取

    以下内容均为个人理解,如有错误,请评论留言,会尽快修改,谢谢!!! 1980~2020年世界各国GDP数据获取 数据爬取的过程 1.单页爬取 2.单页数据提取 爬虫完整代码 结果展示: 数据爬取的过程 ...

  3. 35年来中国及其它世界各国GDP排名

    35年来中国及其它世界各国GDP排名 1970年世界各国(地区)GDP总值排名 01----美国--------1,0255亿美元 13----中国-----------272亿美元 1980年世界各 ...

  4. 2010年底世界各国GDP

    来自The World Factbook <世界概况>       由美国中央情报局(CIA)出版)最权威的报道,2010年底世界各国GDP如下 - World 61,963,429    ...

  5. 世界各国GDP国民生产总值1960-2021

    资料名称:世界各国GDP国民生产总值1960-2021 数据来源:数据来源于世界银行. 数据格式:excel 相关指标:GDP (2015年不变价美元) 国内生产总值(不变本币单位) GDP(现价本币 ...

  6. 世界各国GDP、人均GDPl国民生产总值1960-2021

    世界各国GDP.人均GDPl国民生产总值1960-2021 按不同单位整理,当地货币单位.不变货币单位.美元等 有少量缺失,均为官方缺失 数据来源:世界银行

  7. 世界各国GDP相关面板数据(1960-2019年)

    1.数据来源:世界银行 2.时间跨度:1960-2019年 3.区域范围:全球 4.指标说明: 该数据包含以下指标: 1.世界各国1960-2019年GDP 2.世界各国1960-2019年GDP增长 ...

  8. 2014年最新世界各国面积排名(172个国家)

    2014年最新世界各国面积排名国家国土面积 (万平方公里) 1 俄罗斯 1707.5 2 加拿大 997.1 3 中国 960.1 4 美国 936.4 5 巴西 854.7 6 澳大利亚 774.1 ...

  9. 世界各国劳动力总数数据集1990-2019年

    数据集名称:世界各国劳动力总数数据集 时间范围:1990-2019年 数据来源:根据国际劳工组织,采用世界银行的人口估计值 相关说明:劳动力总数包括所有年满 15 周岁.符合国际劳工组织对从事经济活动 ...

最新文章

  1. Oracle11g与Oracle11gxe有什么区别
  2. docker可以把应用及其相关的_Docker相关命令应用
  3. C语言基础-数据类型
  4. 寒冷的高纬度——我的梦开始的地方
  5. 如何选择你所需的×××产品
  6. es5.0 安装head插件
  7. 从Linus Torvalds一封发飙的电邮开始谈设备树究竟是棵什么树?
  8. 背包——变向背包(hdu2546,1114,1203,2189)
  9. jQuery学习笔记(五)
  10. devc++鼠标变成了光标_游戏鼠标选购避坑指南 教你如何轻松选择适合自己的鼠标...
  11. 你可能不知道的字符比较中的“秘密”
  12. TCP 三次握手和四次挥手详解
  13. webstorm简单介绍,webstrom基本使用
  14. 黑马程序员_面向对象的三大特征
  15. 软件工程2第一次作业
  16. 计算机备份u盘,如何备份电脑系统到u盘
  17. CAS配置数据库进行用户验证
  18. 必学:入行电商产品经理必备知识,原来这么简单
  19. HTML邮件样式不生效,邮件Html踩坑
  20. Python(arcpy) 批量shp转raster

热门文章

  1. RIDE 图标点击没反应
  2. 脑图工具MindNode附属节点是什么意思 图解
  3. php表格制作4行两列的表格,excel表格怎么插行和列?
  4. Word论文写作公式居中、编号右对齐
  5. html和css制作的网页设计期末大作业【小米购物商城网站制作】
  6. qt编写网易云界面(3)----列表框的实现
  7. 用python让excel 飞起来(数据处理与分析操作)
  8. ZeroC Ice 暂记
  9. Windows下架设自己的DNS服务器
  10. matlab文字转语音,数字语音处理及MATLAB仿真.ppt