竞赛数据清洗缺失值_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…

gpedit msc组策略面板 win10在哪里_Win10家庭版找不到本地组策略gpedit.msc解决办法...

在Win10的各个版本中,其中家庭版默认是不提供组策略功能的,不提供不是说没有这个功能,而是系统默认对其进行了限制,需要使用该功能可以手动添加,请参考以下步骤:本地组策略编辑器是一个 Microsoft 管理控制…

在计算机管理中创建不同的用户,为什么在计算机管理员里创建密码密码总是不符合要求...

忘记管理员密码怎么办之第一招:删除sam文件对sp3以前的工作组模式windows2000,删除winntsystem32config文件夹下的sam文件(无后缀)之后,本机所有用户丢失,用administrator登录,密码空即可忘记管理员密码怎么办之第二招:O&O软件…

xsslabs靶机解题_web 攻击靶机解题过程

sql注入靶机攻击过程请参考https://pentesterlab.com/exercises/from_sqli_to_shell/coursehttp://www.sohu.com/a/126855490_472906xss靶机的攻击过程请参考https://pentesterlab.com/exercises/xss_and_mysql_file/coursenikto –h 192.168.1.129sqlmap -u "http://192.…

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

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

jenkins组权限_JENKINS针对不同项目组对用户进行权限分配-阿里云开发者社区

权限需求因JENKINS上存有de(开发)、te(测试)、re(预发布)等三个不同环境的项目,同时因为项目需求,需要对不同的开发及测试人员配置不同的jenkins权限,即以项目为单位,对不同人员进行不同权限配置,要求如下:…

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

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

centos7限制cpu使用_Centos7 - 使用cgroups限制进程资源

cgroups简介控制组(cgroups)是一个linux内核特性,它允许你指定内核应该如何给一个进程组分配特定的资源。你可以用cgroups指定在某一个组中的进程使用多少cpu时间、系统内存、网络带宽、或者这些资源的组合。(选自马哥教育的微信公众平台)cgroups使用# 下载一个可以…

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

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

清华大学python镜像_使用清华开源镜像安装tensorflow

谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)转自:http://blog.csdn.net/kuerjinjin/article/details/23563059 从12年那会儿开始获取源码和构建chromium项目都是按照那时候的官方要求用w ...Struts2的Action中如何操作作用域对象得到作用域对象…

天津理工计算机通信工程学院,2018年天津理工大学计算机与通信工程学院811信号与系统考研仿真模拟五套题...

一、解答题1. 绘出下列系统的仿真框图:(1);(2)。【答案】(1)取中间变量q(t),使激励信号e(t)与中间变量q(t)的关系,如图1所示。图1将①代入原方程,得对比等式两边,可知从而得到系统仿真框图&…

调用外部程序处理文件_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…

fpgrowth算法实战 mlib_【spark】41.Spark Mlib:FPGrowth算法

简介FP-Growth算法是韩嘉炜等人在2000年提出的关联分析算法,它采取如下分治策略:将提供频繁项集的数据库压缩到一棵频繁模式树(FP-tree),但仍保留项集关联信息。在算法中使用了一种称为频繁模式树(Frequent Pattern Tree)的数据结构。FP-tree…

《管理系统中计算机应用》上机题,《管理系统中计算机应用》上机试题

管理系统中计算机应用《管理系统中计算机应用》上机试题一、数据表操作题1、新建数据表jk.dbf,表结构如下:课程编号(c,8),课程名称(C,10),考试日期(D),考核(L),成绩(N,6,1)2、为数据表增加两条记录1011121 数学 2005年…

父子组建传值_浅谈Vue父子组件和非父子组件传值问题

本文介绍了浅谈Vue父子组件和非父子组件传值问题,分享给大家,具体如下:1.如何创建组件1.新建一个组件,如:在goods文件夹下新建goodsList.vuegoodsList组件export default {data() {return{}},created() {},methods: {}…