本节书摘来自华章计算机《数据科学:R语言实现》一书中的第3章,第3.11节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.11 检测缺失数据
缺失数据背后有许多原因。例如,可能是由于录入或者数据处理过程中的瑕疵导致的。然而,如果数据分析过程使用了缺失数据,分析的结果可能有误导性。因此,在做进一步分析之前,检测缺失数据尤为重要。
准备工作
按照3.3节“转换数据类型”教程,把导入数据的每个属性转换成合适的数据类型。同时按照3.2节“重命名数据变量”中的步骤,命名employees和salaries数据集的列名。
实现步骤
执行下列步骤,检测缺失数据。
1.首先,我们把to_date属性设置一个超过2100-01-01的日期:
2.然后,把超过2100-01-01的日期变成缺失值:
3.接着,我们可以使用函数is.na找出哪一行包含缺失值:
4.我们也可以使用函数sum对to_date中的缺失值计数:
5.并且,我们可以计算缺失值的比例:
6.如果你想知道每一列中的缺失值比例,我们可以使用函数sapply:
7.我们可以安装加载Amelia程序包:
8.使用函数missmap绘制缺失值地图:
你会看到以下图形,如图1所示。
运行原理
在R中,缺失值经常使用NA标记出来,意思是不适用(not available)。大部分函数(例如mean或sum)在遇到数据集中的NA值时,会输出NA。尽管我们可以指定一个参数,例如na.rm,来移除NA的影响,但是最好还是在数据集中估计或移除缺失值,以避免缺失值带来的深远影响。
在本教程中,我们首先找出2100-01-01之后的数据记录。由于一个人的工资不可能在2100-01-01之后支付,我们可以把这些日期值看成是录入或者系统错误而导致的。因此,我们可以首先把这些值指定成缺失值(用NA表示)。然后,我们可以使用内置函数,搜索数据内部的缺失值。
为了找到数据集中的缺失值,我们首先对所有NA值个数加和,除以每个属性里的数值个数,然后借助sapply计算所有属性中的缺失值。
并且,为了使用表格展示计算结果,我们可以使用Amelia程序包,在一个图中绘制每个属性的缺失值地图。缺失值的可视化可以让用户更好地理解每个数据集的缺失比例。从图1中我们可以看出,1985包含的缺失值最多。
更多技能
对于缺失值处理,我们介绍了使用Amelia来可视化缺失值。除了在控制台输入命令,我们也可以使用Amelia的交互式GUI,AmeliaView。
要运行AmeliaView,只需在R控制台键入AmeliaView():
你会看到下列窗口,如图2所示。