具体描述
数据清洗是数据挖掘与分析过程中不可缺少的一个环节,但因为数据类型极其复杂,传统的清洗脏数据工作单调乏味且异常辛苦。如果能利用正确的工具和方法,就可以让数据清洗工作事半功倍。
本书从文件格式、数据类型、字符编码等基本概念讲起,通过真实的示例,探讨如何提取和清洗关系型数据库、网页文件和PDF文档中的数据。最后提供了两个真实的项目,让读者将所有数据清洗技术付诸实践,完成整个数据科学过程。
如果你是一位数据科学家,或者从事数据科学工作,哪怕是位新手,只要对数据清洗有兴趣,那么本书就适合你阅读!
作者简介
作者简介:
Megan Squire
依隆大学计算科学专业教授,主要教授数据库系统、Web开发、数据挖掘和数据科学课程。有二十年的数据收集与清洗经验。她还是FLOSSmole研究项目的领导者,致力于收集与分析数据,以便研究免费软件、自由软件和开源软件的开发。
译者简介:
任政委
辽宁滨城大连现役程序员一枚,长期从事一线软件开发工作,近年来为成为一名“思路清晰”“视角独特”“不搞办公室政治”“输出有生命力代码”“凭借技术知识普惠初中级IT从业者”的终身制全栈式程序员而不懈努力。曾经翻译《Oracle PL/SQL攻略》一书,并希望这本《干净的数据》能够为奋战在IT前线上的各界小伙伴们带来日常工作之外的另类体验。微信号:KNIGHTRCOM
目录信息
1.1 新视角 1
1.2 数据科学过程 2
1.3 传达数据清洗工作的内容 3
1.4 数据清洗环境 4
1.5 入门示例 5
1.6 小结 9
第2章 基础知识——格式、 类型与编码 11
2.1 文件格式 11
2.1.1 文本文件与二进制文件 11
2.1.2 常见的文本文件格式 14
2.1.3 分隔格式 14
2.2 归档与压缩 20
2.2.1 归档文件 20
2.2.2 压缩文件 21
2.3 数据类型、空值与编码 24
2.3.1 数据类型 25
2.3.2 数据类型间的相互转换 29
2.3.3 转换策略 30
2.3.4 隐藏在数据森林中的空值 37
2.3.5 字符编码 41
2.4 小结 46
第3章 数据清洗的老黄牛——电子表格和文本编辑器 47
3.1 电子表格中的数据清洗 47
3.1.1 Excel的文本分列功能 47
3.1.2 字符串拆分 51
3.1.3 字符串拼接 51
3.2 文本编辑器里的数据清洗 54
3.2.1 文本调整 55
3.2.2 列选模式 56
3.2.3 加强版的查找与替换功能 56
3.2.4 文本排序与去重处理 58
3.2.5 Process Lines Containing 60
3.3 示例项目 60
3.3.1 第一步:问题陈述 60
3.3.2 第二步:数据收集 60
3.3.3 第三步:数据清洗 61
3.3.4 第四步:数据分析 63
3.4 小结 63
第4章 讲通用语言——数据转换 64
4.1 基于工具的快速转换 64
4.1.1 从电子表格到CSV 65
4.1.2 从电子表格到JSON 65
4.1.3 使用phpMyAdmin从SQL
语句中生成CSV或JSON 67
4.2 使用PHP实现数据转换 69
4.2.1 使用PHP实现SQL到JSON的数据转换 69
4.2.2 使用PHP实现SQL到CSV的数据转换 70
4.2.3 使用PHP实现JSON到CSV的数据转换 71
4.2.4 使用PHP实现CSV到JSON的数据转换 71
4.3 使用Python实现数据转换 72
4.3.1 使用Python实现CSV到JSON的数据转换 72
4.3.2 使用csvkit实现CSV到JSON的数据转换 73
4.3.3 使用Python实现JSON到CSV的数据转换 74
4.4 示例项目 74
4.4.1 第一步:下载GDF格式的Facebook数据 75
4.4.2 第二步:在文本编辑器中查看GDF文件 75
4.4.3 第三步:从GDF格式到JSON格式的转换 76
4.4.4 第四步:构建D3图 79
4.4.5 第五步:把数据转换成Pajek格式 81
4.4.6 第六步:简单的社交网络分析 83
4.5 小结 84
第5章 收集并清洗来自网络的数据 85
5.1 理解HTML页面结构 85
5.1.1 行分隔模型 86
5.1.2 树形结构模型 86
5.2 方法一:Python和正则表达式 87
5.2.1 第一步:查找并保存实验用的Web文件 88
5.2.2 第二步:观察文件内容并判定有价值的数据 88
5.2.3 第三步:编写Python程序把数据保存到CSV文件中 89
5.2.4 第四步:查看文件并确认清洗结果 89
5.2.5 使用正则表达式解析HTML的局限性 90
5.3 方法二:Python和BeautifulSoup 90
5.3.1 第一步:找到并保存实验用的文件 90
5.3.2 第二步:安装BeautifulSoup 91
5.3.3 第三步:编写抽取数据用的Python程序 91
5.3.4 第四步:查看文件并确认清洗结果 92
5.4 方法三:Chrome Scraper 92
5.4.1 第一步:安装Chrome扩展Scraper 92
5.4.2 第二步:从网站上收集数据 92
5.4.3 第三步:清洗数据 94
5.5 示例项目:从电子邮件和论坛中抽取数据 95
5.5.1 项目背景 95
5.5.2 第一部分:清洗来自Google Groups电子邮件的数据 96
5.5.3 第二部分:清洗来自网络论坛的数据 99
5.6 小结 105
第6章 清洗PDF文件中的数据 106
6.1 为什么PDF文件很难清洗 106
6.2 简单方案——复制 107
6.2.1 我们的实验文件 107
6.2.2 第一步:把我们需要的数据复制出来 108
6.2.3 第二步:把复制出来的数据粘贴到文本编辑器中 109
6.2.4 第三步:轻量级文件 110
6.3 第二种技术——pdfMiner 111
6.3.1 第一步:安装pdfMiner 111
6.3.2 第二步:从PDF文件中提取文本 111
6.4 第三种技术——Tabula 113
6.4.1 第一步:下载Tabula 113
6.4.2 第二步:运行Tabula 113
6.4.3 第三步:用Tabula提取数据 114
6.4.4 第四步:数据复制 114
6.4.5 第五步:进一步清洗 114
6.5 所有尝试都失败之后——第四种技术 115
6.6 小结 117
第7章 RDBMS清洗技术 118
7.1 准备 118
7.2 第一步:下载并检查Sentiment140 119
7.3 第二步:清洗要导入的数据 119
7.4 第三步:把数据导入MySQL 120
7.4.1 发现并清洗异常数据 121
7.4.2 创建自己的数据表 122
7.5 第四步:清洗&字符 123
7.6 第五步:清洗其他未知字符 124
7.7 第六步:清洗日期 125
7.8 第七步:分离用户提及、标签和URL 127
7.8.1 创建一些新的数据表 128
7.8.2 提取用户提及 128
7.8.3 提取标签 130
7.8.4 提取URL 131
7.9 第八步:清洗查询表 132
7.10 第九步:记录操作步骤 134
7.11 小结 135
第8章 数据分享的最佳实践 136
8.1 准备干净的数据包 136
8.2 为数据编写文档 139
8.2.1 README文件 139
8.2.2 文件头 141
8.2.3 数据模型和图表 142
8.2.4 维基或CMS 144
8.3 为数据设置使用条款与许可协议 144
8.4 数据发布 146
8.4.1 数据集清单列表 146
8.4.2 Stack Exchange上的Open Data 147
8.4.3 编程马拉松 147
8.5 小结 148
第9章 Stack Overflow项目 149
9.1 第一步:关于Stack Overflow的问题 149
9.2 第二步:收集并存储Stack Overflow数据 151
9.2.1 下载Stack Overflow数据 151
9.2.2 文件解压 152
9.2.3 创建MySQL数据表并加载数据 152
9.2.4 构建测试表 154
9.3 第三步:数据清洗 156
9.3.1 创建新的数据表 157
9.3.2 提取URL并填写新数据表 158
9.3.3 提取代码并填写新表 159
9.4 第四步:数据分析 161
9.4.1 哪些代码分享网站最为流行 161
9.4.2 问题和答案中的代码分享网站都有哪些 162
9.4.3 提交内容会同时包含代码分享URL和程序源代码吗 165
9.5 第五步:数据可视化 166
9.6 第六步:问题解析 169
9.7 从测试表转向完整数据表 169
9.8 小结 170
第10章 Twitter项目 171
10.1 第一步:关于推文归档数据的问题 171
10.2 第二步:收集数据 172
10.2.1 下载并提取弗格森事件的
数据文件 173
10.2.2 创建一个测试用的文件 174
10.2.3 处理推文ID 174
10.3 第三步:数据清洗 179
10.3.1 创建数据表 179
10.3.2 用Python为新表填充数据 180
10.4 第四步:简单的数据分析 182
10.5 第五步:数据可视化 183
10.6 第六步:问题解析 186
10.7 把处理过程应用到全数据量(非测试用)数据表 186
10.8 小结 187
· · · · · · (收起)
读后感
用户评价
从技术深度上讲,这本书的覆盖面广度和细节的穿透力都超出了我的预期。我以为它会是那种浅尝辄止的“入门速成”读物,结果发现它对高级数据转换技术也有涉猎。例如,书中对时间序列数据中的不规则采样和季节性调整的处理,以及对文本数据进行情感极性分析前的数据预处理步骤,都给出了非常精妙的解决方案。它不仅仅教你怎么用内置函数,更引导读者去理解函数背后的算法逻辑,比如在使用K-Means进行聚类清洗时,如何通过轮廓系数来客观判断最佳的簇数量。这种对底层原理的挖掘,让读者在遇到书中未曾提及的特定数据问题时,也能迅速找到解决问题的思路,而不是被动地依赖现成的脚本。这本书的价值在于,它培养的是一种解决未知问题的“数据免疫力”。
这本书的写作风格非常平易近人,没有故作高深的学术腔调,读起来就像是一位经验丰富的老前辈在手把手地带新人入门。我尤其欣赏作者在描述复杂概念时所用的生动比喻。比如,他把数据冲突比作“侦探小说中的线索比对”,把异常值检测形容为“在派对中找出那个格格不入的人”。这种叙事方式极大地降低了学习曲线的陡峭感。我通常对技术书籍容易产生阅读疲劳,但这本书的章节设计非常紧凑,每个知识点都配有“实战陷阱提示”或“最佳实践建议”,让人时刻保持专注。对于我们这些非科班出身的分析师来说,最大的挑战往往在于如何将抽象的统计学概念落地到具体的数据操作中,这本书在这方面做得极为出色,它清晰地展示了理论是如何转化为一行行有效的代码指令的,真正做到了知行合一。
说实话,这本书的视角非常独特,它不仅仅停留在“如何操作”的技术层面,更深入地探讨了数据“质量”背后的商业价值和潜在风险。我以前总觉得数据清洗就是技术人员的苦力活,但读完后才明白,一个不干净的数据集,可能导致整个商业决策链条的失真,甚至造成巨大的经济损失。书中对数据源的可靠性评估和数据治理流程的探讨,给我打开了一个全新的大门。它强调了“预防胜于治疗”的理念,指出在数据采集阶段就应植入质量控制机制,而不是等到数据进到分析师手中才开始亡羊补牢。书中提到的数据字典的建立和元数据的管理,这些看似“软性”的管理工作,实际上对保证数据长期可用性和可解释性起着决定性的作用。对于那些想要搭建成熟数据平台的团队来说,这本书提供的远不止是代码技巧,更是一套系统性的质量管理思维框架,值得反复研读和实践。
这本书的实操性简直是为我们这种初入数据科学领域的小白量身定做的。我本来对数据清洗这个环节感到非常头疼,总觉得它枯燥乏味,而且充满了各种技术陷阱。但这本书一上手就抛开了那些晦涩难懂的理论,直接切入了痛点:如何识别那些让人抓狂的缺失值、异常值和重复数据。作者的讲解非常细致,比如在处理缺失值时,他不是简单地罗列几种插补方法,而是会结合具体的业务场景来分析哪种方法最合适,什么时候应该用均值/中位数填充,什么时候需要更复杂的模型预测。我特别喜欢它对Python中Pandas库应用的深入剖析,那些处理字符串、日期时间格式的实用小技巧,简直是“救命稻草”。以前面对一堆杂乱无章的文本数据,我常常束手无策,但现在我能熟练地运用正则表达式和字符串操作函数,快速地把“纽约市”、“New York City”和“NYC”统一起来。这本书的结构安排也很有章法,从基础的清理到进阶的标准化、规范化,每一步都有清晰的代码示例和运行结果对比,读完后真的有种“茅塞顿开”的感觉,对后续的数据建模工作信心倍增。
我给这本书打高分,很大程度上是因为它对“人机协作”的强调。数据清洗固然需要强大的工具和算法支持,但最终的判断往往还是需要人类的领域知识介入。书中很多案例都体现了这一点:算法自动标记了某个高频出现的数值为异常,但通过业务背景分析,发现这其实是一个重要的市场转折点的真实记录。作者反复提醒读者,机器是冰冷的,而数据的生命力在于其背后的业务含义。因此,这本书的价值不仅仅在于教会我们如何用代码“擦干净”数据,更在于教会我们如何“理解”数据。这种结合了批判性思维和技术操作的教学方法,使得这本书超越了一般的编程指南,更像是一本提升数据素养的工具书。它让我从一个单纯的“数据使用者”转变为一个有责任感的“数据守护者”。
数据清洗是人工智能基础步骤,就像要做好菜你得先洗菜本书是瞄准这个环节的佳作。很喜欢作者每篇前比喻,文中代码也有实战价值。
063. @06142016. 新书,逻辑清晰,但浅尝辄止,略失望,也许是我期望太高了.
原来可以用archive.org下载各种归档好的网站数据!Stack Overflow的!Tweeter的!
以为是讲data wrangling的,没想到是真的就data clean啊。本想着解决炒菜前从买菜,洗菜,摘菜,切配的一系列工作,结果书里就只有怎么用水、消毒液等把菜给洗洗,还就真的只有洗洗。
数据清洗是数据分析很必要的前置过程,不怎么显现在人前然而做起来辛苦耗时,现在程序员们自嘲自己是IT民工,在不远的将来会不会有数据民工的称呼呢,或许不会有吧,强大的AI连做民工的机会都不留给你。