Preface 前言
过去十年,数据存储变得更便宜,硬件变得更快,算法上也有了引人注目的进步,这一切为数据科学的快速兴起铺平了道路,并推动其发展成为计算领域最重要的机遇。虽然“数据科学”一词可以包含从数据清理、数据存储到用图形图表可视化数据的所有环节,但该领域最重要的收获是发明了智能、精密的数据分析算法。使用计算机寻找大量数据中埋藏的有趣模式称为数据挖掘,这一领域包含了数据库系统、统计学和机器学习等课题。
现在,软件开发人员可以找到数十种出色的数据挖掘和机器学习书籍,从而了解这一领域的所有最新进展。大部分这类书籍都有一个共同点,即它们都涵盖了寻找数据中模式的少数经过检验的方法:分类、聚类、决策树和回归。当然,这些方法对于任何数据挖掘人员都是非常重要的,它们的流行正是因为其有效性。但是,这几种技术并不是全部。数据挖掘是一个丰富多彩的领域,包括数十种发现模式并做出预测的技术。真正的数据挖掘大师应该在工具箱中放入许多工具,而不只是少数几种。因此,本书的使命是介绍一些通常仅在学校课本中出现的、鲜为人知的数据挖掘概念。
本书使用Python编程语言和基于项目的方法介绍多种常被忽视的数据挖掘概念,如关联规则、实体匹配、网络分析、文本挖掘和异常检测等。每章都全面阐述某种特定数据挖掘技术的基础知识,提供替代方案以评估其有效性,然后用真实的数据实现该技术。
专注于实际数据是本书不同于其他数据挖掘书籍的一个特征。为了验证我们是否掌握了某个概念,判断方法是看我们能否将某种方法应用于新的未知问题。对我们来说,这意味着将每种数据挖掘方法应用到一个新的问题领域或者新的数据集。强调真实数据还意味着,我们的结果可能不总像预先制作的示例数据集那样清晰。因此,每一章都包含对如何精密地评估方法的讨论。得到的结果是否有意义?结果意味着什么?如何改善这些结果?
所以,在许多方面,本书包含了其他一些数据挖掘书籍遗漏的知识。如果你想用一组有趣但常被忽视的技术补充日益增长的数据挖掘工具箱,那么学习我们介绍的特定主题,以及在每个章节中的应用方法。
本书主要内容
第1章简单介绍数据挖掘领域,在该章中,我们特别注意数据挖掘与类似主题(如机器学习和数据科学)的关系。还回顾了许多不同的数据挖掘方法,讨论它们的各种优点和缺点。这些基础知识对我们过渡到本书的其他章节很重要,后续的章节更偏重技术,专注于特定数据挖掘工具的应用。
第2章介绍我们的第一个数据挖掘工具:挖掘一组同时出现的项目,这有时候被称为频繁项集。这里扩展了对频繁项集挖掘的理解,包含关联规则的挖掘,并且学习如何评估所找到的规则是否有益。为了将知识用于实践,在该章的最后我们实施了一个小项目,寻找选择用来描述大量软件项目的关键词中的关联规则。
第3章的重点是找出看上去稍有不同但实际上相同的匹配数据元素对。学习如何通过使用数据属性,确定两个项目是否实际上是同一回事。在该章的最后,我们实施一个实体匹配项目,寻找从一个托管服务转移到另一个托管服务中的软件项目,即使该项目的名称和其他重要属性已经改变。
第4章是网络或者图形分析的教程,这两种分析用于描述各种相互联系的实体组之间的关系。我们研究各种类型的网络,学习描述和计量它们的方法。然后,将学习到的知识投入实践,描述一个软件开发人员网络是如何随时间而变化的。
第5章是本书4个文本挖掘章节中的第一个。该章简单介绍了发展中的文本情绪分析领域。比较情绪挖掘的各种方法并学习结果的评估手段之后,我们实践使用机器学习分类器来确定一组软件开发人员聊天记录和电子邮件记录中的情绪。
第6章是关于寻找文本中合适名词和名称的。我们花费一些时间,学习这一任务的用途,了解为什么寻找命名实体有时候比看上去更加困难。在该章的最后,我们在各种不同类型的实际文本(包括电子邮件、聊天记录和董事会会议纪要)上实现了一个命名实体识别系统。在实现过程中,我们应用了不同的技术以量化结果的成败。
第7章介绍多种自动创建浓缩的文本摘要的策略。该章强调摘要提取工具,这种工具用来找出文本样本中最重要的句子。为此,我们试验了3种实现这一目标的不同工具,测试摘要方法并了解它们之间的差异。在介绍了每种工具之后,我们尝试提取同一组文本文档的摘要,并对比结果。
第8章说明如何使用软件工具揭示给定文本中存在的主题或者概念。我们可以训练一个计算机程序,推断大量文本中存在的主题吗?在一系列试验中,我们学习使用常见的主题建模库揭示软件开发人员电子邮件中存在的主题,以及这些主题如何随时间推移而变化。
第9章中我们学习如何使用数据挖掘和统计技术改善自己的数据挖掘过程。虽然本书的其他章节都在寻找数据中不同类型的模式,但该章将重点放在寻找异常或者不匹配特定模式的数据。不管这是因为数据是空白、遗漏还是怪异的,本章都提供了寻找或者修复这类数据并使剩余数据可以被更有效挖掘的策略。
阅读准备
为了完成本书中的项目,你需要Python 3.5或者更高版本。我建议使用Anaconda Python,但是只要包含如下程序包,任何Python分发版本都是可行的:Numpy、MatPlotlib、NetworkX、PyMySQL、Gensim和NTLK。第1章会简单介绍Python的安装和以上程序库,此后,每次使用一个程序库,我们将同时安装或者升级它。
因为数据挖掘明显是以数据为中心的,而且我们使用的数据集有时候很大,需要某种持久化数据存储,所以本书选择在一个关系数据库系统上实现一些数据挖掘算法。我们选择MySQL实现这一目标,因为这是一个成熟、容易下载和安装的基础设施。第2章和第3章都使用MySQL与内存密集型算法搭配。同时,本书还在第9章中的某些例子里使用了MySQL,但是没有MySQL也可以完成该章的学习。
读者人群
如果你为了精通数据挖掘而选择书籍,那么可能已经熟悉了数据分析的基础知识,可能试验过回归、决策树、分类和聚类分析等机器学习技术;如果你有一定的Python经验,理解基本的关系数据库术语,对统计学基础有所了解,能够理解有监督与无监督机器学习技术的基本工作原理,那么就已经为本书的阅读做好了准备。让我们从你已有的知识入手,学习更加不同寻常的数据挖掘策略吧!
本书约定
在本书中,你将发现许多区分不同信息的文本格式。下面是这些格式的一些例子及对其意义的解释。
下面是一个代码块的示例:
任何命令输入或者输出使用如下格式:
表示警告或者重要说明。
表示提示和技巧。
下载示例代码
你可以在www.packtpub.com上用自己的账户下载示例代码文件。如果在其他地方购买本书,可以访问www.packtpub.com/support注册,这些文件将直接用电子邮件发送给你。
你也可以访问华章图书官网www.hzbook.com,通过注册并登录个人账号,下载本书的源代码。
Contents 目 录
译者序
关于审稿人
前言
1.2.1 Fayyad等人的KDD过程
1.2.2 韩家炜等人的KDD过程
1.2.3 CRISP-DM过程
1.2.4 六步过程
1.2.5 哪一种数据挖掘方法最好
2.1.1 都市传奇“尿布与啤酒”
2.1.2 频繁项集挖掘基础知识
2.2.1 支持度
2.2.2 置信度
2.2.3 关联规则
2.2.4 包含数据的示例
2.2.5 附加值—修复计划中的漏洞
2.2.6 寻找频繁项集的方法
第3章 实体匹配
3.1 什么是实体匹配
3.1.1 数据合并
3.1.2 匹配技术
3.1.3 基于属性的相似度匹配
3.1.4 属性匹配方法
3.1.5 利用不相交数据集
3.1.6 基于上下文的相似度匹配
3.1.7 基于机器学习的实体匹配
3.1.8 实体匹配技术的评估
3.2 实体匹配项目
3.2.1 软件项目匹配的难度
3.2.2 两个例子
3.2.3 根据项目名称匹配
3.2.4 根据人名匹配
3.2.5 根据URL匹配
3.2.6 按照主题和描述关键词匹配
3.2.7 数据集
3.2.8 代码
3.2.9 结果
3.3 小结
第4章 网络分析
4.1 什么是网络
4.2 网络计量
4.2.1 网络的度数
4.2.2 网络直径
4.2.3 网络中的通路、路径和迹
4.2.4 网络的成分
4.2.5 图的中心性
4.3 图数据的表示
4.3.1 邻接矩阵
4.3.2 边表和邻接表
4.3.3 图数据结构之间的差别
4.3.4 将数据导入图结构中
4.4 真实项目
4.4.1 探索数据
4.4.2 生成网络文件
4.4.3 以网络的形式理解数据
4.5 小结
第5章 文本情绪分析
5.1 什么是情绪分析
5.2 情绪分析基础知识
5.2.1 观点的结构
5.2.2 文档级和句子级分析
5.2.3 观点的重要特征
5.3 情绪分析算法
5.4 情绪挖掘应用
5.4.1 项目动机
5.4.2 数据准备
5.4.3 聊天消息的数据分析
5.4.4 电子邮件消息的数据分析
5.5 小结
第6章 文本中的命名实体识别
6.1 为什么寻找命名实体?
6.2 命名实体识别技术
6.3 NER系统的构建与评估
6.3.1 NER和部分匹配
6.3.2 处理部分匹配
6.4 命名实体识别项目
6.5 小结
第7章 自动化文本摘要
7.1 什么是自动化文本摘要
7.2 文本摘要工具
7.2.1 使用NTLK的简单文本摘要
7.2.2 使用Gensim的文本摘要
7.2.3 使用Sumy的文本摘要
7.3 小结
第8章 文本中的主题建模
8.1 什么是主题建模
8.2 潜在狄利克雷分配
8.3 Gensim主题建模
8.3.1 理解Gensim LDA主题
8.3.2 理解Gensim LDA的遍数
8.3.3 对新文档应用Gensim LDA模型
8.3.4 序列化Gensim LDA对象
8.4 用于更大项目的Gensim LDA
8.5 小结
第9章 挖掘数据异常
9.1 什么是数据异常
9.1.1 缺失数据
9.1.2 修复缺失数据
9.1.3 数据错误
9.1.4 离群值
9.2 小结