内容简介
■重点关注数据清洗方法的自动化,既包括理论知识,也包括使用R语言编写的应用。
■使读者能够设计数据清洗过程,用于进行一次性分析或者设置生产系统以便定期进行数据清洗。
■探索各种统计技术,以便解决诸如不完整、矛盾和离群等方面的问题,更好地进行数据清洗组件的集成和质量监控。
■图书配套网站提供特征数据和R范例代码。
目录
目录
第1章数据清洗1
1.1统计价值链1
1.1.1原始数据2
1.1.2输入数据2
1.1.3有效数据3
1.1.4统计数据3
1.1.5输出3
1.2《R统计数据清洗及应用》使用的表示法和约定3
第2章R语言简介5
2.1命令行中的R语言5
2.2向量7
2.2.1向量计算9
2.2.2数组和矩阵10
2.3数据帧11
2.3.1公式-数据接口12
2.3.2选择行和列,布尔运算符13
2.3.3使用索引进行选择13
2.3.4数据帧操纵:dplyr软件包15
2.4特殊值16
2.5在R中导入和导出数据19
2.5.1R中的文件路径20
2.5.2软件包提供的格式20
2.5.3从数据库读取数据21
2.5.4处理R外部的数据21
2.6函数22
2.6.1使用函数22
2.6.2编写函数23
2.7《R统计数据清洗及应用》中使用的软件包24
第3章数据的技术表示27
3.1数值数据28
3.1.1整数28
3.1.2R中的整数30
3.1.3实数31
3.1.4双精度数31
3.1.5机器精度的概念33
3.1.6处理浮点数的不良结果34
3.1.7处理不良结果35
3.1.8R中的数值数据37
3.2文本数据38
3.2.1术语和编码38
3.2.2Unicode39
3.2.3一些常见的编码方案40
3.2.4R中的文本数据:character类的对象43
3.2.5R中的编码方案45
3.2.6使用非本地编码方案进行数据的读取和写入46
3.2.7检测编码方案48
3.2.8排序规则和排序49
3.3时间和日期51
3.3.1TAI、UTC以及POSIX从Epcoch开始的秒数51
3.3.2时间和日期表示法52
3.3.3R中的时间和日期存储54
3.3.4R中的时间和日期转换55
3.3.5闰日、时区和夏令时57
3.4区域设置注意事项58
第4章数据结构61
4.1简介61
4.2表格数据61
4.2.1data.frame对象62
4.2.2数据库62
4.2.3dplyr64
4.3矩阵数据65
4.4时间序列66
4.5图表数据68
4.6Web数据70
4.6.1网页爬取70
4.6.2WebAPI70
4.7其他数据73
4.8整理表格数据73
4.8.1每列变量75
4.8.2单个观测值存储在多个表中75
第5章清洗文本数据77
5.1字符规范化78
5.1.1编码转换和Unicode规范化78
5.1.2字符转换和音译80
5.2使用正则表达式进行模式匹配82
5.2.1基本正则表达式82
5.2.2实用的正则表达式85
5.2.3在R中生成正则表达式93
5.3R中的常见字符串处理任务94
5.4近似文本匹配99
5.4.1字符串指标101
5.4.2R中的字符串指标和近似文本匹配110
第6章数据验证121
6.1简介121
6.2初识validate软件包122
6.2.1使用check_that快速检查122
6.2.2基本工作流程:validator和confront124
6.2.3validate和DSL背景简介126
6.3定义数据验证127
6.3.1数据验证的正式定义128
6.3.2验证函数的运算130
6.3.3验证和缺失值132
6.3.4验证函数的结构133
6.3.5界定validate中的验证规则134
6.4数据验证函数的形式类型135
6.4.1深入了解测量135
6.4.2验证规则的分类137
6.5使用validate软件包验证数据139
6.5.1控制台和validator对象中的验证规则139
6.5.2在管道中验证141
6.5.3抛出错误或警告141
6.5.4测试线性方程式的公差142
6.5.5设置和重置选项143
6.5.6从文件导入验证规则/将验证规则导出到文件144
6.5.7检查变量类型和元数据146
6.5.8检查值范围和代码列表147
6.5.9检查记录中一致性规则148
6.5.10检查跨记录验证规则150
6.5.11检查函数依赖151
6.5.12跨数据集验证152
6.5.13宏、变量组、键153
6.5.14分析输出:validation对象154
6.5.15输出维度和输出选择156
第7章在数据记录中定位错误159
7.1错误定位159
7.2使用R进行错误定位162
7.3以MIP问题的形式进行错误定位164
7.3.1错误定位和混合整数规划165
7.3.2线性限制166
7.3.3分类限制167
7.3.4混合类型限制169
7.4数值稳定性问题171
7.4.1解决MIP问题172
7.4.2缩放数值记录174
7.4.3设置数值阈值174
7.5实际问题176
7.5.1设置可靠性权重176
7.5.2简化条件验证规则177
7.6结论181
第8章规则集的维护和简化185
8.1验证规则的质量185
8.1.1完备性185
8.1.2多余的规则和不可行性186
8.2以逻辑语言表述规则186
8.3规则集问题188
8.3.1不可行规则集188
8.3.2固定值190
8.3.3冗余规则191
8.3.4非松弛子句191
8.3.5非约束子句191
8.4检测和简化过程192
8.4.1混合整数规划193
8.4.2检测可行性193
8.4.3查找导致不可行的规则193
8.4.4检测冲突规则194
8.4.5检测部分不可行性194
8.4.6检测固定值194
8.4.7检测非松弛子句195
8.4.8检测非约束子句195
8.4.9检测冗余规则195
8.5结论196
第9章基于领域知识模型的方法197
9.1使用数据修改规则进行校正197
9.1.1修改函数198
9.1.2针对数值数据的一类修改函数202
9.2使用dcmodify进行基于规则的校正206
9.2.1从文件中读取规则207
9.2.2修改规则语法208
9.2.3缺失值209
9.2.4顺序执行和与顺序无关的执行209
9.2.5选项设置管理210
9.3演绎校正210
9.3.1校正数值数据中的键入错误211
9.3.2使用线性限制进行演绎插补214
第10章插补和调整221
10.1缺失数据221
10.1.1缺失数据机制221
10.1.2使用R可视化和测试缺失数据中的模式222
10.2基于模型的插补226
10.3R中基于模型的插补228
10.3.1使用simputation指定插补方法228
10.3.2基于线性回归的插补229
10.3.3M估计231
10.3.4Lasso回归、岭回归和弹性网络回归233
10.3.5分类和回归树233
10.3.6随机森林236
10.4使用R进行赋值元素插补237
10.4.1随机和顺序热卡插补238
10.4.2k最近邻和预测均值匹配239
10.5simputation软件包中的其他方法240
10.6基于EM算法的插补241
10.6.1EM算法242
10.6.2假定多变量正态分布情况下的EM插补244
10.7插补下的抽样方差245
10.8多重插补246
10.8.1基于EM算法的多重插补249
10.8.2Amelia软件包249
10.8.3基于链式方程的多变量插补253
10.8.4使用mice软件包进行插补254
10.9用于估计插补方差的分析方法257
10.10选择插补方法257
10.11约束值调整260
10.11.1形式化描述260
10.11.2对插补数据的应用263
10.11.3使用rspa软件包调整插补值263
第11章示例:一个小型数据清洗系统265
11.1设置266
11.1.1确定性方法267
11.1.2错误定位268
11.1.3插补269
11.1.4调整插补数据271
11.2监控数据更改273
11.2.1数据差异(Daff)273
11.2.2汇总单元格更改275
11.2.3按照验证规则汇总更改276
11.2.4使用lumberjack自动跟踪数据更改278
11.3集成和自动化282
11.3.1使用RScript282
11.3.2docopt软件包283
11.3.3自动化数据清洗283
前言/序言
前言
在数据分析中,数据清洗往往是最为耗时的部分。在“官方统计”(OfficialStatistics)社区,很久以前就已经开始将数据清洗作为一个单独的学科进行研究(在该社区,数据清洗被称为“数据编辑”)。此外,在研究中还引入了数据库的相关知识,尽管如此,针对大型统计社区的文献著作还是非常有限。正是因为这个原因,当出版方邀请我们对之前为useR!2013大会编写的《R数据清洗简介》教程进行扩展,进而编纂成一《R统计数据清洗及应用》时,我们毫不犹豫就答应了,这也是我们的心声。一方面,我们认为,过去50年中在“官方统计”社区发布的一些方法应该为更多的用户所了解和使用,而《R统计数据清洗及应用》或许可以为此助一臂之力。另一方面,我们正在从基于调查的数据源过渡到管理型“大”数据源,希望《R统计数据清洗及应用》能够帮助为“官方统计”社区增加一些(通常是预先存在的)相关技术。
对于我们来说,通过编写《R统计数据清洗及应用》也可以帮助我们系统地梳理相关知识,进一步完善之前针对这一主题所编写的软件。回过头来看,我们最终不仅成功完成了《R统计数据清洗及应用》的编写,还重新开发并普及了很多之前编写的数据清洗R软件包。为什么要这样做呢?其中一个原因是,我们发现了一些很好的方法,能够普及和扩展我们的软件和方法;另一个原因就是,我们希望将最近出现的“tidyverse”接口风格与R功能联系起来。
《R统计数据清洗及应用》包含的内容
《R统计数据清洗及应用》包含一系列精选的主题,我们认为这些主题对于开发数据清洗(也称为数据编辑)系统非常有用。主题范围非常广泛,与计算机科学、数字方法、技术标准、统计以及数据建模和编程等相关的主题,全部涵盖其中。
《R统计数据清洗及应用》涵盖“技术数据清洗”方面的主题,包括数字、文本和日期类型的转换和解释。同时对与这些数据类型相关的技术标准也做了较为详细的介绍。在对象的数据内容方面,相关主题包括数据验证(数据检查)、错误定位、各种错误校正方法以及缺失值插补方法。
对于《R统计数据清洗及应用》中讨论的理论知识,为了便于用户理解,我们会尽可能地提供可执行的R代码进行举例说明。此外,我们还提供了相应的练习,希望可以指导读者进一步加强对软件和对应方法的理解。
广泛的主题既反映出这一课题涵盖范围之广,同时也体现了作者广博的专业知识。当然,还有很多主题并未在书中进行介绍,其中,最重要的主题可能要算清洗时间序列对象和离群值检测。
《R统计数据清洗及应用》面向的读者
《R统计数据清洗及应用》的读者应该对数学和统计学有基本的了解,同时还应该具备一定的编程经验。我们假定读者已经了解期望值、方差、基础微积分和线性代数方面的知识。如果具备一定的R语言知识,那么对理解《R统计数据清洗及应用》中的内容会有很大的帮助,因为《R统计数据清洗及应用》就是使用R语言进行说明介绍的。不过,为了便于读者理解和参考,我们还是利用一章内容简要介绍了相关的基础知识。
致谢
《R统计数据清洗及应用》最终能够顺利出版,离不开很多人的辛勤工作。在这里,我们要感谢荷兰统计局的同事们,他们在百忙之中抽出时间与我们就数据验证、插补和错误定位进行了卓有成效的讨论,为我们提供了很多真知灼见。《R统计数据清洗及应用》中的部分章节参考了合著者所发表的论文和报告。我们要感谢JeroenPannekoek、SanderScholtus和JaccoDaalmans的帮助,没有你们的密切合作,就没有《R统计数据清洗及应用》的成功出版。此外,R核心团队、软件包开发人员也为我们提供了非常大的帮助,当然,还有R社区的大力支持,在此,一并表示感谢。
最后,还要感谢我们的家人,感谢他们的关爱与支持。
2017年6月
Mark和Edwin