前些天报名参加了 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)


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]

然后可以进一步看看数据集中缺失值的数目占总数的百分比,结果约为 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


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

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

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

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

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

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

我们看到 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()

看一下剔除空值前后的 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])


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

如果数据的类型都是数字,我们可以考虑把所有的缺失值都填为 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")

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

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


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

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

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

    前些天报名参加了 Kaggle 的 Data Cleaning 5天挑战,5天的任务如下: Day 1: Handling missing values Day 2: Data scaling and ...

  2. 手把手教你用pandas处理缺失值

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 人有悲欢离合,月有阴晴圆缺. 导读 ...

  3. Python数据清洗 | 常用的数据清洗方法

    常用的数据清洗方法 本文首发于微信公众号<Python希望社>,欢迎关注,完整详细的原文链接请点击这里 在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复.是否存在确实 ...

  4. AI比赛-NER:“万创杯”中医药天池大数据竞赛——中药说明书实体识别挑战

    大赛概况 疫情催化下,人工智能正在持续助力中医药传承创新加速发展,其中中医用药知识体系沉淀挖掘是一个基础工作.通过挖掘中药说明书构建中药合理用药的知识图谱,将为中医规范诊疗奠定较好基础.挑战旨在通过抽 ...

  5. 手把手教你如何做建模竞赛(baseline代码讲解)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 1.大赛背景 随着科技发展,银行陆续打造了线上线下.丰富多样的客户触 ...

  6. R语言把dataframe数据转化为tibble格式、查看每个数据列的缺失值个数、使用数据列的均值对数据列的缺失值进行填充

    R语言把dataframe数据转化为tibble格式.查看每个数据列的缺失值个数.使用数据列的均值对数据列的缺失值进行填充 目录

  7. 独家 | 手把手教你处理数据中的缺失值

    作者:Leopold d'Avezac 翻译:廖倩颖 校对:杨毅远 本文长度为1900字,建议阅读8分钟 本文为大家介绍了数据缺失的原因以及缺失值的类型,最后列举了每一种缺失值类型的处理方法以及优缺点 ...

  8. pandas用众数填充缺失值_7步搞定数据清洗-Python数据清洗指南

    脏数据就是在物理上临时存在过,但在逻辑上不存在的数据. 数据清洗是整个数据分析过程的第一步,就像做一道菜之前需要先择菜洗菜一样.数据分析师经常需要花费大量的时间来清洗数据或者转换格式,这个工作甚至会占 ...

  9. python 去除字符串的标点符号 用_7步搞定数据清洗-Python数据清洗指南

    脏数据就是在物理上临时存在过,但在逻辑上不存在的数据. 数据清洗是整个数据分析过程的第一步,就像做一道菜之前需要先择菜洗菜一样. 数据分析师经常需要花费大量的时间来清洗数据或者转换格式,这个工作甚至会 ...

最新文章

  1. python 微服务框架_Python微服务框架NameKo 性能体验
  2. 「我要出轨了」!伯克利的这个AI,可以预测机器人何时将脱离
  3. 基于MFCC系数的欧氏距离测量
  4. NET问答: 对 Linq 中的 Union 和 Concat 的用法困惑
  5. HDU2683——欧拉完全数
  6. Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar
  7. 【消息果留言板 v1.2】支持回复邮件提醒+页面pc端宽度调整+时间友好显示
  8. cleanmymac 4.2_市委刚刚批准:11月1号立即执行! 农业银行存款利率4.2%,1万元存1年,有多少利息?...
  9. 图片管理系统源码_「程序员分享」基于SpringBoot开发的天猫商城源码
  10. GBDT 特征提取(2)
  11. NumPy中文文档搬砖学习笔记(1)
  12. VMware虚拟机如何全屏显示
  13. ECMAScript和JavaScript的区别
  14. DCOS搭建zookeeper集群搭建
  15. 用excel做logistic回归分析_怎样用SPSS做二项Logistic回归分析?结果如何解释?
  16. 【生信分析】一些关于生物信息的常见名字解释
  17. GRE 词汇2(词根)
  18. “牌面”养成记7:宜家的成功不是靠设计?!
  19. 王道操作系统:完整笔记
  20. 用耳机浏览器无声音的解决方法

热门文章

  1. 【阿里云 MVP 月度分享】宋亚奇——应用MaxCompute实现电力设备监测数据的批量特征分析...
  2. 利用丁香园数据生成疫情分布地图(R语言)| 博文精选
  3. 云漫圈 | 什么是字符串匹配算法?
  4. 是时候展现真正的技术了!4道程序员智力题你能对几道| IT巨能唠
  5. ElasticSearch 从安装开始_01
  6. TortoiseGit 下载、安装、配置_入门试炼_01
  7. spring.shardingsphere.rules.sharding.sharding-algorithms.database_inline.props‘ is not valid
  8. VS Code 大佬高效开发插件
  9. 使用PLSQL 远程连接oracle数据库
  10. 企业实战_05_MyCat用户密码加密