第3章数据预处理——不了解数据一切都是空谈
数据预处理是数据分析的第一个重要步骤,只有对数据充分了解,经过对数据质量的检验,并初步尝试解析数据间关系,才能为后续的数据分析提供有力支撑。了解数据是对数据本身的重视。数据分析是为了解决实际问题,数据往往来源于实际生活,而直接收集到的数据总是存在一些问题,例如存在缺失值、噪声、数据不一致、数据冗余或者与分析目标不相关等问题。这些问题十分普遍,所以,不了解数据,一切都是空谈。
了解数据的过程如下: 首先观察统计数据的格式、内容、数量; 然后分析数据质量,是否存在缺失值、噪声、数据不一致、数据冗余等问题; 最后分析数据相关性,是否存在数据冗余或者与分析目标不相关等问题。在现在的数据分析过程中,尤其是在利用机器学习的算法进行数据分析的过程中,特征工程也是十分重要的一环。本章将对上述过程中的关键步骤进行详细介绍,具体内容如下: 3.1节给出与数据相关的一些概念,以便于读者的后续理解; 3.2节给出解决数据质量的一系列数据校验的手段; 3.3节给出分析数据相关性的一系列方法; 3.4节讲述特征工程所需进行的步骤。
3.1了解数据
数据分为定性数据和定量数据,其具体分类如图31所示。定性数据包括两个基本层次,即定序(ordinal)和名义(nominal)层次。定序变量指该变量只是对某些特性的“多少”进行排序,但是各个等级之间的差别不确定。例如对某一个事物进行评价,将其分为好、一般、不好3个等级,其等级之间没有定量关系。名义变量则是指该变量只是测量某种特征的出现或者不出现。例如性别“男”和“女”,两者之间没有任何关系,不能排序或者刻度化。
图31数据类别结构
每一个细致的数据分析者首先需要考查每个变量的关键特征,通过这个过程可以更好地感受数据,其中有两个特征需要特别关注,即集中趋势(central tendency)和离散程度(disperasion)。考查各个变量间的关系是了解数据十分重要的一步,有一系列方法可用于对变量间的相关性进行测量。关于数据本身的质量问题,需要数据分析者了解数据缺失情况、噪声及离群点等,相关概念将在下面的内容中给出。
1. 集中趋势
集中趋势的主要测度是均值、中位数和众数,这3个概念对于大多数的读者而言应该不陌生。对于定量数据,其均值、中位数和众数的度量都是有效的; 对于定性数据,这3个指标所能提供的信息很少。对于定序变量,均值无意义,中位数和众数能反映一定的含义; 对于名义变量,均值和中位数均无意义,仅众数有一定的含义,但仍需注意,众数仅代表对应的特征出现最多,不能代表该特征占多数。其中,对于名义变量的二分变量,如果有合适的取值,均值就可以进行有意义的解释,详细说明将在后面的章节中阐述。
2. 离散程度
考虑变量的离散情况主要考虑变量的差别如何,常见的测度有极差、方差和标准差,另外还有四分位距、平均差和变异系数等。对于定量数据而言,极差代表数据所处范围的大小,方差、标准差和平均差等代表数据相对均值的偏离情况,但是方差、标准差和平均差等都是数值的绝对量,无法规避数值度量单位的影响。变异系数为了修正这个弊端,使用标准差除以均值得到的一个相对量来反映数据集的变异情况或者离散程度。对于定性数据,极差代表取值类别,相比定量数据,定性数据的极差所表达的含义很有限,其他的离散程度测度对于定性数据的含义不大,尤其是对于名义变量。
3. 相关性测量
在进行真正的数据分析之前,可以通过一些简单的统计方法计算变量之间的相关性,这些方法包括:
1) 数据可视化处理
将想要分析的变量绘制成折线图或者散点图,做图表相关分析,变量之间的趋势和联系就会清晰浮现。虽然没有对相关关系进行准确度量,但是可以对其有一个初步的探索和认识。
2) 计算变量间的协方差
协方差可以确定相关关系的正与负,但它并不反映关系的强度,如果变量的测量单位发生变化,这一统计量的值就会发生变化,但是实际变量间的相关关系并没有发生变化。
3) 计算变量间的相关系数
相关系数则是一个不受测量单位影响的相关关系统计量,其理论上限是+1(或-1),表示完全线性相关。
4) 进行一元回归或多元回归分析
如果两个变量都是定性数据(定序变量或者名义变量),则在评估它们之间的关系时,上述方法都不适用,例如画散点图等。定序变量可以采用肯德尔相关系数进行测量,当值为1时,表示两个定序变量拥有一致的等级相关性; 当值为-1时,表示两个定序变量拥有完全相反的等级相关性; 当值为0时,表示两个定序变量是相互独立的。对于两个名义变量之间的关系,由于缺乏定序变量的各个值之间多或者少的特性,所以讨论“随着X增加,Y也倾向于增加”这样的关系没有意义,需要一个概要性的相关测度,例如可以采用Lamda系数。Lamda系数是一个预测性的相关测度,表示在预测Y时如果知道X能减少的误差。
4. 数据缺失
将数据集中不含缺失值的变量称为完全变量,将含有缺失值的变量称为不完全变量,产生缺失值的原因通常有以下几种:
(1) 数据本身被遗漏,由于数据采集设备的故障、存储介质的故障、传输媒体的故障、一些人为因素等原因而丢失。
(2) 某些对象的一些属性或者特征是不存在的,所以导致空缺。
(3) 某些信息被认为不重要,与给定环境无关,所以被数据库设计者或者信息采集者忽略。
5. 噪声
噪声是指被观测的变量的随机误差或方差,用数学形式表示如下:
观测量(Measurement)=真实数据(True Data)+噪声(Noise)
6. 离群点
在数据集中包含这样一些数据对象,它们与数据的一般行为或模型不一致,这样的对象称为离群点。离群点属于观测值。
3.2数据质量
数据质量是数据分析结果的有效性和准确性的前提保障,从哪些方面评估数据质量则是数据分析需要考虑的问题,典型的数据质量标准评估有4个要素,即完整性、一致性、准确性和及时性。
3.2.1完整性
完整性指的是数据信息是否存在缺失的情况,数据缺失的情况可能是整个数据记录缺失,也可能是数据中某个字段信息的记录缺失。不完整的数据所能借鉴的价值会大大降低,因此完整性是数据质量最基础的一项评估标准。
数据质量的完整性比较容易评估,一般可以通过数据统计中的记录值和唯一值进行评估。
下面从3.1节了解数据时得到的数据统计信息看看哪些可以用来审核数据的完整性。首先是记录的完整性,一般使用统计的记录数和唯一值个数。例如,网站日志日访问量就是一个记录值,平时的日访问量在1000左右,若突然某一天降到100,则需要检查数据是否存在缺失。再例如,网站统计地域分布情况的每一个地区名就是一个唯一值,我国包括了32个省和直辖市,如果统计得到的唯一值小于32,则可以判断数据有可能存在缺失。
完整性的另一方面是记录中某个字段的数据缺失,可以使用统计信息中的空值(NULL)的个数进行审核。如果某个字段的信息在理论上必然存在,如访问的页面地址、购买商品的ID等,那么这些字段的空值个数的统计就应该是0,这些字段可以使用非空(NOT NULL)约束来保证数据的完整性; 对于某些允许为空的字段,如用户的cookie信息不一定存在(用户禁用cookie),但空值的占比基本恒定,cookie为空的用户比例通常是2%~3%。另外,也可以使用统计的空值个数来计算空值占比,如果空值的占比明显增大,则很可能这个字段的记录出现了问题,信息出现缺失。
3.2.2一致性
一致性是指数据是否符合规范,数据集合内的数据是否保持了统一的格式。
数据质量的一致性主要体现在数据记录的规范和数据是否符合逻辑上。数据记录的规范主要是数据编码和格式,一项数据存在它特定的格式,例如手机号码一定是13位的数字,IP地址一定是由4个0~255的数字加上“.”组成的,或者是一些预先定义的数据约束,如完整性的非空约束、唯一值约束等。逻辑则指多项数据间存在着固定的逻辑关系以及一些预先定义的数据约束,例如PV一定是大于等于UV的,跳出率一定是在0~1范围内。数据的一致性审核是数据质量审核中比较重要、比较复杂的一个方面。
如果数据记录格式有标准的编码规则,那么对数据记录的一致性检验比较简单,只要验证所有的记录是否满足这个编码规则就可以,最简单的方法就是使用字段的长度、唯一值个数这些统计量。例如,若用户ID的编码是15位数字,那么字段的最长和最短字符数都应该是15; 或者商品ID是以P开始后面跟10位数字,可以用同样的方法检验; 如果字段必须保证唯一,那么字段的唯一值个数跟记录数应该是一致的,如用户的注册邮箱; 地域的省份直辖市一定是统一编码的,记录的一定是“上海”而不是“上海市”,是“浙江”而不是“浙江省”,可以把这些唯一值映射到有效的32个省市的列表,如果无法映射,那么字段将不能通过一致性检验。
一致性中逻辑规则的验证相对比较复杂,很多时候指标的统计逻辑的一致性需要底层数据质量的保证,同时也要有非常规范和标准的统计逻辑的定义,所有指标的计算规则必须保证一致。用户经常犯的错误就是汇总数据和细分数据加起来的结果对不上,导致这个问题的原因很有可能是在细分数据的时候把那些无法明确归到某个细分项的数据给排除了,如在细分访问来源的时候,如果无法将某些非直接进入的来源明确地归到外部链接、搜索引擎、广告等这些既定的来源分类,也不应该直接过滤掉这些数据,而应该给一个“未知来源”的分类,以保证根据来源细分之后的数据加起来可以与总体的数据保持一致。如果需要审核这些数据逻辑的一致性,可以建立一些“有效性规则”,例如A≥B,如果C=B/A,那么C的值应该在0~1范围内,数据若无法满足这些规则就无法通过一致性检验。
3.2.3准确性
准确性是指数据记录的信息是否存在异常或错误。和一致性不一样,导致一致性问题的原因可能是数据记录规则不同,但不一定是错误的,而存在准确性问题的数据不仅仅只是规则上的不一致。准确性关注数据中的错误,最为常见的数据准确性错误就如乱码。其次,异常的大或者小的数据以及不符合有效性要求的数值(例如访问量Visits)一定是整数、年龄一般为1~100、转化率一定为0~1等。
数据的准确性可能存在于个别记录,也可能存在于整个数据集。如果整个数据集的某个字段的数据存在错误,如常见的数量级的记录错误,则这种错误很容易被发现,利用Data Profiling的平均数和中位数也可以发现这类问题。当数据集中存在个别的异常值时,可以使用最大值和最小值的统计量去审核,使用箱线图也可以让异常记录一目了然。
另外,还存在几个准确性的审核问题、字符乱码的问题或者字符被截断的问题,可以使用分布来发现这类问题,一般的数据记录基本符合正态分布或者类正态分布,那么占比异常小的数据项很可能存在问题,如某个字符记录占总体的占比只有0.1%,而其他字符的占比都在3%以上,那么很有可能这个字符记录有异常,一些ETL工具的数据质量审核会标识出这类占比异常小的记录值。对于数值范围既定的数据,也可以添加有效性的限制,超过数据有效的值域定义数据记录就是错误的。
有些数据并没有显著异常,但记录的值仍然可能是错误的,只是这些值与正常的值比较接近而已,这类准确性检验最困难,一般只能通过与其他来源或者统计结果进行比对来发现问题,如果使用超过一套数据收集系统或者网站分析工具,那么通过不同数据来源的数据比对可以发现一些数据记录的准确性问题。
3.2.4及时性
及时性是指数据从产生到可以查看的时间间隔,也叫数据的延时时长。及时性对于数据分析本身要求并不高,但如果数据分析周期加上数据建立的时间过长,就可能导致分析得出的结论失去了借鉴意义。所以需要对数据的有效时间进行关注,例如每周的数据分析报告要两周后才能出来,那么分析的结论可能已经失去时效性,分析师的工作只是徒劳; 同时,某些实时分析和决策需要用到小时或者分钟级的数据,这些需求对数据的时效性要求极高。因此,及时性也是数据质量的组成要素之一。
3.3数据清洗
数据清洗的主要目的是对缺失值、噪声数据、不一致数据、异常数据进行处理,是对上述数据质量分析时发现的问题进行处理,使得清理后的数据格式符合标准,不存在异常数据等。
1. 缺失值的处理
对于缺失值,处理方法有以下几种:
(1) 最简单的方法是忽略有缺失值的数据。如果某条数据记录存在缺失项,就删除该条记录,如果某个属性列缺失值过多,则在整个数据集中删除该属性,但有可能因此损失大量数据。
(2) 可以进行缺失值填补,可以填补某一固定值、平均值或者根据记录填充最有可能值,最有可能值的确定可能会利用决策树、回归分析等。
2. 噪声数据的处理
1) 分箱技术
分箱技术是一种常用的数据预处理的方法,通过考察相邻数据来确定最终值,可以实现异常或者噪声数据的平滑处理。其基本思想是按照属性值划分子区间,如果属性值属于某个子区间,就称将其放入该子区间对应“箱子”内,即为分箱操作。箱的深度表示箱中所含数据记录的条数,宽度则是对应属性值的取值范围。在分箱后,考察每个箱子中的数据,按照某种方法对每个箱子中的数据进行处理,常用的方法有按照箱平均值、中值、边界值进行平滑等。在采用分箱技术时,需要确定的两个主要问题是如何分箱以及如何对每个箱子中的数据进行平滑处理。
2) 聚类技术
聚类技术是将数据集合分组为由类似的数据组成的多个簇(或称为类)。聚类技术主要用于找出并清除落在簇之外的值(孤立点),这些孤立点被视为噪声,不适合于平滑数据。聚类技术也可用于数据分析,其分类及典型算法等在6.3节有详细说明。
3) 回归技术
回归技术是通过发现两个相关变量之间的关系寻找适合的两个变量之间的映射关系来平滑数据,即通过建立数学模型来预测下一个数值,包括线性回归和非线性回归,具体的方法在6.4节中说明。
3. 不一致数据的处理
对于数据质量中提到的数据不一致性问题,需要根据实际情况给出处理方案,可以使用相关材料来人工修复,违反给定规则的数据可以用知识工程的工具进行修改。在对多个数据源集成处理时,不同数据源对某些含义相同的字段的编码规则会存在差异,此时需要对不同数据源的数据进行数据转化。
4. 异常数据的处理
异常数据大部分是很难修正的,如字符编码等问题引起的乱码、字符被截断、异常的数值等,这些异常数据如果没有规律可循几乎不可能被还原,只能将其直接过滤。
有些数据异常则可以被还原,如对于原字符中掺杂了一些其他的无用字符的情况,可以使用取子串的方法,用trim()函数去掉字符串前后的空格等; 对于字符被截断的情况,如果可以使用截断后字符推导出原完整字符串,那么也可以被还原。当数值记录中存在异常大或者异常小的值时,可以分析是否为数值单位差异引起的,如克和千克差了1000倍,这样的数值异常可以通过转化进行处理。数值单位的差异也可以认为是数据的不一致性,或者是某些数值被错误地放大或缩小,如数值后面被多加了几个0导致的数据异常。
3.4特征工程
在很多应用中,所采集的原始数据维数很高,这些经过数据清洗后的数据成为原始特征,但并不是所有的原始特征都对后续的分析可以直接提供信息,有些需要经过一些处理,有些甚至是干扰项。特征工程是利用领域知识来处理数据创建一些特征,以便后续分析使用。特征工程包括特征选择、特征构建、特征提取。其目的是用尽量少的特征描述原始数据,同时保持原始数据与分析目的相关的特性。
3.4.1特征选择
特征选择是指从特征集合中挑选一组最具统计意义的特征子集,从而达到降维的效果。特征选择具体从以下几个方面进行考虑:
(1) 特征是否发散。
如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本没有差异,则这个特征对于样本的区分并没有什么用。
(2) 特征是否与分析结果相关。
相关特征是指其取值能够改变分析结果。显然,应当优选选择与目标相关性高的特征。
(3) 特征信息是否冗余。
在特征中可能存在一些冗余特征,即两个特征本质上相同,也可以表示为两个特征的相关性比较高。
进行特征选择有以下几种方法:
1) Filter(过滤法)
按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
2) Wrapper(包装法)
根据目标函数(通常是预测效果评分),每次选择若干特征或者排除若干特征。
3) Embedded(集成法)
首先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,然后根据系数从大到小选择特征。其类似于Filter方法,但是它通过训练来确定特征的优劣。
3.4.2特征构建
特征构建是指从原始特征中人工构建新的特征。特征构建需要很强的洞察力和分析能力,要求用户能够从原始数据中找出一些具有物理意义的特征。假设原始数据是表格数据,可以使用混合属性或者组合属性来创建新的特征,或者通过分解或切分原有的特征来创建新的特征。
3.4.3特征提取
特征提取是在原始特征的基础上自动构建新的特征,将原始特征转换为一组更具物理意义、统计意义或者核的特征。其方法主要有主成分分析、独立成分分析和线性判别分析。
1. PCA (Principal Component Analysis,主成分分析)
PCA的思想是通过坐标轴转换寻找数据分布的最优子空间,从而达到降维、去除数据间相关性的目的。在数学上是先用原始数据协方差矩阵的前N个最大特征值对应的特征向量构成映射矩阵,然后原始矩阵去乘映射矩阵,从而对原始数据降维。特征向量可以理解为坐标轴转换中新坐标轴的方向,特征值表示矩阵在对应特征向量上的方差,特征值越大,方差越大,信息量越多。
2. ICA (Independent Component Analysis,独立成分分析)
PCA特征转换降维提取的是不相关的部分,ICA独立成分分析获得的是相互独立的属性。ICA算法本质上是寻找一个线性变换z=Wx,使得z的各个特征分量之间的独立性最大。ICA与PCA相比更能刻画变量的随机统计特性,且能抑制噪声。ICA认为观测到的数据矩阵X可以由未知的独立元矩阵S与未知的矩阵A相乘得到。ICA希望通过矩阵X求得一个分离矩阵W,使得W作用在X上所获得的矩阵Y能够逼近独立元矩阵S,最后通过独立元矩阵S表示矩阵X,所以,ICA独立成分分析提取出的是特征中的独立部分。
3. LDA(Linear Discriminant Analysis,线性判别分析)
LDA的原理是将带上标签的数据(点)通过投影的方法投影到维度更低的空间,使得投影后的点会按类别区分,相同类别的点将会在投影后更接近,不同类别的点将相距更远。
……
展开