【大数据技术05】数据加工
参考资料:朝乐门。数据科学导论 [M]. 北京:人民邮电出版社,2020.

五.数据加工
1. 探索型数据分析
探索型数据分析主题

通常,探索型数据分析是数据加工的第一步
探索型数据分析(Exploratory Data Analysis,EDA)指对已有的数据(特别是调查或观察得来的原始数据)在尽量少的先验假定下进行探索,并通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。
“先验假定” 指在分析数据前,基于经验、直觉或理论预设的 “数据应该是什么样” 的判断
1.1 耐抗性分析
耐抗性是指对于数据的局部不良行为的非敏感性,他是探索性数据分析追求的主要目标
数据科学家重视耐抗性的主要原因在于“好”的数据也难免有差错甚至是重大差错。因此,进行数据分析时要有预防大错的破坏性影响的措施。
Eg.
中位数平滑是一种耐抗技术,而中位数是高耐抗性统计量
“耐抗性”(Resistance)是探索型数据分析(EDA)里很核心的一个概念,简单说就是数据分析方法或统计量 “抗干扰” 的能力—— 面对数据里的局部错误、极端值(比如录入错的异常数据、个别离谱的观测值),它不会轻易被带偏,还能保持对数据真实规律的判断。
比如我们熟悉的 “中位数” 就是典型的高耐抗性统计量:假设一组数据是 [2,3,4,5,6],中位数是 4;如果其中一个数据出错变成 [2,3,4,5,1000],中位数还是 4,完全没受极端值 1000 的影响。但如果用 “平均值”(低耐抗性),原本均值是 4,出错后均值直接变成 203,一下就被极端值带偏了。
探索型数据分析中常用的耐抗性分析统计量可以分为:集中趋势、离散程度、分布状态和频度等四类
1.1.1 集中趋势统计量
(1)平均数
最常见的描述数据集中趋势的统计量:算术平均数(Arithmetic Mean)
平均数的优点:它能够利用所有数据的特征,而且比较好算。
不足之处,平均数容易受极端数据的影响。
平均数的性质如下
- 一个集合中的各个数据与算术平均数离差之和等于零
- 一个集合中的各个数据与算术平均数的离差平方之和是最小的
这两个性质是算术平均数的核心数学特征,本质是反映 “平均数作为数据‘中心’的特殊性”—— 它是能让数据围绕其 “平衡” 的点
离差平方和最小:如果换一个数(不是平均数)当 “中心”,计算数据到这个数的离差平方和,结果一定会比 “到平均数的离差平方和” 大
Eg.
数据是 [2, 4, 6],平均数是 4。
- 先算 “到平均数的离差平方和”:(-2)² + 0² + (+2)² = 4 + 0 + 4 = 8。
如果换一个 “假中心”(比如 3,不是平均数):
- 各数据到 3 的离差:2-3=-1,4-3=+1,6-3=+3
- 离差平方和:(-1)² + (+1)² + (+3)² = 1 + 1 + 9 = 11(比 8 大)。
(2)中位数
中位数:按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比它大,有一半的数据比它小。如果大于和小于中位数的数值个数均少于一半,数集中必有若干值等于中位数。
例: 3, 13, 7, 5, 21, 23, 39, 23, 40, 23, 14, 12, 56, 23, 29 排序后: 3, 5, 7, 12, 13, 14, 21, 23, 23, 23, 23, 29, 39, 40, 56 这15个数中,第8个数为中位数: 23
**优点:**中位数是通过排序得到的,它不受最大、最小两个极端数值的影响。部分数据的变动对中位数没有影响
**应用场景:**当一组数据中的个别数据变动较大时,常用来描述这组数据的集中趋势
通过直方图估计中位数
- 先找到第一个累计频数≥50% 总数据量的组—— 这就是中位数所在的组。
- 中位数 = L + [(N/2 - F) /f] × w
- L:中位数所在组的 “下限”
- N:总数据量
- F:中位数所在组 “之前所有组的累计频数”
- f:中位数所在组的 “自身频数”
- w:中位数所在组的 “区间宽度”

