第1章
数据挖掘概述

广义的数据挖掘是指针对收集的大规模数据,应用整套科学工具和挖掘技术(如数据、计算、可视化、分析、统计、实验、问题定义、建模与验证等),从数据之中发现隐含的、对决策有参考意义的信息、价值和趋势。因此,数据挖掘是一个横跨多学科的计算机科学分支。强调它隶属计算机科学范畴,是希望读者认识到这个领域的核心需求,尽早摆脱对编程实现的恐惧,避免陷入“数据挖掘只需将模型或算法套用于数据集之上”的误区。这也是本书的写作目的之一。

1.1 数据挖掘简介

随着计算机技术的全面发展,企业生产、收集、存储和处理数据的能力大大提高,数据量与日俱增。数据的积累实质上是企业的经验和业务的沉淀。越来越多的企业引入“数据思维”——不只是依赖于数据的统计分析,更强调对数据进行挖掘,期待从这一“未来世界的石油”中发现潜在的价值。这一迫切的“开采”需求在世界范围内酝酿了一次“大数据”变革。

数据挖掘的确是21世纪最具话题性的技术之一,包含数据预处理、算法应用、模型评价、结果检验等多个部分,并依靠其丰富的内涵向外延伸出数据分析、数据ETL、机器学习等多个领域。

1.2 工具简介

数据挖掘软件的历史并不长,甚至连“数据挖掘”这个术语也是在19世纪90年代中期才正式被提出。如今,商用数据挖掘软件和开源工具都已经非常成熟,不仅提供易用的可视化界面,还集成了数据处理、建模、评估等一整套功能。

部分开源的数据挖掘软件,采用可视化编程的设计思路。之所以这么做,是因为它能足够灵活和易用,更适合缺乏计算机科学知识的用户,如WEKA和RapidMiner。

当用户拥有较多特定的分析需求,或正在自行实现一个改进的机器学习算法时,脚本型语言如Python和R将更符合需要。同时,脚本型语言兼具运行效率和开发效率,支持敏捷型的迭代更新。

1.2.1 WEKA

用Java编写的WEKA是一款知名的数据挖掘工作平台,它因解决数据挖掘任务的实际需求而生,集成了大量能处理数据挖掘任务的机器学习算法,这些算法能被用户直接应用于数据集之上。同时,WEKA允许开发者使用Java语言,调用其分析组件,基于WEKA的架构进行二次开发,融入更多的数据挖掘算法,并嵌入到软件或者应用之中,自动完成数据挖掘任务,开发新的机器学习框架。

WEKA支持多种标准数据挖掘任务,包括数据预处理,分类、回归分析、聚类、关联规则等算法的应用,以及特征工程和可视化。其欢迎界面如图1-1所示。

图1-1 WEKA欢迎界面

1.2.2 RapidMiner

RapidMiner的目标是:“成为一个能将数据变成宝贵的战略资产的现代平台”,已被广泛使用于商业应用、学术研究、教育、敏捷开发等领域。

RapidMiner是一个支持数据挖掘、文本挖掘、机器学习、商业分析等任务的集成环境,如图1-2所示。其图形化界面采用了类似Windows资源管理器中的树状结构来组织分析组件,提供500多种分析组件作为计算单元(Operator),服务于数据挖掘的各个环节,如数据预处理、变换、探索、建模、评估及结果可视化。这些计算单元有详细的XML文件记录。

图1-2 RapidMiner Studio工作界面

RapidMiner是基于WEKA二次开发的应用,这意味着它可以调用WEKA中的各种分析组件。

1.2.3 Python

Python是一门编程语言。随着NumPy、SciPy、Matplotlib和Pandas等众多程序库的开发,Python在科学计算和数据分析领域占据着越来越重要的地位。在大多数数据任务上,Python的运行效率已经可以媲美C/C++语言。2016年2月11日,科学家宣布:人类在去年9月首次直接探测到了引力波!引力波高峰只持续了四分之一秒,同时仪器接收了大量干扰噪声, 需要处理的数据量以TB计,如图1-3所示。其中,Python的GWPY模块提供专业的数据分析支持。

