数据清洗
程序员文章站
2024-03-07 16:55:09
...
目录:
正文:
一、预处理阶段
1、清楚使用这批数据的目的
是分层模型还是一般模型
2、判断数据的储存位置
判断是数据库还是表
#使用数据库+Python操作的方式:
from pyhive import hive
conn=hive.Connection(host='10.162.160.131', port=1026, username='sjjs_sh02', database='sjjs_sh02') #接口可用自己的
cursor= conn.cursor()
cursor.execute('select * from clftest1')
l=cursor.fetchall()
#从表中导入数据
import csv
with open("delcity.csv","r") as csvfile:
reader = csvfile.readlines()
#open()函数会创建一个对象,通过这个对象对文件进行处理 ,处理结束通过close()方法关闭文件。
如果数据量是可以无特别安全要求的文件的话,建议直接读取文件(因为可操作性强)
如果数据在平台上或者云端就有对应的取数据的命令,如:爬虫、hadoop
3、直观了解
- 拥有的字段,如:字段的位置和名称,flase_flag
- 字段有没有丢失:如:7个字段结果只有6个字段的数据
- 数据的类型,如:数据时间类型的格式摸样
4、看数据
- 字段解释,如:有些数据是用0-n表示分类的,有些是用字符型表示分类的
- 数据来源,如:每次开关机都会记录、屏蔽了黑名单
- 查看代码表,了解如何从数据库里提出的数据,如:用户资料月表
- 是否是衍生字段,如:被打上滴滴司机标签的用户 & Arpu1,Arpu2
- 根据数据的格式来判断数据的
等等一切描述数据的信息;
Recommend:抽取一部分数据,使用人工查看方式,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。
数据的规模:决定了采用什么样的建模方法
数据的范围:决定了什么样的scaling方法和是否要考虑离群点
二、缺失值清洗
缺失值是最常见的
1、确定缺失值范围
对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略,可用下图表示:
2、去除不需要的字段
如:处理子类问题的父类变量
Recommend:直接删掉即可,记得每次清洗每做一步都记录一下。
3、填充缺失内容
- 以业务知识或经验推测缺失值,如:不愿意透露信息
- 以同一指标的计算结果填充如均值填充缺失值,如:年龄
- 填充缺失值的复杂方法,如:bootstrap重复抽样的思想(还有非常非常多的方法,很多讲统计方法或统计工具的书籍会提到)
三、格式清洗
如果数据是由系统日志而来,那么通常在格式和内容方面,会与元数据的描述一致。而如果数据是由人工收集或用户填写而来,则有很大可能性在格式和内容上存在一些问题
1、格式不一致
- 日期等格式不一致,如:数据库和前端接口交互
- 各种各样的数据格式,如:寄送地址信息
- 无法统一的数据格式,如:人名、电话
-
数据类型不一致:list、tuple、array相互转换
将上述格式处理成一致即可
2、内容中有不该存在的字符
- 处理不符合接口的数据,如:报警变量的0/1分组
- 处理不符合逻辑的数据,如:在报警地市里有-1这一分组
3、有系统含义的数据
- 与众不同的格式,如:奇怪的号码——测试号码或者重要性很强的号码
四、逻辑错误清洗
去掉一些使用简单逻辑推理就可以直接发现问题的数据
1、去重
- 完全相同的字段:如:重复号码
- 相同意义的字段:如:寄送地址
2、去除不合理值
- 去除不符合字段格式的值,如:不是1开头的手机号
- 去除异常值,如:年仅20岁的千万富翁(可以使用散点图、箱形图查找)
五、非需求数据清洗
删删删
- 把不需要的字段删了。
- 把看上去不需要的字段删了。
- 把看上去不需要但实际上对结果很重要的字段删了。
- 把看上去不需要但实际上对结果很重要但影响稳定性的字段删了。
- 把看上去不需要但实际上对结果很重要但影响稳定性但对模型效果又提升的字段删了。
六、相关性检验
1、数值型变量
#pandas
Import pandas as pd
dfab = pd.DataFrame(tt, columns=['1', '2','3','4','5','6','7'])
dfab.corr()
#numpy
import numpy as np
np.cov(tt)
2、字符/分类型
列联表检验
上一篇: PHP中单例模式与工厂模式详解