竞赛数据清洗缺失值_Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值

f83a47c826479b2bbc4048b92c0e4b6b.png

前些天报名参加了 Kaggle 的 Data Cleaning 5天挑战,5天的任务如下:

  • Day 1: Handling missing values
  • Day 2: Data scaling and normalization
  • Day 3: Cleaning and parsing dates
  • Day 4: Fixing encoding errors (no more messed up text fields!)
  • Day 5: Fixing inconsistent data entry & spelling errors

今天是第一天,任务是处理数据集中的缺失值。活动的主持人 Rachael Tatman 给出的操作步骤如下:

  1. Take a first look at the data
  2. See how many missing data points we have
  3. Figure out why the data is missing
  4. Drop missing values
  5. Filling in missing values

我们一步一步来进行操作~


1、观察数据

首先我们在 notebook 中加载需要清理的数据集,数据集的位置可以在本地也可以在服务器上。今天官方例子中的数据集是关于美国橄榄球比赛的,然后我们动手去做的是关于旧金山建筑许可证的数据集。

引入 pandas 和 numpy 包,从给出的路径读数据集,

# modules we'll use
import pandas as pd
import numpy as np# read in all our data
sf_permits = pd.read_csv("../input/building-permit-applications-data/Building_Permits.csv")# set seed for reproducibility
np.random.seed(0) 

然后用 sample(10) 方法随机抽取数据集中的 10 条数据,结果中有很多数据格被标记了 "NaN" ,这些就是我们需要处理的缺失值。

sf_permits.sample(10)

7b33eab48452510809260b9488466a20.png

2、观察缺失值的数量

现在我们知道了数据集中存在缺失值,再来看看每一个 column 下缺失值的具体数量(由于 column 过多我们只选了前 15 列)。

# get the number of missing data points per column
missing_values_count = sf_permits.isnull().sum()# look at the # of missing points in the first ten columns
missing_values_count[0:15]

06e37ac952fad6786b68b8d1bea6c687.png

然后可以进一步看看数据集中缺失值的数目占总数的百分比,结果约为 26.26%,四分之一的数据都缺失了!

# how many total missing values do we have?
total_cells = np.product(sf_permits.shape)
total_missing = missing_values_count.sum()# percent of data that is missing
(total_missing/total_cells) * 100

fb858e9ab68dafe81de1a1fea78fe079.png

3、分析出现缺失值的原因

这一部分的重点之一是我们对数据的直觉,Rachael 所用的说法是 "data intuition",也就是说我们需要搞清楚我们面对的数据集为什么如此,以及对我们后续的数据分析会有什么样的影响。由于缺乏经验,入门者这部分可能比较困扰。我们需要考虑的问题之一是:

某个数据的缺失是因为它没有被记录还是根本不存在?

如果一个数据值缺失是因为它根本不存在,那么我们就没有必要去猜它可能的值,我们需要做的就是让它继续为 NaN;如果一个数据值缺失是因为没有被记录,我们就应该基于与它同行同列的其他值,来猜想它的可能值。

拿当前的数据集做例子,我们来看一下 Street Number Suffix 和 Zipcode 的缺失值:

missing_values_count = sf_permits.isnull().sum()
missing_values_count[['Street Number Suffix', 'Zipcode']]

f0a9f657a883b4c2d581f6a69c946b4f.png

我们看到 Street Number Suffix 下有大量缺失值,由于它对地址来说并不是一个普遍存在的数据,所以我猜想它的缺失值根本不存在;有少量的 Zipcode 数据缺失,由于每个地址的邮编一定存在,所以它应该是没有被记录。


4、剔除缺失值

如果你实在急于做分析,可以采取的方案之一就是剔除掉任何包含缺失值的行或列。但这种方法是并不推荐,要想得到更好的分析结果,还是要先合理地处理缺失值。

如果确定想要剔除掉含有缺失值的数据行,可以直接使用 pandas 的 dropna() 方法:

# remove all the rows that contain a missing value
sf_permits.dropna()

但是我们得到的结果是 0 rows × 43 columns,因为每一行都存在缺失值!

再剔除含有缺失值的数据列:

# remove all columns with at least one missing value
columns_with_na_dropped = sf_permits.dropna(axis=1)
columns_with_na_dropped.head()