图1-3 利用公开引力波数据绘制波形图

1.2.4 R

R语言是一种为统计计算和图形显示而设计的语言环境,是贝尔实验室(Bell Laboratory)的Rick Becker、John Chambers和Allan Wilks开发的S语言的一种实现,包含一系列统计与图形显示工具,如图1-4所示。它是由一个庞大且活跃的全球性研究型社区维护,主要包括核心的标准包和各个专业领域的第三方包,提供丰富的统计分析和数据挖掘功能。

图1-4 R-Studio工作界面

R语言至少拥有以下优势:①方便地从各种类型的数据源中获取数据;②高可拓展性;③出色的统计计算功能;④顶尖水准的制图功能;⑤不断贡献强大功能的开源社区。它与Python同属数据挖掘主流编程语言,而从功能与代码风格的角度来评价,R与MATLAB是最像的。

1.3 Python开发环境的搭建

所谓编程语言,意指“与计算机交流时使用的语言”。它是一种被标准化的交流技巧,用于连接程序员的思维和计算机的操作。学习编程语言的第一关,就是安装和环境配置。我们必须与计算机约定如何理解代码、指令和语法,才能够顺利地与计算机交流,赋予它复杂的功能。Python便是其中的一种“方言”。

本节将向大家详细介绍,如何在不同的操作系统上快捷地使用Python进行编程实现。

1.3.1 Python安装

对于新手,Python及其第三方模块在安装环节有许多已知的难题。比如源码编译的安装方式、环境变量的配置、不同模块之间的版本依赖问题。如果陷入其中的某一个泥潭之中,将浪费初学者大量的时间,消磨热情。当然,如果读者能独立克服,就能熟悉相关的重要概念,大有裨益。

为了能让读者顺利阅读本书的后续内容,以及避免不必要的麻烦,我们将采用更加简单的安装方式。本书使用的是Python的科学计算发行版——Anaconda。除Python本身之外,Anaconda囊括了科学计算和数据分析所需的主流模块,独立的包管理工具CondaConda在升级模块时,能够递归地寻找需要升级的前置模块,自行解决模块的版本依赖问题。以及两款不同风格的编辑器Jupyter和Spyder,具有开源精神且支持学术用途的免费额外性能提升。官方软件下载地址为:https://www.continuum.io/downloads

注意

本书使用的是当前主流的Python 2.7版本,有较多的网络参考资料。截至本书完稿时,Python作者宣布Python 2.x系列将会在2020年停止更新,Python 2.7是最后一个版本。Python 3.x拥有一系列重大的更新,包括一些基础的语法。在未来的日子里,越来越多的主流模块将逐渐转向Python 3.x版本。在社区真正成熟之前,我们建议入门级读者先熟练使用Python 2.7。

1. Windows下安装Python

Anaconda的存在使得在Windows系统中安装Python得到极度简化,直接前往官方网站找到对应的下载内容(图1-5),并选择Python 2.7对应的安装包,注意区分32位和64位的版本。

图1-5 Windows下Anaconda的两个主要版本

下载后运行Anaconda的安装程序,这里大部分的操作和一般软件的安装无异,需要注意的是:如图1-6所示,Anaconda默认会自动改写环境变量配置参数,使得用户能在任何的路径下使用Python命令行模式。

图1-6 Anaconda安装界面

如果读者自行安装原始的Python版本,极容易忽略这一步,从而走入思维的盲区,导致永远不能自行安装成功。这也是我们推荐使用科学计算发行版Anaconda的原因。

2. Linux下安装Python

大多数Linux发行版,如CentOS、Debian、Ubuntu等,都已经自带了Python 2.x的主程序。因此,额外安装Anaconda需要做好管理的工作,避免两个不同版本的Python冲突,导致不必要的错误。如果读者确定内置版Python能够兼容书中代码,亦可不额外安装Anaconda。

