数据预处理基础知识(二) | 「掘金日新计划 · 12 月更文挑战」

32 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天

一、本篇笔记重点内容:

  • 数据缺失
  • 缺失值概述
  • 缺失值的简单处理

二、详细知识点介绍

数据缺失

  • 指某一数据集由于信息缺失等主客观因素,导致的字段记录的缺失,遗漏等现象。
  • 存在缺失值的某些字段,信息是不完全的。

数据缺失原因

  • 数据采集过程可能会造成数据缺失
  • 数据通过网络等渠道进行传输时可能出现数据丢失或出错,造成数据缺失
  • 在数据整合过程中也可能引入缺失值

缺失值概述

数据集对于缺失值有不同的表示

取决于数据收集,数据录入流程中的设定

如:字符的缺失值有missing,空格等;数字为999-600

常见的表示缺失值的字符

      null,missing,nan
     
      自定义字符,比如unknown

在常用的分析工具以及Python第三方库中,缺失值的表示通常有固定的格式

image.png

在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

image.png

生成使用missing字符表示缺失值的Series数组example_data1

Example_data1的dtype值为object

example_data1 = pd.Series([1,2,3,'missing',4]) 
example_data1

image.png

使用np.NaN替换example_data1中的缺失值

由于numpy.nan为float型,替换后的数组dtype为浮点型

example_data1.replace('missing',np.NaN)

image.png

缺失值的简单处理

删除法

  • 把数据看作是一个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)

image.png

按行删除

  • 根据专业知识,price是重点关注的属性,不应该被删除
  • 把所有含缺失值的记录删除,这样做保留所有的属性,但样本数据量会减少
  • 在Airbnb数据集中,price属性含有缺失值,删除含有缺失值的数据记录

删除法总结

  • 在含缺失值的数据量占比非常小(<= 5%)的情况下有效
  • 以减少数据来换取信息的完整,丢失大量隐藏在被删除数据中的信息
  • 在缺失数据占比较大,服从非随机分布时,可能导致数据偏离,得出错误的结论
  • 在一些实际场景下,数据的采集成本高且缺失值无法避免,删除方法可能会造成大量的资源浪费