83e3b9950ca31d5db5d4328d7089dadd.png

看一下剔除空值前后的 column 数目对比:

# just how much data did we lose?
print("Columns in original dataset: %d n" % sf_permits.shape[1])
print("Columns with na's dropped: %d" % columns_with_na_dropped.shape[1])

7372b0225bdbcf4834332980640db224.png

5、自动补全缺失值

除了直接 drop 掉含有缺失值的行或列,另一个方案是去补全缺失的值。这部分我们先截取一部分 column 的数据进行处理,便于观察。

# get a small subset of the sf_permits dataset
subset_sf_permits = sf_permits.loc[:,"Street Number Suffix":"Issued Date"].head()
subset_sf_permits

aac3deca9769eda116d681e84dddc2fe.png

如果数据的类型都是数字,我们可以考虑把所有的缺失值都填为 0:

# replace all NA's with 0
subset_sf_permits.fillna(0)

但该数据集中,有 string 型的数据,还有另一种选择就是将空值置为与它相邻的下一行对应的数据,没有下一行数据就置为 0:

# comes directly after it and then 
subset_sf_permits.fillna(method = "bfill", axis=0).fillna("0")

ad0c4bc6c4902104e98b36716ff277b6.png

处理不同类型的数据集,需要采取不同的方法,还可以用相应 column 的平均值来补全该列的缺失值等。

这就是 5 Day Challenge 第一天的内容,总地来说是非常基础的清洗数据方法,完毕~


欢迎大家关注微信公众号【数据池塘】:

160f6db55835bcefe7ea1809bbd0b6ef.png

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

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

相关文章

html5中行内样式写法,react怎么写行内样式?