下面介绍如何安装Anaconda,并避免与内置版的Python冲突,如图1-7所示。本教程以Ubuntu 16.06为例。

图1-7 Anaconda安装界面

1)前往官方网站下载对应版本的Anaconda,默认情况下,Linux会自动将下载所得文件归档在“下载”文件夹中。

2)假设下载所得文件在“下载”这一文件夹中,如果不是,请替换路径,并输入下面的命令,以执行批处理指令,安装Anaconda。

        $ bash ~/下载/Anaconda2-4.0.0-Linux-x86_64.sh

安装过程中,将会在屏幕上打印出用户协议许可,你需要利用Enter继续阅读。阅读至文件末尾,输入yes并敲击Enter键来表示你同意以上内容并使用默认路径开始安装。

3)如图1-8所示,输入yes来确认允许Anaconda为你自动配置环境变量PATH。

图1-8 安装过程

4)当看到图1-9中的欢迎信息之后,代表已经成功安装Anaconda。然后我们执行下面的命令,将Anaconda的位置加载至环境变量PATH的开头,使得当我们使用Python时,总是优先使用Anaconda版。

图1-9 手动改写优先级

        $ export PATH="$HOME/anaconda2/bin:$PATH"

之后,我们可以直接输入python,以检查是否能够正确使用Anaconda版的Python。

3. Mac下安装Python

类似Windows下的安装,Mac OS X系统用户可以直接前往官方网站下载一个图形化安装程序。同时,因为OS X系统是基于UNIX内核开发的,所以我们也能够打开终端,通过命令行的方式来安装。这里主要叙述利用终端安装的方法。

1)下载OS X下对应版本的Anaconda,如图1-10所示。

图1-10 OS X下Anaconda的两个主要版本

注意

利用终端安装Anaconda实际上是在进行“源码编译”。后续步骤中需要的是二进制文件(Command-Line Installer),而非图形化的安装界面(Graphical Installer)。

2)按下Alt+Space,打开Search界面,输入terminal,单击搜索出来的“Terminal”(终端)图标。

3)输入下面的命令,执行批处理指令,安装Anaconda,如图1-11所示。

图1-11 OS X中安装Anaconda

          $ bash~/Downloads/Anaconda2-4.0.0-MacOSX-x86_64.sh

安装过程中,将会在屏幕上打印出用户协议许可,你需要利用Enter继续阅读。阅读至文件末尾,输入yes并敲击Enter键来表示你同意以上内容并使用默认路径开始安装。

4)输入yes来确认允许Anaconda为你自动配置环境变量PATH。

5)与Linux下安装类似,同样需要将Anaconda的位置加载至环境变量PATH的开头,使得当我们使用Python时,总是优先使用Anaconda版。

        $ export PATH="$HOME/anaconda2/bin:$PATH"

之后,我们可以直接输入python,以检查是否能够正确使用Anaconda版的Python。

1.3.2 Python初识

1.命令行版本的Python Shell-Python(Command)

以Windows系统为例,安装Python后,你可以在开始菜单中,找到对应的Command Line版本的Python Shell,或者同时按下Win+R键,输入cmd并按回车,打开命令窗口,如图1-12所示。在命令窗口中输入python即可使用进入Python的命令行模式。

图1-12 Python命令行窗口(1)

其中,可以看到对应的Python版本信息和系统信息。我们可以在标识符“>>>”后面输入代码,程序就会马上返回一个结果,如图1-13所示。

图1-13 Python命令行窗口(2)

Python Shell是交互式Shell,交互式是指当你输入代码到Python Shell中时就可以动态地看到相应的返回结果。

2.带图形界面的Python Shell-IDLE(Python GUI)

下面将要介绍的是带图形界面的Python GUI。在Windows下的所有程序上搜索IDLE,就可以直接打开Python Shell-IDLE。打开后界面如图1-14所示。

图1-14 Python GUI

