一、数据清洗的总体步骤
打开telco.sav文件
看下数据清洗的步骤,要拷贝(因为这里是样本,所以不用做这一步),所以直接做第二步创建唯一ID
这一步创建了唯一ID,点击转换按钮---计算变量-目标变量填写ID--选择函数$casenum点击确定就可以了
接下来我们要生成数据质量报告,可以用分析按钮-描述统计-频率来做,选取除了ID外的所有字段(因为ID不需要检查),点击确定,生成结果。
可以看到,有四个字段有缺失值,接下来每个变量都要仔细的看
zone这里每个zone都是有效的
age这个字段变量都在合理范围,年龄分布从18到77岁,但是如果这里突然出现
一个100岁的,或者11岁的,我们就要看看,回顾下数据采集过程,这个数据是否错误,或者是异常。。这个地方就是我们需要注意的点
二、错误值处理原理和实操
以年龄字段为例,如果有一个值是118,那我们可以通常认为是手抖的缘故输入错误,其实年龄是18岁(改为相似的),如果找不到相似的,找原始数据库去复合,实在找不到就把这一条数据删掉
三、异常值处理原理
方法论如上,通常用标准分法或者四分位法判断,通常不会删除掉空值,因为获取数据很容易,函数法也很少用,因为用模型去判断只有再很理想的情况下才行。比较常用的是最值或者均值,比如区间在[1,100],有个值是0.8,我们可以用1代表0.8
四、缺失值处理原理
变成指示变量- 有些时候受访者不会告诉你工资,所以收入这个字段很难回答全,但是这个字段有很宝贵,即使只有30%的人愿意回答,我们还是想保留,所以把回答的变成0,不回答的为1,作为指示变量。
自动填补法
针对分类变量
1)用特殊的数字,比如99来代表缺失,只是指示作用,99最后不会带入计算
2)如果性别没填,假设男性70%,女性30%,那么我们可以把性别填上男性
3)这里其实是大数据,比如用户很喜欢买包,性别可以判断为女,现在互联网算标签,就是这样子
针对连续变量
1)很少用众数,因为连续变量值很多,众数的概率很少,以年龄字段为例,众数是33,但是有1000个人,你取33概率很小
2)均值是更加常用的手段
4)建模很少用,因为很麻烦。总共两个人缺失,还去建模,太花时间,模型准确率还不高。
五、异常值和缺失值处理(实操)
异常值处理
点击分析按钮-描述统计-描述-添加收入income字段进行标准分法的处理(3σ)-勾选标准化值另存为变量(Z值)-点击确定
标准化后看到了多了一个字段,zincome,是标准化后的数据,相应的z大于3就是异常值,大于5是极端值,建模型的时候可以删除掉,先删大于5,效果不好继续删掉异常值(>3)
以上是异常值的处理
缺失值处理
点击转换-替换缺失值-选择要填补缺失值的字段(这里我们选择年龄,随便删掉几个数据,这个字段就缺失了,可以做演示用)。可以发现有多个替换缺失值的选项:
- 序列平均值: 整列的平均值去补充该列
- 临近点平均值,中位数:可以选择空缺数据旁边几个值的平均数,但是有个前提,必须有时间序列才行,否则的话,把其他字段进行排序,临近数据就会发生改变。
-
线性差值:就是线性回归来拟合,生产一条线,把数值放在拟合的线上就可以。
-
第四种方法就是相似值法,比如我们可以认为和缺失值比教育程度一致,性别一致的就是相似值,把所有相似值的平均数填入缺失空格。
我们点击数据-选择个案-点击如果条件满足-点击如果-弹出以下界面
假定缺失值的教育水平=3,性别=1,所以我们这里条件也这么写
可以看到相似条件的数据没有被线划掉
我们把没有被划掉的数据做描述统计-描述(如上图)
生成描述结果如上,平均值是40.77,我们可以把这个值作为缺失值。但是其实我们仔细观察,可以发现,我们这样选相似 值,最小值是20,最大值是76,分布范围很大,其实并不怎么相似,所以我们可以继续优化,选择其他变量,或者更多的变量来选定相似值。在报告中我们也可以把我们用了哪些字段作为相似值判定的标准提出来,作为依据。