通过直方图估计平均数
平均值 = 用 “每组的中点(代表该组数据的平均水平)” 乘以 “该组的频数(数据个数)”,求和后再除以 “总数据量”
(3)众数
众数(Mode):在一组数据中,出现次数最多的数据;
优点:众数代表一组数据,众数不受极端数据的影响;
应用场景
- 适合于数据量较多时使用
- 当数值或被观察者没有明显次序(常发生于非数值性资料)时特别有用,由于可能无法良好定义算术平均数和中位数。
Eg.
例子:{苹果,苹果,香蕉,橙,橙,橙,桃}的众数是橙子。
1.1.2 离散程度统计量
作用:观测变量各个取值之间的差异程度
(1)极差
极差是指一组测量值内最大值与最小值之差,又称范围误差或全距,以R表示。
作用:体现一组数据的波动范围,极差越大,离散程度越大
**缺点:**未能利用全部测量值的信息,不能细致地反映测量值彼此相符合的程度(就是数据之间是否接近),且易受极端值影响
(2)百分位数
k百分位数(percentile):将一组数据从小到大排序,并计算相应的累计百分位,如处于k%位置的值称作第k百分位
百分位数(Percentile)是用来描述 “数据在整体分布中所处位置” 的统计量,核心是把排序后的数据集分成 100 等份,每一份对应一个百分位,能清晰看出某个数值在所有数据中的 “排名占比”—— 比如 “第 25 百分位数” 意味着有 25% 的数据小于等于它,75% 的数据大于等于它。
比如考试成绩,只看 “考了 80 分” 没意义,但如果知道 “80 分是第 75 百分位数”,就清楚 “有 75% 的同学分数≤80,25% 的同学分数≥80”,能快速判断成绩在群体中的水平,这就是百分位数的价值。
用X_k%表示
k百分位数计算如下:
计算核心:先确定位置,再根据位置特性选择插值方式,把排序后的数据集按 “k% 比例” 找到对应位置的数值
位置计算:位置 = 1 + (n-1)×(k/100),n是数据个数
插值方式:
线性插值(最常用):按位置的小数部分 “比例分配” 相邻数据的差距。
公式:若位置在第 i 个数据(记为 x_i)和第 j 个数据(x_j,j=i+1)之间,位置 = i + d(d 是小数部分,如 2.75 中 i=2,d=0.75),则:k 百分位数 = x_i + d×(x_j - x_i)
下界 / 上界:简单取相邻数据的其中一个。
- 下界:直接取左边的 x_i(如 2.75 取 x_2=10);
- 上界:直接取右边的 x_j(如 2.75 取 x_3=20)。
中点:取 x_i 和 x_j 的平均值,不考虑小数部分。
最近邻:看小数部分离 0 近还是离 1 近,取更近的那个数据。
当X_k%位于第i与第j个数据之间时(i<j),可以使用几种插值方法来计算:线性插值(linear)、下界(lower)、上界(higher)、中点(midpoint)和最近邻(Nearest)
【例】设有一组数据:[-35,10,20,30,40,50,60,100],求它的25百分位数,即 X_25% 。
- 先排序 — 从小到大排序
- 确定X_25%的位置:1+(n-1)×k%=1+(8-1)×25%=2.75,于第2和第3个数之间,即10与20之间。
- 线性插值:10+(20-10)×0.75=17.5
- 下界、上界、中点和最近邻的方法:10、20、15和20
- 结论:该数据集中有25%的数据小于等于17.5,75%的数据大于等于17.5,说明 17.5 是 “数据前 25% 和后 75% 的分界点”。
(3)五位概括法
五数概括法(Five-number summary): (Minimum, Q1, Median, Q3, Maximum)
用5 个关键统计量快速提炼数据整体分布特征的简洁工具,核心是 “用少量关键值覆盖数据的范围、中心和核心区间”,让复杂数据的分布规律一目了然,也是绘制箱形图的基础。
- 最小值(Minimum):排序后数据的第一个值(最小的数),反映数据的下限;
- Q1(第一四分位数):第 25 百分位数,数据前 25% 和后 75% 的分界,对应核心区间的下限;
- 中位数(Median,即 Q2):第 50 百分位数,数据的中心位置,不受极端值影响;
- Q3(第三四分位数):第 75 百分位数,数据前 75% 和后 25% 的分界,对应核心区间的上限;
- 最大值(Maximum):排序后数据的最后一个值(最大的数),反映数据的上限。
箱形图(Boxplots): 对五数概括法一种可视化的图形表示。
(4)方差和标准差
方差(Variance)
- 总体方差
- 样本方差
本质是衡量 “数据与均值之间的平均偏离程度”—— 数据越分散,方差和标准差越大;数据越集中,二者越小。二者紧密关联
标准差(Standard Deviation)
标准差=方差的算术平方
分布状态:
- 方差大表示系统的要素两极分化大,方差小表示系统的要素基本处于中等位置,偏离小
- 方差大的系统要用分层次的策略应对;方差小的系统要用集中性的策略应对
波动性:
- 方差大的系统波动性大,方差小的系统稳定性好
从上述方差和标准差定义来看,它们的大小与数据本身的大小密切相关,并且都带有量纲。
具有不同量纲的数据集合或者刻画对象的不同属性之间,就很难比较离散程度的大小。接下来介绍的离散系数则可以避免上述问题。
(5)四分位数
四分位数:
- Q1,第25百分位数;(下四分位数)
- Q2,中位数;(中位数)
- Q3,第75百分位数;(上四分位数)
四分位距(Interquartile range (IQR)): Q3 - Q1
经验公式:超过Q3或者低于Q1 1.5×IQR的数据,可能是离群点,在4.噪声数据处理部分有详细介绍
(6)离散系数(Coefficient of Variation)
离散系数又称变异系数,样本变异系数是样本标准差与样本平均数之比
作用:它把 “绝对波动(标准差)” 转化为 “相对波动(相对于均值的波动比例)”,消除了均值和量纲的影响
当两组数据均值或量纲差异大时,用 “离散系数(标准差 ÷ 均值)” 才能公平比较谁更分散
Eg.
- 小明(学生)零花钱:每天 5 元、6 元、7 元(均值 6 元,标准差≈0.82);
- 爸爸(成人)工资:每月 5000 元、5500 元、6000 元(均值 5500 元,标准差≈408.25)。
直接看标准差:爸爸的 408.25 远大于小明的 0.82,难道爸爸的钱更 “不稳定”?
但显然不对 —— 爸爸每月工资波动 400 多,相对于 5500 的工资来说,只是 “小幅波动”;小明每天零花钱波动 0.82,相对于 6 元的零花钱来说,是 “不小的比例”(比如今天 5 元,明天 7 元,差距快 30% 了)。
这就是 “标准差” 的局限:它是绝对波动,没考虑 “数据本身的大小”(爸爸工资基数大,小明零花钱基数小),所以直接比数值不公平。
Eg.
- 可以明显看出两组数据平均值差异很大,标准差不能判断各自数据差异的大小
- 通过计算离散系数,可以看出,虽然成人组的标准差大于幼儿组,但是幼儿组的离散系数明显大于成人组,因此可以说明,幼儿组的身高差异比成人组大。
1.1.3 数据分布状态统计量
(1)偏度
集中趋势到分布形态度量—偏度
偏度是统计数据分布偏斜方向和程度的度量
皮尔逊偏态系数(Pearson’s Coefficient of Skewness)
用来量化数据分布偏斜程度的经典指标,核心是通过 “数据中心指标(均值、中位数、众数)的关系” 或 “标准差”,把 “偏态” 这个抽象的分布形态转化为具体数值,方便判断偏斜方向和幅度。
- 使用众数
Sk₁ = (均值 - 众数) / 标准差
- 使用中位数
Sk₂ = 3×(均值 - 中位数) / 标准差
- 偏度 = 0:分布基本对称(无偏态);
- 偏度 > 0:右偏(正偏),数值越大,右偏越严重;
- 偏度 < 0:左偏(负偏),数值越小(绝对值越大),左偏越严重
偏态分布有两种,左偏和右偏。长尾在哪边就是哪偏,上面第一张图的长尾在左边就是左偏,最后一张图的长尾在右边就是右偏。
(2)峰度
1.1.4 度量的分类
- 分布式度量(Distributive):将函数用于n个聚集值得到的结果和将函数用于所有数据得到的结果一样
- 典型指标:
count(计数)、sum(求和)、min(最小值)、max(最大值)。
- 典型指标:
- 代数度量(Algebraic):可以通过在一个或多个分布式度量上应用一个代数函数而得到
avg(均值 = sum/count)、standard_deviation(标准差 =√(离差平方和 /(n-1)))、离散系数(标准差 / 均值)、方差(离差平方和 /(n-1))。
- 整体度量(Holistic):必须对整个数据集计算的度量
- 计算子聚集所需的存储没有常数界
- median
(中位数)、mode(众数)、rank(排名)、四分位数`(Q1、Q2、Q3)。
度量的分类(分布式、代数、整体)是从计算逻辑和数据依赖程度对统计指标进行的 “方法归类”,而均值、标准差等是具体的指标实例。它们的关系可理解为 “类别是框架,指标是框架内的具体工具”,
场景 1:处理 “大数据” 时,分类决定 “能不能算、快不快算”
比如你是电商平台的运营,要算 “双 11 当天全国用户的订单总金额” 和 “双 11 当天用户订单金额的中位数”(中位数能反映大多数用户的下单水平,比均值更抗极端值)。
- 算 “总金额(sum,分布式度量)”:不用等全国所有数据汇总,北京、上海、广州等每个地区先算自己的订单总和,再把这些地区的和加起来 ——5 分钟就能出结果,哪怕数据量几十亿也不卡,因为分布式度量支持 “拆分计算”,效率极高;
- 算 “中位数(整体度量)”:必须等全国所有用户的订单金额都收集齐,再按从小到大排序,找中间那个数 —— 如果数据量几十亿,可能要等 1 小时才能出结果,因为整体度量 “离不开全量数据”,没法拆分算。
这时候分类的用处就显出来了:如果老板催着要 “快速出个核心指标”,你就知道优先选分布式 / 代数度量(如 sum、均值),别选整体度量(如中位数);如果不着急但要 “反映真实用户水平”,再用整体度量 —— 分类帮你判断 “什么场景用什么指标不耽误事”。
1.2 残差分析
残差(Residuals):指数据减去一个总括统计量或者模型拟合值的才与部分
即:
残差
=
实际值
−
拟合值
残差 = 实际值 - 拟合值
残差=实际值−拟合值
如果我们对数据集 Y 进行分析后得到拟合函数 yˆ = a + bx ,则在 xi 处对应两个值, 即实际值(yi)和拟合值( yˆi )。因此,xi 处的残差 ei = yi - yˆi ,如上图所示。
核心是通过对比 “数据实际值” 和 “模型拟合值” 的差异,帮我们判断模型是否贴合数据规律,或数据是否存在异常,
1.3 重新表达
重新表达(Re-Expression):是指找到合适的尺度或数据表达方式进行一定的转换,使得数据有利于简化分析
探索型数据分析强调,应尽早考虑数据的原始尺度是否合适的问题。如果尺度不合适,重新表达成另一个尺度可能更有助于促进对称性、变异恒定性、关系直线性或效应的可加性等。
重新表达也称变换(Transformation),一批数据 x1, x2, …, xn 的变换是一个函数 T,它把每个 xi 用新值 T(xi)来代替,使变换后的数据值是 T(x1), T(x2), …, T(xn )
原始数据有时会有 “不好用” 的问题,比如:
数据分布太偏(比如收入数据,大部分人低、少数人极高,直接分析难抓规律);
变量间关系不是直线(比如销量和广告投入是 “先快后慢” 的非线性关系,不好用线性模型分析);
数据波动差异大(比如小数值波动小、大数值波动大,影响计算稳定性)。
这时候就需要 “重新表达”,把数据调整成更适合分析的样子。
重新表达的核心:“找个合适的转换方式”
本质是用一个函数(比如 T (x))把原始数据 x 换成新数据 T (x),常见的简单转换有:
- 取对数(比如对收入数据取 ln (x)):能让偏态分布变平缓,缩小极端值的影响;
- 开平方(比如对计数数据√x):适合数据波动随数值增大而变大的情况;
- 倒数(比如对速度数据 1/x):适合 “数值越大、关联越弱” 的非线性关系。
4.启示
启示是指通过探索性数据分析,发现新的规律、问题等,进而满足数据加工和数据分析的需要
在探索型数据分析(EDA)里,“启示” 是整个分析过程的 “核心产出”—— 简单说,就是通过作图、算特征量、残差分析等手段探索数据后,发现的新规律、隐藏问题或有价值的线索,这些发现会直接指导后续的数据分析或决策。
- 分析用户消费数据时,通过画时间序列图发现 “每周五晚消费额骤增”,这就是一个 “启示”—— 后续可以针对周五晚设计促销活动
2.数据大小与标准化
标准化处理是数据大小变换的最常用方法之一。
数据标准化处理(Data Normalization)的目的是将数据按比例缩放,使之落入一个小的特定区间内。
在某些比较和评价类的指标处理中经常需要去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
2.1 0-1标准化
0-1 标准化(0-1 Normalization)指对原始数据的线性变换,使结果落到[0, 1], 转换函数如下:
x
∗
=
x
−
Min
Max
−
Min
x^* = \frac{x - \text{Min}}{\text{Max} - \text{Min}}
x∗=Max−Minx−Min
其中,Max 和 Min 分别为样本数据的最大值和最小值;x 与 x*分别代表标准化处理前的值和标准化处理后的值。
Min-Max标准化比较简单,但也存在一些缺陷—当有新数据加入时,可能导致最大值和最小值变化,需要重新定义 Min 和 Max 的取值。
2.2 Z-score标准化
(Zero-Score Normalization)指使经过处理的数据符合标准正态分布,即均值为 0,标准差为1,其转化函数为:
z
=
x
−
m
σ
z = \frac{x - m}{\sigma}
z=σx−m
其中 m为平均数,σ 为标准差,x 与 z 分别代表标准化处理前的值和标准化处理后 的值。
是以标准差为单位度量原始分数离开其平均数的分数之上多少个标准差,或是在平均数之下多少个标准差。
假设有两个正态分布的序列(比如两个班的考试成绩):
- A 班:全班成绩均值 = 50,标准差 = 5(意思是大部分人分数在 45-55 之间,成绩比较集中);
- B 班:全班成绩均值 = 70,标准差 = 10(大部分人分数在 60-80 之间,成绩比较分散)。
现在两个班各有一个 “60 分”——
- A 班的 60:比全班平均分(50)高 10 分,远超大部分同学(毕竟标准差才 5,相当于高了 2 个标准差),是 “优等生水平”;
- B 班的 60:比全班平均分(70)低 10 分,低于大部分同学(标准差 10,相当于低了 1 个标准差),是 “中等偏下水平”。
你看,同样是 60,在不同班里的 “地位” 天差地别 —— 直接比原始数字,完全没意义,因为它们的 “参照系”(均值、标准差)不一样。
第二步:Z-score 怎么让它们 “可比”?
Z-score 的作用,就是把两个班的分数,都转换成 “以标准差为单位的偏离值”,统一到 “均值 = 0、标准差 = 1” 的标准正态分布里。
用之前的公式算一下:
- A 班 60 分的 Z-score:((60-50)/5 = 2)(意思是 “比自己班均值高 2 个标准差”);
- B 班 60 分的 Z-score:((60-70)/10 = -1)(意思是 “比自己班均值低 1 个标准差”)。
现在不用比原始分了,直接比 Z-score 就行:
- 2 > -1 → 很明显,A 班的 60 分在自己班里的水平,远高于 B 班的 60 分在自己班里的水平。
2.3 Z-score和0-1标准化应用场景
Min-Max 标准化/0-1标准化
- 核心特点:将数据线性映射到 [0, 1] 区间,保留数据的原始分布形状,仅压缩范围。
- 适用场景
- 需要 “绝对占比” 的场景:比如电商商品评分(0-5 分)标准化后直观体现 “相对高低”,或图像处理中像素值归一化(统一到 0-255 区间)。
- 算法对 “数据范围敏感” 的场景:如 K 近邻(KNN)、神经网络(需输入在 0-1 区间提升收敛性)、支持向量机(SVM,避免量纲差异主导距离计算)。
- 数据分布无明显极端值:若数据存在极大 / 极小异常值,Min-Max 会因 “极值主导区间” 导致大部分数据被压缩到很小范围(失去区分度)。
Z-score 标准化
- 核心特点:将数据转换为均值为 0、标准差为 1 的标准正态分布,突出数据的 “相对位置”(偏离均值的程度)。
- 适用场景
- 关注 “相对波动” 的场景:比如金融市场分析(某支股票收益率与市场平均收益率的偏离程度)、成绩排名(某学生分数与班级平均分的差距)。
- 数据存在极端值:通过 “除以标准差” 削弱极端值的影响(如用户消费数据中少数高消费用户不会主导分析)。
- 算法对 “分布形状” 敏感的场景:如主成分分析(PCA,需数据近似正态分布提升降维效果)、线性回归(消除量纲差异后系数更具解释性)。
总的来说:
- 若需要 **“0-1 区间的绝对占比”或算法对 “范围” 敏感 ** → 选 Min-Max 标准化;
- 若需要 **“相对波动的比较”或数据有极端值 ** → 选 Z-score 标准化。
Eg.
举个直观例子:比较学生 “身高” 和 “体重” 时,Z-score 能体现 “某学生身高比均值高 1 个标准差,体重比均值高 2 个标准差”,而 Min-Max 能体现 “该学生身高在班级排前 20%,体重排前 10%”—— 两者视角不同,按需选择即可。
2.4 独热编码(One Hot Encoding)
独热编码是一种把分类数据(非数字或者无大小关系的数字)转换为机器能理解的数据格式的方法,核心是用:多个0和1来表示一个类别,避免机器误将数据当成有大小顺序的数值
独热编码将每个标称属性(分类属性)进行扩充
在上面的例子中,可以将一个颜色标称属性扩充为4个二元属性,分别对应黑、白、蓝、黄四种取值。对于每一个产品,它在这四个属性上只能有一个取1,其余三个都为0,所以称为独热编码
- 样本1属于黑色,黑色列标1,其独热编码为1000
- 样本2属于蓝色,蓝色列标1,其独热编码为0010
- 样本3属于白色,白色列标1,其独热编码为0100
- 样本4属于黑色,黑色列标1,其独热编码为1000
任意两个不同颜色的产品之间的欧氏距离都是
3.缺失数据及其处理方法
3.1 缺失数据处理步骤
根据缺失数据对分析结果的影响及导致数据缺失的影响因素, 选择具体的缺失数据处理策略
- 识别缺失数据(数据审计)
通过 “数据审计” 环节,先定位数据中哪些位置存在缺失(比如某条记录的 “年龄” 字段为空、某用户的 “消费金额” 未记录等)。这是处理缺失数据的第一步,相当于 “先找到问题在哪里”。
- 分析缺失数据(特征、影响、原因分析)
特征分析:研究缺失数据的分布规律(比如是随机缺失,还是集中在某类人群 / 某类场景下);
影响分析:评估缺失数据对后续分析(如建模、统计)的干扰程度(比如少量缺失可能影响小,大量缺失可能导致结果失真);
原因分析:探究数据缺失的根源(是采集失误、用户未填写,还是业务逻辑导致的合理缺失等)。
这一步是 “搞清楚缺失数据的性质和影响”,为后续处理策略提供依据。
- 处理缺失数据(忽略、删除、插补)
根据前两步的分析,选择合适的处理方式:
忽略:若缺失数据对分析影响极小,可直接跳过;
删除:若缺失数据无规律且量少,可删除包含缺失值的记录或字段;
插补:若缺失数据有规律或影响大,通过技术手段 “填补” 缺失值(比如用均值、中位数填充,或通过算法预测填充)。
这一步是 “解决缺失问题”,让数据能满足后续分析的要求。
3.2 缺失值类型
- MCAR:某变量的缺失数据和其他已观测、未观测的变量都没关系(纯随机缺失)。比如调查中 “年龄” 字段随机有几条没填,和其他问题的回答无关。
- MAR:变量的缺失数据和 “已观测的其他变量” 有关,但和 “未观测的变量” 无关。比如 “收入” 字段的缺失,和已观测的 “职业” 有关(比如自由职业者更可能不填收入),但和没观测的 “家庭背景” 无关。
- NMAR:缺失数据既不属于完全随机,也不属于随机缺失,是 “非随机” 的。比如 “心理健康评分” 的缺失,可能和 “评分本身较低(不想透露)” 有关,属于数据自身的隐藏规律导致的缺失。这种缺失是不可忽略的。
3.3 缺失值填充
在许多实际问题的研究中,有一些数据无法获得或缺失。
当缺失比例很小时,可直接对完全记录进行数据处理,舍弃缺失记录。
但在实际数据中,往往缺失数据占有相当的比重,尤其是多元数据。这时前述的处理将是低效率的,因为这样做丢失了大量信息,并且会产生偏倚,使不完全观测数据与完全观测数据间产生系统差异。
3.3.1 均值填充法
首先,将变量的属性分为数值型和非数值型来分别进行处理
- 缺失值是数值型的,则根据该变量在其他所有对象的取值的平均值来填充该缺失的变量值
- 如果缺失值是非数值型的,则使用众数来补齐该缺失的变量值
条件:这种方法建立在完全随机缺失(MCAR)的假设之上的
缺点:会导致变量的方差和标准差变小
改进:局部均值填充
用与元组属于同一个“类别”的元组的均值填充
3.3.2 回归添补法
把缺失属性作为因变量,其他相关属性作为自变量,利用他们之间的关系建立回归模型来预测缺失值,以此完成缺失值插补的方法。
Eg.
第一步:选变量,建模型
把有缺失值的属性设为因变量y(比如 “收入” 字段有缺失),再选和它相关的其他属性作为自变量(X_1, X_2…X_n)(比如 “年龄”“职业”“学历” 这些和收入有关的字段),然后构建多元线性回归模型:
![]()
第二步:算参数,得回归方程
![]()
第三步:代入自变量,补缺失值
把缺失值所在样本的自变量(X_1, X_2…X_n)的具体值(比如某个人的年龄、职业、学历)代入上面的回归方程,算出的y就是 “缺失值的估计值”,用它来填补原数据的空缺即可。
3.3.3 热卡填充
热卡填充也称作Hot deck填补法、就近补齐法
对于一个包含空值的对象,热卡填充法在完整数据中找到一个和她最相似的对象,然后用这个相似对象的值来进行填充
不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。
缺点:难以定义相似标准,主观因素较多。
3.3.4 其他方法
- 最大似然估计
在缺失值填充中,可将含缺失值的变量视为待估计的参数,通过构建包含缺失值的似然函数,找到使该函数最大化的缺失值估计值。例如,对于服从正态分布的变量,可通过极大似然估计同时求解分布参数和缺失值。
- 期望最大化法
非常适合处理含隐变量(缺失值可视为隐变量)的缺失值填充问题。以混合模型为例,E 步假设缺失值的分布,M 步估计模型参数,交替迭代直到收敛,从而得到缺失值的估计。比如在处理带有缺失值的聚类问题时,EM 算法能有效填充缺失值并完成聚类。
- K最近距离邻法
属于热卡填充法的延伸,通过计算待填充样本与其他完整样本的距离,选取 K 个最相似的邻居,用这些邻居对应属性的均值或众数来填充缺失值。例如,填充用户消费金额的缺失值时,找 K 个年龄、性别、职业都相似的用户,用他们的消费金额均值来填充
- C4.5方法
可先构建决策树,利用其他完整的属性来预测缺失属性的值。以用户是否流失的数据集为例,若 “消费频率” 属性有缺失,可通过 C4.5 决策树,根据用户的年龄、购买记录等属性,推断出 “消费频率” 的缺失值。
4.噪声数据及处理
4.1 噪声数据
噪声:指的是测量变量中的随机错误或者误差
噪声数据分为三类:
- 错误数据
- 虚假数据
- 离群数据
4.2 离群点处理
离群点(Outliers):是 数据集 中与其他数据偏离太大的点
离群点与高杠杆点(High Leverage)和强影响点(Influential Points)是3个既有联系又有区别。
高杠杆点(High Leverage Points):“自变量位置特殊,有‘撬动’模型的潜力”
离群点(Outliers):“自身数值异常,但不一定影响模型”
强影响点(Influential Points):“既特殊,又真的改变了模型”
常用的离群点的识别方法
-
可视化方法:如上图所示的绘制散点图的方法;也可以采用箱线图方法,如下图
其中没有包含在箱线中的三个独立的点是离群点
-
四分位距法:
IQR:四分位距,代表了中间 50% 数据的范围,能反映数据的 “中间离散程度”
IQR = Q 3 − Q 1 \text{IQR} = Q_3 - Q_1 IQR=Q3−Q1
把数据从小到大排序后,分成 4 个相等的部分,产生 3 个分割点,这 3 个点就是四分位数:
下四分位数((Q_1)):数据的第 25% 分位数(25% 的数据小于它);
中位数((Q_2)):数据的第 50% 分位数(50% 的数据小于它);
上四分位数((Q_3)):数据的第 75% 分位数(75% 的数据小于它)
若一个数据点X属于:
X < ( Q 1 − 1.5 × IQR ) X< (Q_1 - 1.5 \times \text{IQR}) X<(Q1−1.5×IQR)
或:
X > ( Q 3 + 1.5 × IQR ) X> (Q_3 + 1.5 \times \text{IQR}) X>(Q3+1.5×IQR)
则X属于离群点
-
Z-score方法:通常将Z-score值在3倍以上的点视作离群点
比如,若某数据的 Z-score 是 2,说明它比均值高 2 个标准差;若 Z-score 是 -1.5,说明它比均值低 1.5 个标准差。
-
聚类算法:如用DBSCAN、决策树、随机森林算法等发现离群点
4.3 分箱处理
基本思路:分箱(Binning)处理的基本思路是将数据集放入若干个“箱子”之后,用每个箱子的均值(或边界值)替换该箱子内部的每个数据成员,进而达到噪声处理的目的
以数据集 Score={60, 65, 67, 72, 76, 77, 84, 87, 90}的噪声处理为例,其分箱处理过程如图所示
分箱处理(也叫离散化)是数据加工中的 “数据分组工具”,核心是把连续的数值型数据划分成若干个区间(“箱子”),让数据从 “连续” 变 “离散”,方便后续分析或建模
为什么要分箱?
连续数据有时会有 “太细、太散” 的问题,比如:
- 年龄数据(18、22、35…)直接分析难抓规律,但若分成 “青年(18-30)、中年(31-50)、老年(51+)” 就清晰多了;
- 某些算法(如决策树)对离散数据更友好,分箱后能提升模型效果;
- 可以削弱极端值的影响(比如把 “10000 元收入” 和 “9000 元收入” 都归到 “高收入” 箱)。
如何分箱?
- 等距分箱:把数据范围 “平均分” 成若干区间。比如把 0-100 的分数分成 “0-20、21-40、41-60、61-80、81-100”5 个箱,每个箱的区间长度相同。
- 等频分箱:让每个箱子里的数据数量差不多。比如把用户按消费金额分箱,确保每个箱里的用户数大致相等(适合数据分布不均的情况)。
4.4 平滑数据:移动平均
平滑数据:移动平均(Moving Averages)
移动平均(Moving Averages)是一种用于平滑数据、过滤短期波动(噪声)、凸显长期趋势的方法。
它的核心逻辑是:选取连续的N个数据作为 “窗口”,计算窗口内数据的平均值;然后将窗口依次向后滑动 1 个数据,重复计算平均值,最终得到一组 “移动平均值”。
举个例子,某店铺 7 天销量为
20, 85, 30, 90, 25, 88, 32,若用 “3 天移动平均”:
- 第 3 天平均值:((20+85+30)÷3≈45)
- 第 4 天平均值:((85+30+90)÷3≈68.3)
- 以此类推,得到的移动平均值波动远小于原始数据,能更清晰地看出销量的长期走向。
简单来说,移动平均就像给数据 “磨平棱角”,让你不再被偶然的小波动干扰,从而更容易把握数据的整体趋势。
(1)根据对原始数据集的分箱策略,分箱方法可以分为两种:
等深分箱(每个箱中的成员个数相等)
等宽分箱(每个箱的取值范围相同)。
(2)根据每个箱内成员数据的替换方法,分箱方法可以分为
-
均值平滑技术(用每个箱的均值代替箱内成员数据,如上例所示)
-
中值平滑技术(用每个箱的中值代替箱内成员数据)
-
边界值平滑技术(“边界值”指箱中的最大值和最小值,“边界值平滑”指每个值被最近的边界值替换)。
Eg.
5.数据维度及降维处理
5.1 常见的特征选择方法
-
过滤法
先筛选,再建模。把特征看作 “独立个体”,先根据特征自身的统计属性(比如与目标变量的相关性、方差大小)给特征 “打分”,再按分数筛选出高价值特征,最后用筛选后的特征建模。
-
包裹法
“用模型‘试’出好特征”,把特征选择和 “后续要使用的模型” 绑定,将 “特征子集” 当作 “候选对象”,用模型去 “测试” 不同特征子集的效果(比如模型准确率、误差),最终选择让模型效果最好的特征子集。
-
嵌入法
“建模时‘顺便’选特征”,把特征选择 “嵌入” 到模型训练过程中 —— 模型在学习参数(比如线性回归的系数、决策树的分裂节点)时,会 “自动判断特征的重要性”,训练结束后直接输出 “重要性高” 的特征。
5.2 特征创建方法PCA
主成分分析法PCA:“创造新特征”(特征提取)
主成分分析(Principle Component Analysis,PCA)常用于将数据的属性集转换为新的、更少的、正交的属性集
在主成分分析中,第一主成分具有最大的方差值;第二主成分试图解释数据集中的剩余方差,并且与第一主成分不相关(正交);第三主成分试图解释前两个主成分没有解释的方差,以此类推。
主成分分析的方法论基础为线性代数中的奇异值分解(Singular Value Decomposition)。
在 Python 数据科学编程中,通常采用第三方包 sklearn.decomposition 的 PCA()函数进行主成分分析。PCA 函数的参数如下。
PCA(n_components=None, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None,)
-
n_components:降维后输出的 “新特征(主成分)个数”
- 若设为整数(如
n_components=2):直接指定保留 2 个主成分(适合需要固定维度的场景,比如降维后做可视化,通常选 2 或 3)。 - 若设为小数(如
n_components=0.95):表示保留 “能解释原始数据 95% 方差” 的主成分数量 - 若设为
None(默认值):不主动降维,保留所有主成分(等于没做降维,一般不用)。
- 若设为整数(如
-
copy:是否修改原始数据
copy=True(默认):复制原始数据,处理后原始数据不变copy=False:直接在原始数据上做计算,会修改原始数据 -
whiten:是否白化处理,“白化” 是对生成的主成分做进一步处理,让每个主成分的方差为 1
-
svd_solver:用哪种算法做 SVD
svd_solver='full':完整版 SVD 算法,精准但速度慢(适合小数据集,特征数 < 5000)。svd_solver='randomized':随机 SVD 算法,速度快但精度略低(适合大数据集,特征数多或样本量大)。
-
其他参数一般默认即可
Eg.
比如:用 “年龄、收入” 两个原始特征,通过 PCA 计算出 “主成分 1”(可能是 “年龄 ×0.6 + 收入 ×0.8”)和 “主成分 2”(可能是 “年龄 ×0.8 - 收入 ×0.6”),最终用这 2 个新的主成分替代原始特征,实现降维
5.3 主成分分析形式化描述
假设我们有一堆数据,比如 “学生的多门考试成绩”:
单个样本的维度:每个学生有 p 个属性(比如语文、数学、英语… 共 p 门课),可以表示为一个 p 维向量 :
比如某学生的 6 门成绩是:
,这里 (p=6),每个数字对应一门课的成绩。
整个数据集的矩阵形式:如果有 n 个学生(样本),每个学生有 p 个属性,那么整个数据集可以表示为一个 (n ×p) 的矩阵 X。
主成分分析的目的是把原来的 p 个属性,压缩成 m 个((m < p))“综合指标”(主成分),这些综合指标能尽可能保留原始数据的信息。
主成分的定义:第 k 个主成分 (F_k) 是原始属性的线性组合,形式为:
这里的
是一个 “权重向量”,它决定了每门课的成绩在这个主成分里占多少比重。
样本的主成分得分:把第 i 个学生的成绩向量 (x(i)) 代入主成分公式,得到的 (F_ik) 就是 “第 i 个学生在第 k 个主成分上的得分”。
所有样本的主成分矩阵:如果有 n 个学生、m 个主成分,那么所有学生的主成分得分可以组成一个 (n × m) 的矩阵 F,每一行是一个学生的所有主成分得分,每一列是所有学生在某一个主成分上的得分。
主成分分析的形式化描述,本质是 “先把原始数据用矩阵表示清楚,再通过‘属性的线性组合(带权重)’构建出 fewer(更少)的综合指标(主成分),最终用这些综合指标来代表原始数据,达到降维的目的”
5.5 主成分分析的主要步骤
步骤 2:零均值化(让每个属性的平均值为 0)
对矩阵 X 的每一行(每个属性)做 “减平均值” 操作:
先算出某一属性的平均值(比如所有学生的语文平均分);
然后用该属性的每个数据减去这个平均值,得到 “零均值化后的数据”。
这样做是为了消除不同属性 “平均值差异” 的影响,让后续分析更公平。
步骤 4:分解协方差矩阵,找主成分方向
对协方差矩阵 C 做特征分解,得到:
特征值 ):每个特征值对应一个 “主成分能解释的方差大小”,特征值越大,该主成分越重要;
特征向量
:每个特征向量是一个 “方向”,代表主成分的 “权重”(比如某主成分是 “语文 ×0.6 + 数学 ×0.4”,这里的 0.6、0.4 就是特征向量里的元素)。
这些特征向量彼此正交(垂直),保证主成分之间不重复解释方差。
步骤 5:投影降维,得到主成分得分
把零均值化后的矩阵 X 与矩阵 U 相乘,再转置,得到 (n ×m) 的矩阵 F:
- 这个矩阵里的每个元素,就是原始数据在 “主成分坐标轴” 上的投影值(即主成分得分);
- 原本 n 个样本、p 个属性的数据,现在变成了 n 个样本、m 个主成分的数据,实现了降维。
PCA 的步骤就是:整理数据→消除均值差异→分析属性间的相关性和波动→找出最能代表差异的几个方向→把数据投影到这些方向上,得到少数几个主成分。这样既保留了原始数据的大部分信息,又大大减少了数据维度,方便后续分析。
5.4 推广到高维空间
对于多维的情况和二维类似,也有高维的椭球,无法直观地看见;
首先把高维椭球的主轴找出来,再用代表大多数数据信息的最长的几个轴作为新变量;
这样,主成分分析就基本完成了。主轴是互相垂直的。这些互相正交的新维度变量是原先维度的线性组合,叫做主成分(principal component)。
6.数据脱敏及其处理
数据脱敏,核心:“让数据‘可用不可识’—— 保留数据的分析、业务价值,同时隐藏或破坏能识别个人 / 敏感主体的信息,避免隐私泄露”
7.数据预处理方法
7.1 数据加工动机
数据加工的主要动机往往来自两个方面:
- 数据质量要求:在数据处理过程中,原始数据中可能存在多种质量问题(如存在缺失值、噪声、错误或虚假数据等),将影响数据处理算法的效率与数据处理结果的准确性。
- 数据计算要求:当原始数据质量没有问题,但不符[合目标算法的要求(如对数据的类型、规模、取值范围、存储位置等要求)时, 我们也需要进行数据加工操作。
7.2 数据预处理主要任务
- 数据清洗
- 缺失值填充(本文第三章)
- 平滑噪声(本文第四章)
- 识别和去除离群点(本文第四章)
- 解决不一致性
7.3 评价数据质量的指标
-
完整性(Completeness):记录的缺失,一个对象遗漏一个或多个属性值
分为以下几个类别
- 实体完整性(Entity Integrity)
- 域完整性(Domain Integrity)
- 参照完整性(Referential Integrity)
完整性的核心是数据有没有缺漏,关注记录或者属性值的确实情况
实体完整性:如主键不重复、不缺失,确保每条记录唯一
域完整性:如属性值符合预设范围,比如 “年龄” 不能是负数
参照完整性:如关联表中的外键必须在主表中存在,比如 “订单表” 的 “用户 ID” 需在 “用户表” 中可查
- 一致性(Consistency):多个数据之间更新的同步,包括数据记录的规范与数据逻辑的一致性
核心是 “数据之间是否矛盾”,确保多来源 / 多记录的数据逻辑统一,比如
- 记录规范一致(如 “性别” 统一用 “男 / 女” 而非 “1/0”“Male/Female” 混用)
- 逻辑关系一致(如 “订单金额 = 单价 × 数量”,若计算结果不匹配则不一致)
- 时效性(Timeliness): 数据是否及时更新
- 可信性(Believability):来源可信和值可信
- 解释性(Interpretability)
7.4 数据的汇总统计Data Summarization
目标:量化的,用单个数或小集合捕获可能很大的值集的各种特征
描述数据集中趋势(central tendency)的度量:Mean(均值), median(中位数), mode(众数), midrange(中列数):最大和最小值的均值
描述数据离散程度(dispersion)的度量:Quartiles(四分位数), interquartile range (IQR):四分位数极差, and variance(方差)
更多推荐
:每个特征向量是一个 “方向”,代表主成分的 “权重”(比如某主成分是 “语文 ×0.6 + 数学 ×0.4”,这里的 0.6、0.4 就是特征向量里的元素)。
所有评论(0)