react怎么写行内样式?下面本篇文章给大家介绍一下react 行内样式几种写法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。react 行内样式几种写法法一这是评论列表组件1法二const title{color:"red",fontSize:3…

程序左上角的字_微信内测7.0.7新版本,小程序迎来大改动!

最近几个月来,微信就跟打了鸡血一样不断更新了多个版本上线多个新功能。此前7月末,微信安卓7.0.6带来了将收藏笔记,文件预览等页面设为浮窗的功能,目前最多支持5个文档或笔记设为浮窗。这不,距离微信7.0.6 for Android…

html 跑步比赛小游戏,疯狂趣味跑步竞赛3D

疯狂趣味跑步竞赛3D是一款跑酷类型的休闲游戏,游戏在整体画面上搭配了最新的技术,使得游戏画面看起来非常华丽,人物的建模也很可爱。玩家在游戏中可以在各种风格的跑道上进行比赛,还可以在线跟别的玩家进行匹配。喜欢这款游戏的快…

得到进程id_搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?

守护进程概念:守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。周期性的执行某种任务或等待处理某些发生的事件。Linux系统有很多守护进程,大多数服务都是用守护进程实现的。比如:像我们的tftp&#xf…

w7计算机的收藏夹里弄出桌面,Win7电脑桌面的便签怎么弄出来?

原标题:Win7电脑桌面的便签怎么弄出来?可能很多人都不知道,作为常用的一款电脑桌面操作系统,Windows 7上除了有Txt记事本和Office办公文档外,还有便笺小工具呢!这款便笺小工具虽然很不起眼,但是…

native html5 区别,H5与Native优劣对比

即将启动爱奇艺商城(mall.iqiyi.com)移动端的native化。项目开始之前当然要梳理下为什么做native,究竟H5跟native比有什么劣势,而H5又为什么占比那么高并且有“Html5才是未来”的说法呢。下面简单理下对比。H5,即Html5,指第5代HTM…

html制作圆盘时钟,jquery+html5制作超酷的圆盘时钟表

自己封装的一个用HTML5jQuery写的时钟表代码:超酷数码钟表//引用的是在线jquery地址,如果不行请自行下载切换(function($){$.fn.drawClock function(options){var mainId $(this);//设置默认参数var defaultOptions {width: 300px,height: 300px,marg…

调用外部程序处理文件_Python使用内置方法、模块调用外部命令

导读Python内置调用外部命令:os.systemos.popenos.popen2os.popen3os.popen4commands模块subprocess模块在Python3中,将os.popen2、os.popen3、os.popen4、commands等模块方法移除所以不用花精力了解,可以绕过了os.system方法os.system("…

计算机软件类ui工资多少,ui设计师工资一般多少

ui设计师月薪大概多少,UI设计师的收入现处于中等水平,一般月薪5000~7000元,资深设计师的收入可上升至7000~10000元。ui设计师月薪大概多少,ui设计师工资有多少?,不清楚ui设计师工资有多少的伙伴可以看看。U…

大学计算机课第二章内容总结,第四周市政系《大学计算机基础》课程总结

本周大一的新生终于在漫长的等待、报到、军训之后开始了大学课程的学习,在《大学计算机基础》课程的学习中,其实只是需要大学确立一种新的学习思想:计算机是人类智慧的结晶,它给予我们这样一种工具,通过对它的使用&…

在maven项目中打开jsp_零基础在intellij中打开一个项目复制粘贴内容即可运行的java拼图...

我刚学java语言,在学习java简单的拼图游戏时发现网上有些居然要导入调试,而且网上有些说的调试方法不明不白,所以我就分享了我的可直接复制在新项目中的源码,如果要直接要搞好的话就可以用结尾的分享提取链接进行百度网盘获取(该项…

计算机考试报名无法弹出支付界面,教资报名支付页面不弹出怎么办 2021教师资格证报名入口网址...

2021教师资格证报名入口是中小学教师资格考试网站,教师资格证报名时间是1月14-17日,请大家请及时登陆教师资格证报名官网报名以防错过考试。点击进入:2021年教师资格考试报名入口教师资格证报名缴费进不了支付页面的话原因可能有以下几点&…

gcn在图像上的应用_GCN总结 - nxf_rabbit75 - 博客园

一、GCN简介GNN模型主要研究图节点的表示(Graph Embedding),图边结构预测任务和图的分类问题,后两个任务也是基于Graph Embedding展开的。目前论文重点研究网络的可扩展性、动态性、加深网络。谱卷积有理论支持,但有时候会受到拉普拉斯算子的…

mysql源码_MySql轻松入门系列——第一站 从源码角度轻松认识mysql整体框架图

一:背景1. 讲故事最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看来在国内大环境下是不怎么流行了,看样子我再写sqlserver是不可能再写了&#x…

测试图片色域软件,显示器色域检测

色域是颜色的一种编码,也是某一个规定的色彩空间或者输出装置呈现出来的一个颜色范围,展示给用户看到的颜色,使用显示器色域检测工具,可以检测到电脑显示器的色域情况,并且提供具体的参数,这款软件对于需要…

计算机专业研究生应该如何规划,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼二、关键一步——院校选择我把各位同学的院校选择阶段分为以上几个阶段,因为考研这一年中,很多人的目标院校并不是固定不变的,而是随着不同阶段而改变的。学长我在大三下学期这一时间段内也多次更…

哈尔滨大学计算机和金融,山东153所大学最新排名,46所公办本科,看看有你喜欢的吗...

作为人口大省的山东,也是我国有名的教育大省,不但经济发达,地理位置优越,教育资源也是比较丰富的,山东省有153所大学,在大学数量上还是比较多的。但是山东省在高端教育上一直被吐槽,全国知名大学…

dubbo protocol port 消费者端_企业级 SpringBoot 与 Dubbo 的并用

点击上方“匠心零度”,选择“设为星标”做积极的人,而不是积极废人作者:SimpleWucnblogs.com/SimpleWu/p/10833555.htmlSpringBoot 和 Dubbo 又能碰撞出什么火花呢?我们来看看企业级 SpringBoot 与 Dubbo 的并用。版本:Springboot…

心理学博士vs计算机博士,零基础跨专业考心理学博士,可以给我一些建议吗?...

5星优质答主关注有用62020-12-19回答了:关于跨专业考心理学博士的问题,我曾经也有探索过,说一些我的经历,希望能给你带来一些些帮助。我知道的跨专业考心理学博士最知名的例子就是岳晓东教授,他的经历你可以参考一下&a…

在react项目中编写css,更好的在react项目中写css代码--emotion

简介:emotion是一个JavaScript库,使用emotion可以用写js的方式写css代码。在react中安装emotion后,可以很方便进行css的封装,复用。使用emotion后,浏览器渲染出来的标签是会加上一个css开头的标识。如下:截…