我们同样可以在这个界面上输入代码,结果和在Command Line上输入的结果一样。但在这个界面上我们可以通过菜单栏的File -> New File创建Python脚本,在Python脚本上写多行代码,保存为.py文件后并运行该脚本,而在Command Line上运行多行代码只能一行接着一行输入并按回车输出,显得十分繁琐。运行Python脚本实际上也是按顺序运行每行的代码,运行脚本后将回到Python GUI界面,这时候Python已经存储脚本运行后的数据,我们可以在界面上继续输入代码,如图1-15所示。本书的代码都会放在Python脚本中,方便读者阅读和运行。

图1-15 Python GUI脚本界面

3.第三方Python IDE

IDE是集成开发环境(Integrated Development Environment)的英文简称。而第三方IDE通常聚合了更强大的功能,包括代码版本管理、项目代码管理、代码自动补全等。PyCharm就是这样一个跨平台的、多功能的集成开发环境,主要分为免费社区版(见图1-16)和付费商业版。

图1-16 PyCharm社区版

如图1-17所示,在选择创建项目以及确定项目存储路径之后,我们能看到一个清晰简洁的界面。左侧栏是项目管理窗口,负责组织Python实现的项目中所涉及的全部代码和数据文件。右边是正式的编辑区。在选择创建新的Python File之后,将能配合内置的自动补全、代码提示、调试运行功能进行代码的编辑、改正和优化。同时,它还能自动结合Git进行代码版本控制。有兴趣的读者可以自行查找资料。当我们需要做一个大型项目,代码量较多时,用带有项目管理功能的PyCharm会更加方便。

图1-17 PyCharm新建Python File

1.3.3 与读者的约定

1.排版格式说明

本书的示例代码格式分为两种,一种是Python IDLE的命令行代码,带有“>>>”。命令行代码可能马上会返回结果,这个结果会紧贴在命令行代码的下一行,结果的输出不带有“>>>”。

例如:

        >>>x = 1
        >>>x
        1

另一种格式是带有上下分隔线的代码清单,这种格式用于展示某个完整的知识点。为读者阅读方便,当代码清单出现输出语句时,我们都把输出结果放在下一行,并用注释“# result:”标示 。如代码清单1-1所示:

代码清单1-1 某个知识点

        print 1
        # result: 1
        print 'Hello Python'
        # result:
        Hello Python

其中“1-1”表示第1章第1个代码清单。为了叙述方便,一个完整的程序可能被拆分到多个代码清单中,在同一小节中的后续代码中,有可能会沿用先前已声明的变量。

2.示例代码使用说明

本书默认支持的Python版本为2.7.11,其中书中讲解的模块对应的版本号如表1-1所示。

表1-1 模块版本说明

本书附件资源按照章节组织,在代码附件的目录下会有第1章、第2章、第3章等子章节目录。在章节目录下包含了2个文件夹:“示例程序”文件夹和“上机实验”文件夹。“示例程序”文件夹包含3个子目录:code、data、tmp。其中,code包含正文中每个章节的全部代码清单;data包含代码清单中所使用的数据文件;tmp文件夹中包含示例程序运行的结果文件。在部分章节中,上述3个文件夹可能为空。“上机实验”文件夹主要针对每章最后的上机实验,给出了上机实验的参考答案。其子目录结构与示例程序一致。

读者下载附件资源后具体资源下载地址见前言内容。——编辑注,直接使用Python运行对应的代码脚本(.py)即可观察结果。值得注意的是,使用Anaconda的读者只需保持目录结构即可完整运行程序,自行安装Python的读者,请确保你的模块版本与表1-1一致。

1.4 小结

本章着重介绍了数据挖掘及推荐使用的数据挖掘工具,旨在让读者对数据挖掘形成初步感觉,逐渐培养成熟的大局观。其次,深入介绍并对比了多种工具,如WEKA, Python等,从宏观角度把握不同工具的特点和特性。本书是基于Python讲解,所以最后又重点介绍了Python开发环境的搭建,展示了三类主流操作系统的完整安装过程,并介绍了三种编写脚本的风格,还向读者说明了本书的正确使用方式,以帮助读者更好地阅读本书。