为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 数据清洗(Data Cleaning): 对数据进行重新审查和校验的过程 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 2022 年 6 月 29 日 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 1 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1 数据类型与转换的介绍 2 缺失值的探查与处理 3 异常值的定义与 boxplot 函数 4 错误数据的处理 5 插补办法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 2 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 为什么选择“数据清洗”作为主题? • 数据清洗是传统数据分析中非常重要的步骤: 填补、略去缺 失值, 统一变量的计量单位, 改变数据类型方便运算, 选择合 适的方式导入数据等对于我们的分析至关重要。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 3 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 为什么选择“数据清洗”作为主题? • 数据清洗是传统数据分析中非常重要的步骤: 填补、略去缺 失值, 统一变量的计量单位, 改变数据类型方便运算, 选择合 适的方式导入数据等对于我们的分析至关重要。 • 在我们所将要进行的 project 中, 如何选择合适格式导入数 据, 设置数据集以及对于不同变量的处理 (连续型和离散型 的相互转化, 归一化处理) 都非常重要。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 3 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1 数据类型与转换的介绍 2 缺失值的探查与处理 3 异常值的定义与 boxplot 函数 4 错误数据的处理 5 插补办法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 4 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 基本的数据类型与转换的介绍 1) 实数数值型变量 (numeric),例子如下: 1 2 3 a <- 1.5 class ( a ) 输 出 : [ 1 ] " numeric " 2) 整数数值型变量 (integer),例子如下: 1 2 3 b <-1 L class ( b ) 输 出 : [ 1 ] " integer " 3) 字符型变量 (character),也就是字符串类 (string),例子如下: 1 2 3 c <- ’ kiss ’ class ( c ) 输 出 : [ 1 ] " character " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 5 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 4) 因子型变量 (factor),简单的分类型的变量,例子如下: 1 2 3 4 5 6 7 8 9 10 11 ‘ ‘ ‘{ r } a <-c ( ’ 男 ’ , ’ 女 ’ , ’ 男 ’ , ’ 女 ’ , ’ 男 ’) ( a <- factor ( a )) levels ( a ) class ( a ) ‘‘‘ 输出 : [1] 男 女 男 女 男 Levels : 男 女 [1] " 男 " " 女 " [1] " factor " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 6 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 5) 顺序型变量 (order), 考虑偏序关系的分类型变量,例子如下: 1 2 3 4 5 6 7 8 ‘ ‘ ‘{ r } score <-c ( ’B ’ , ’C ’ , ’A ’ , ’D ’ , ’A ’ , ’B ’) ( score _ o <- ordered ( score , levels = c ( ’D ’ , ’C ’ , ’B ’ , ’A ’ ))) ‘‘‘ 输出 : [1] B C A D A B Levels : D < C < B < A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 7 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 特别地,我们关心如下“特殊值”类型: 1)NA(not available),意味着缺失值,需要占用位置,相关计算如 下: 1 2 3 4 5 6 7 8 9 10 11 12 13 ‘ ‘ ‘{ r } sum ( c (1 ,2 , NA )) median ( c ( NA ,1 ,2 ,3)) median ( c ( NA ,1 ,2 ,3) , na . rm = T ) length ( c ( NA ,1 ,3)) 3== NA NA == NA TRUE | NA ‘‘‘ 输出 : [1] NA [1] NA [1] 2 [1] 3 [1] NA [1] NA [1] TRUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 8 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 2)NULL,意味着数学上的空集。 1 2 3 4 5 6 7 8 {r} length ( c (1 ,2 , NULL ,4)) sum (1 ,2 ,3 , NULL ) x <- NULL ; c (x ,2) 输出 : [1] 3 [1] 6 [1] 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 9 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 3)Inf,意味着无穷。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 {r} pi / 0 2 * Inf Inf -1000 3 < - Inf Inf == Inf Inf + Inf 输出 : [1] Inf [1] Inf [1] Inf [1] FALSE [1] TRUE [1] Inf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 10 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 4)NaN(not a number),表示该值未知,但可以肯定不是数值。 1 2 3 4 {r} NaN +1 exp ( NaN ) 均无输出 。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 11 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 数据的读入与转化 一般情况下, 我们所读入的数据是来自 excel 的 csv 文件。 用的数据导入函数为 read.csv, 其有变体 (read.csv2,read.delim 等) 对于 read.csv, 有以下参数需要注意: file 输入所读的文件地址名。 header 是否读入数据第一行作为列名。 col.names 可以手动输入向量作为得到的 dataframe 的列名。 na.string 读入怎样的字符串时可以考虑为 NA。 colClasses 手动输入向量将对应的列规定为给定的变量类型。 stringAsFactors 若为 TRUE, 则将所有的字符型向量 (character vectors) 转化为因子型向量 (factor vectors)。 sep 规定读入数据的分隔符。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 12 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1 数据类型与转换的介绍 2 缺失值的探查与处理 3 异常值的定义与 boxplot 函数 4 错误数据的处理 5 插补办法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 13 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 下面介绍缺失值的探查与处理。 1. 对于数据集中谬误与缺失的分析, 在 R 中缺失值我们主要考虑 NA(not available) 的处理。 1) 对于传统的变量,is.na 函数可以用于判断是否存在缺失值,这 函数将 NA 类判别为真,其他判为假。下面是一个例子: 1 2 3 4 5 6 7 ‘ ‘ ‘{ r } is . na ( c (1 ,2 ,3)) is . na ( c (3 , NA ,2)) ‘‘‘ 输出 : [1] FALSE FALSE FALSE [1] FALSE TRUE FALSE 为了探查别的特殊值, 同样有函数 is.finite() 去检查是否为 Inf, 用法完全一致,不过在 R 中使用较少。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 14 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 2) 对于 Dataframe 和 matrix, 一个常用的函数为 complete.cases(), 若每行无缺失, 则返回 TRUE, 否则返回 FALSE, 由于 TRUE 代表 1,FALSE 为 0, 利用 complete.cases() 我 们可以了解缺失值数据在数据集中一定的性质。 注意:下一页中的代码样例只能在 console 或 script 里运行,而 不能在 Rmarkdown 里运行。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 15 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ‘ ‘ ‘{ r } gender <-c ( ’f ’ , ’m ’ , ’m ’ , ’f ’ ,NA , ’m ’) mark <-c (100 ,98 , NA ,22 ,54 ,98) name <-c ( ’ kev ’ , ’ Sab ’ ,NA , ’ KK ’ , ’ BM ’ , NA ) stu <- data . frame ( gender , mark , name ) stu [ ! complete . cases ( stu ) ,] # 所 有 含 有 缺 失 值 的 行 mean ( complete . cases ( stu )) # 完 整 实 例 的 占 比 sum ( ! complete . cases ( stu )) # 不 完 整 实 例 的 个 数 ‘‘‘ 输出 : gender mark name 3 m NA <NA > 5 <NA > 54 BM 6 m 98 <NA > ( 所 有 含 有 缺 失 值 的 行 ) [1] 0 . 5 ( 完 整 实 例 占 比 ) [1] 3 ( 不 完 整 实 例 个 数 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 16 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 3) 缺失数据的处理 这里只简单介绍一种方法,即行删除法—---将所有含有缺失值的 实例的行直接删去。该方法利用 na.omit() 函数,实例如下(基 于上面代码的续写):new.stu<-na.omit(stu). 执行此句之后,缺失值实例已经被移去,并生成另一个新的实例 align 变量 new.stu,在 R 的 Data 窗口打开变量,可以看到它们 的对比: 图 2: 新变量 new.stu 图 1: 原变量 stu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 17 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1 数据类型与转换的介绍 2 缺失值的探查与处理 3 异常值的定义与 boxplot 函数 4 错误数据的处理 5 插补办法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 18 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 对于异常值 (outlier) 的定义非常多,比较常用的是:一个数据集 中的异常值是与对应变量的其余对象取值明显不符合的数值。需 要注意的是异常值并不等同于错误,但在实际操作中, 异常值需 要进行测查,在统计决策中进行考量。 在基础的 r 包中 boxplot.stats() 中的成员 out 可以用箱线图方法 帮助我们列出异常值 (outlier)(需要指出的是,这只是一种辅助 方法,现实问题应该有现实考量): 1 2 3 4 5 6 {r} x <-c (1:10 ,20 ,30) boxplot . stats ( x ) $ out # 20 30 被 识 别 为 异 常 值 输出 : [1] 20 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 19 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1 数据类型与转换的介绍 2 缺失值的探查与处理 3 异常值的定义与 boxplot 函数 4 错误数据的处理 5 插补办法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 20 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1) 在实际的数据集中,有时会出现明显的错误的与事实不符合 的数据,例如:一个人的体重、年龄不可能是负数等。这里数据 的处理可以考虑 editrules 包中的 editset 函数,使用实例如下 (从这里开始的代码都要在 console 或 script 中运行): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 stu1 <- data . frame ( age = c (20 ,21 ,34 ,150 ,88 ,92) , mark = c (100 , -8 ,97 ,61 ,44 ,32)) library ( ’ editrules ’) ( E <- editset ( c ( ’age >=0 ’ , ’age <=100 ’ , ’ mark >=0 ’ ))) # 规 定 范 围 violatedEdits (E , stu1 ) # 探 查 错 误 数 值 输 出 : record num1 num2 num3 1 FALSE FALSE FALSE 2 FALSE FALSE TRUE 3 FALSE FALSE FALSE 4 FALSE TRUE FALSE 5 FALSE FALSE FALSE 6 FALSE FALSE FALSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 21 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 错误探查的规则设定问题:有时候, 数据集中存在明显错误的数 据, 但由于我们对于数据本身的性质并不熟悉, 无法直接给出合 理的数据的取值范围从而测查错误数据, 这时可以考虑通过对已 有数据的分析, 设定规则使得最少的数据不符合规则, 这一理论 基于的假设是:错误在数据中发生的机会很小, 并且如果发生那 么会是随机的。当我们对于设定 editerules 没有头绪时, 可以考 虑使用 localizeErrors 函数进行分析。 1 2 3 4 5 6 7 8 {r} violateEdits (E , stu1 [ c (2 ,4) ,]) # 2 ,4 号 数 据 各 出 现 了 一 个 错 误 , 一 个 在 age 上 , 一 个 是 mark 上 le <- localizeErrors (E , stu1 [ c (2 ,4) ,] , method = ’ mip ’) le $ adapt #显示最小的需要满足的数据的取值范围 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 22 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 2) 在数据记录中, 一类非常重要的常见的错误是单位转换的错 误, 譬如第一次课程中对于日摄入饮料的调查 (L 和 mL) 这类错 误可以通过编写函数将单位量纲统一化处理。 3) 在人工抄录的数据中, 有时会出现记录错误, 并且这些错误有 时是非常明显的 (譬如变量 z 是由变量 x、y 计算得到的, 但记录 中的 z 却不符合已有的 x、y 的计算结果, 这类关系如:总 GDP、 劳动人口数、人均 GDP 等)。 4) 约束条件下的错误数值有时候对于某些问题, 例如线性规划, 问题中的变量是有一定约束的, 这意味着不满足这些约束的数据 应当是错误的。 由于时间有限,具体的码例我们不做过多介绍,请参阅 PDF 文 档。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 23 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 1 数据类型与转换的介绍 2 缺失值的探查与处理 3 异常值的定义与 boxplot 函数 4 错误数据的处理 5 插补办法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 24 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 当个别数据出现问题时,除了找出它们,还要修复它们。下面介 绍几种常用方法。 1. 均值替换法, 我们将缺失的数据分为数值型和非数值型来进行 处理 (离散的数据可以看做非数值型), 数值型变量的缺失可以使 用已有的该变量在其余对象的取值的均值进行填补, 非数值型变 量的缺失, 利用已有的该变量在其余对象的取值的众数进行填补。 1 2 3 4 5 6 7 {r} x <-c (1 ,2 ,3 ,4 , NA ,5 , NA ) ( x [ is . na ( x )] <- mean (x , na . rm = T )) x 输出 : [1] 3 [1] 1 2 3 4 3 5 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 25 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 类似的也有中位数替换法: 1 2 3 4 5 {r} library ( Hmisc ) x <-c (1 ,2 ,3 ,4 , NA ,7 , NA ) x <- impute (x , fun = mean ) x <- impute (x , fun = median ) 均值替换是一种便捷的方式, 其优点在于不会对均值估计产生影 响, 但缺点也非常明显:这种方法建立在完全随机缺失的假设上, 会造成方差和标准差减小, 造成有偏估计。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 26 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 当变量之间有一定关系时, 可以考虑通过使用回归模型利用已有 变量的记录值对某一变量的缺失值进行回归再填补 (下例:鸢尾 花数据集, 用花瓣宽和花萼宽对花萼长度进行回归填补) 1 2 3 4 5 6 7 8 {r} data ( " iris " ) iris $ Sepal . Length [1:10] <- NA model <- lm ( Sepal . Length ~ Sepal . Width + Petal . Width , data = iris ) I <- is . na ( iris $ Sepal . Length ) iris $ Sepal . Length [ I ] <- predict ( model , newdata = iris [I ,]) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 27 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 hot deck imputation:对于数值型变量和类别型变量的缺失值, 当 已有数据足够充分时, 可以考虑从其余的已有的相似的记录中的 数据进行抽取来填补缺失值。 这种方法的一种常用的形式如下代码样例所示:随机抽取填充, 在同一变量下已有数据中随机进行抽取再填补缺失值。 1 2 3 4 5 6 7 {r} library ( Hmisc ) data ( " women " ) height <- women $ height height [ c (6 ,9)] <- NA # 加 入 缺 失 height ( height <- impute ( height , ’ random ’ )) # 随 机 抽 取 填 补 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 28 / 29 . 为什么选择“数据清洗”作为主题? 数据类型与转换的介绍 缺失值的探查与处理 异常值的定义与 boxplot 函数 错误数据的处理 插 Thanks! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 郭佩文,黄予晨,王天润,范伯雍,郝起正,童殷祺 数据清洗(Data Cleaning): 29 / 29 .