概述
本篇文章为《数据挖掘概念与技术》第三章的整理和代码补充, 主题为数据预处理, 在书中多次提到在数据库中的数据预处理, 根据笔者的理解, 本章提到的数据预处理更多的存在数据挖掘的准备阶段, 在实际的工作场景中, ETL的工作是将数据原封不动的插入表中, 不会改变数据情况, 只有运用数据做数据分析,数据挖掘的时候才会做相应的处理操作。
获取第三章的思维导图文件, jupyter代码文件和数据集可以在我们的公众号"数据臭皮匠" 中回复"第三章1" 获取
1.数据清理
缺失值处理
处理缺失值得几种方法,了解下就好,深究也没意思,需要在建模的过程中逐步体会每一种方法的优缺点,换了缺失值的处理方法,可能对预测结果也没啥影响,也可能影响很大,需要一点点提升模型精度的时候可以逐个试下,上图中的处理方法从上到下越来越靠谱,但实现起来也愈加麻烦。
噪声数据处理
噪声处理,我觉得回归的方法用的最少,分箱在建立逻辑回归时用的很多,离群点分析显得不够成体系,明显的数据错误会处理下,更隐蔽的异常值需要在遇到的时候再处理
2.数据集成 冗余和相关分析
卡方检验
import pandas as pd
df = pd.DataFrame([[250,200],[50,1000]],columns=['男','女'],index=['小说','非小说'])
df
def cal_Chi_Squared_val(df):
"""从列联表计算出卡方值"""
res = []
# 计算values的和
num_sum = sum(df.values.flatten())
for i in range(df.shape[0]):
for j in range(df.shape[1]):
# 计算位置i,j上的期望值
e = sum(df.iloc[i,:])*sum(df.iloc[:,j])/num_sum
tt = (df.iloc[i,j]-e)**2/e
res.append(tt)
return sum(res)
#