开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天
一、本篇笔记重点内容:
- 数据缺失
- 缺失值概述
- 缺失值的简单处理
二、详细知识点介绍
数据缺失
- 指某一数据集由于信息缺失等主客观因素,导致的字段记录的缺失,遗漏等现象。
- 存在缺失值的某些字段,信息是不完全的。
数据缺失原因
- 数据采集过程可能会造成数据缺失
- 数据通过网络等渠道进行传输时可能出现数据丢失或出错,造成数据缺失
- 在数据整合过程中也可能引入缺失值
缺失值概述
数据集对于缺失值有不同的表示
取决于数据收集,数据录入流程中的设定
如:字符的缺失值有missing,空格等;数字为999,-600等
常见的表示缺失值的字符
null,missing,nan
自定义字符,比如unknown
在常用的分析工具以及Python第三方库中,缺失值的表示通常有固定的格式
在Python语言的Numpy库的缺失值:
表示:numpy.nan/numpy.NaN
类型:浮点(float)型
import numpy as np
print ‘np.nan 的属性为: ' + str(type(np.nan))
print ‘np.NaN 的属性为: ' + str(type(np.NaN))
np.nan 的属性为: <type 'float’>
np.NaN 的属性为: <type 'float'>
在Python语言的Pandas库中,缺失值默认使用numpy.nan表示
Pandas库可以用其它字符来代替nan,如missing,NA等
下图代码片段生成含有默认缺失值的Series数组example_data
import pandas as pd
import numpy as np
example_data = pd.Series([1,2,3,np.nan,4])
example_data
生成使用missing字符表示缺失值的Series数组example_data1
Example_data1的dtype值为object
example_data1 = pd.Series([1,2,3,'missing',4])
example_data1
使用np.NaN替换example_data1中的缺失值
由于numpy.nan为float型,替换后的数组dtype为浮点型
example_data1.replace('missing',np.NaN)
缺失值的简单处理
删除法
- 把数据看作是一个NxD的二维矩阵,N代表数据记录的数量,D代表属性的数量
- 如果缺失值数量较少,样本数据足够大,删除缺失数据是最方便的处理方法
使用Pandas库中的read_csv函数读入Airbnb数据集
import pandas as pd
import numpy as
data = pd.read_csv('calendar.csv', header=0,
names=['listing_id','date','available','price'])
data.tail(15)
按列删除
把含有缺失值的整列数据删除,也就是丢弃数据集中的若干属性
在Airbnb数据集中,按照列删除的方式,price属性需要删除
list_del_data = data.drop('price',axis=1, inplace=False)
list_del_data.tail(15)
按行删除
- 根据专业知识,price是重点关注的属性,不应该被删除
- 把所有含缺失值的记录删除,这样做保留所有的属性,但样本数据量会减少
- 在Airbnb数据集中,price属性含有缺失值,删除含有缺失值的数据记录
删除法总结
- 在含缺失值的数据量占比非常小(<= 5%)的情况下有效
- 以减少数据来换取信息的完整,丢失大量隐藏在被删除数据中的信息
- 在缺失数据占比较大,服从非随机分布时,可能导致数据偏离,得出错误的结论
- 在一些实际场景下,数据的采集成本高且缺失值无法避免,删除方法可能会造成大量的资源浪费