数据挖掘:你必须知道的32个经典案例(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 探索性数据分析综述

当一个数据分析任务放在我们面前的时候,一般需要先对数据进行一些简单的统计和结构的梳理等操作。千万不要小看这些看似简单的操作,数据分析师们发现,在大部分的实际应用中,预先进行数据探索是项目成功的必要条件。通过阅读本节,读者将会对数据收集和预处理等方法有基本的理解。

1.1.1 什么是探索性数据分析

正如学习英语要从A、B、C、D开始一样,我们学习数据分析也要从数据的收集和预处理开始。有一些急于求成的人认为数据的收集和预处理很简单,没有什么技术含量,马马虎虎看一下就好了,重点还是应该放在后续的数据分析算法上。这种看法是非常肤浅的,在数据分析项目中,数据的收集和预处理往往占据整个项目工作量的十之八九,正是这些简单的工作决定了整个项目的成败。

举个例子,当我们对一份数据进行回归分析,发现吸烟越多得癌症的概率就越小时,我想正常人的反应都是返回检查数据是否出错了,而不是欣喜若狂地赶快去医学杂志发表论文。再比如,当我们分析一份数据时,发现甲二苯甘酸越多胞嘧啶就越少时,请问大家能一眼判断出这个结果是否具有发表论文的价值呢?对于欠缺相关专业知识的人来说,只有首先进行探索性数据分析,才能准确理解分析结果的意义。这就是为什么我们需要进行探索性数据分析的原因。

从广泛意义上讲,探索性数据分析主要包括数据的预处理和数据的探索性分析。其中数据的预处理是指对数据进行清洗、转化、重组和筛选,而数据的探索性分析则包括基本的五数总括、数据分布等,简单的相关分析和方差分析等,也都属于数据的探索性分析的范畴。通常情况下,我们不认为探索性数据分析包含数据的收集,但篇幅所限,本书将数据的收集也归入探索性数据分析这一章。

数据的收集是整个数据分析项目的原点,没有收集来的数据,什么数据分析技术都是纸上谈兵。对于一小部分较为常见的问题,比如预测市政府的财政收入,预测未来某一时间的天气数据等问题,都可以从相关的公开网站下载相关的数据包。但对于大部分商家根据自身情况提出的特定问题来说,则需要专门设计收集数据的方法,一个巧妙的方法可以节约成千上万的资金。本章要介绍的红牛营销案例就是一个经典的例子。

在真实生活中,收集的数据往往是不能直接用来进行高级数据分析的,这是因为原始数据中会包含许多残缺值和错误值,比如将一个人的身高记录为17.5米,这显然是一个录入出错的值,数据预处理就是要将原始数据中的残缺值和错误值一一剔除,只留下有意义的数据。除此之外,也并不是所有的数据变量都适合进行数据分析,因此数据预处理还要承担起挑选有价值的数据变量的任务。

简单的探索性数据分析主要用于研究数据的分布结构。研究一个数据变量的极大值、极小值、中位数各是什么,数据呈正态分布还是偏态分布是十分重要的。例如,回归分析就要求分析变量具有正态分布的特征。探索性数据分析可以使数据分析师直观掌握数据的各项特征,这一点将帮助数据分析师在后续分析中选择更合适的数据分析技术。

总的来说,数据的收集、预处理和简单分析考验了数据分析师的细心、耐心和观察力。正是这些基本功将好的数据分析师和坏的数据分析师区分开来,这些工作就好比建房子时的基石,只有花力气细致地做好这些工作,才能在数据中挖掘有价值的信息。

1.1.2 如何收集数据

探索性数据分析展开的重要一步就是数据源的获取,对于比较特殊的没有数据源的任务,我们应该如何搜集有效数据呢?答案就是网络爬虫——爬虫的基本思想是沿着网页的超链接内容逐步抓取数据分析师需要用到的数据。

那么爬虫究竟是如何分析并抓取网页的内容呢?通常来讲,一个网页由HTML文件、CSS文件和JavaScript文件3部分组成。一般来讲,在网站上面我们看到的所有内容都是存在于图1.1的“<>…</>”中被称为锚标签的内容中的。

图1.1 简单网页代码

根据上面提到的网页结构性质,爬虫通过模拟浏览器对网页进行访问,并对感兴趣的文本标签位置进行对应解析操作,在这中间还会涉及一些模拟登录、验证码等技术的使用,将解析得到的结果返回,便是数据分析师需要的数据。这就是一个完整的爬虫过程。

1.1.3 数据预处理技术

数据挖掘或数据分析的一般流程是:确定目标→获取数据源→数据探索→数据预处理→挖掘分析建模→模型效果评价。随着开源社区的活跃和技术的发展,越来越多的算法和框架被创造出来简化数据挖掘和数据分析工程师们的工作。近年来,随着相关算法的日趋成熟,决定一个项目是否成功的关键因素逐渐从算法本身变成了“数据探索+数据预处理”这个部分。

在机器学习/模式识别领域有句话很经典:“Garbage in,Garbage out.。”顾名思义,这句话的意思就是说,如果你的数据本身就是有问题的(数据特征非常不规律,缺失值很多,特征和结果联系不紧密等),那么无论什么模型都没办法化腐朽为神奇,得到一个让分析人员满意的结果。

下面简单介绍数据预处理的基本步骤:数据预处理技术的第一步,要衡量数据本身的质量——如收集来的数据是否完整、各类属性特征齐全与否等。接下来,就要对数据本身进行一些探索,通过使用Excel可视化工具、R中的ggplot2、Python中的Matplotlib、Seaborn等一系列可视化工具,对数据结构进行直观展示(分位数图、散点图等)。与此同时,也可以分析特征或者数据之间的相似/相异性,认识数据的数值、序列等本质属性,并用均值、中位数、众数等基本统计指标将数据刻画出来,如图1.2所示。

图1.2 数据可视化

在数据探索的过程中,一般还涉及组织数据集的方法:如对特征进行检查,将非结构化数据转换为结构化数据;基于现有数据,引入或构建新的特征;对多个小数据集进行合并和去重;从大数据集中抽样出一些中小型数据集等。

数据清洗是数据预处理中最关键的一步,也是前处理阶段中应用复杂算法最多的地方,它的主要作用是填充空缺值、平滑噪点并识别显著离群点(outlier)进行后序处理。以时间续列数据为例,在个别空缺值处理中,通常采用人工规则、平均值、中位数、拉格朗日插值、牛顿插值和线性规划求解等方法;噪声平滑目前来讲箱形图技术用得比较多,平滑方法有滑动窗口法、按箱平均值/中值平滑法等。至于噪声点的识别,离群点检测的经典算法是最K近邻算法(KNN),还可以使用一元/多元回归分析来拟合光滑数据,从而使噪声点暴露出来。

数据规约——它是数据预处理技术中用于降低数据量、提取核心信息的方法,主要体现在3个方面:(1)属性(特征)维度的规约。即删除不相关/不重要的属性来减少数据量,通常的方法是子集选择和树形合并,即通过决策树归纳、前向选择、向后删除等完成集合筛选。(2)数据压缩。小波变换是数据压缩领域的典型算法,对于有稀疏、倾斜等情况出现的数据集,基于小波变换的有损压缩方法往往可以得到很好的结果。除了小波变换,主成分分析方法(PCA)将原有的多维特征根据重要性排序,只提取重点关注的特征,它和它的扩展算法在实际中应用非常广泛。(3)数值规约。数值规约的概念就比较广了,小到将整型数据属性类型从long变为int,大到使用对数线性模型等方法将数据划分为多维空间并进行相应规约。它们都属于数值规约的部分。

数据离散化技术目前也较为常用,它用于解决特征中连续特征比例过高的问题,其主要思路是基于分箱或直方图分析的方法将连续特征变为离散特征,从而达到减少连续特征的目的。这种方法对于处理连续特征比较困难的ID3决策树算法,有非常大的帮助。

除了上述方法之外,数据预处理中最重要的其实是根据实际情况来制定预处理的规则和标准。只有理解了业务才能抓住重点,才能有效地避免盲目和浪费时间。