数据预处理(1) ——数据清洗 使用python(sklearn,pandas,numpy)实现

数据预处理的主要任务有:

一、数据预处理

1.数据清洗

2.数据集成

3.数据转换

4.数据归约


1.数据清洗
现实世界的数据一般是不完整的、有噪声的和不一致的。数据清理例程试图填充缺失的值,光滑噪声并识别离群点,纠正数据中的不一致。


(以上为使用的数据)

①忽略元组:当缺少类标号时通常这样做。除非元组有多个属性缺少值,否则该方法不是很有效。

import pandas as pd
data=pd.read_csv('train.csv')
data.drop('Cabin',axis=1,inplace=True)

②人工填写缺失值:一般情况下,该方法很费时。
③使用一个全局常量填充缺失值:将缺失值用同一个常数(如Unknown或﹣∞)替换。如果缺失值都用Unknown替换,则挖掘程序可能误认为它们形成了一个有趣的概念,因为它们都具有相同的值“Unknown”。因此此方法虽然简单但不可靠。

data.Cabin.fillna('unknown',inplace=True)
#data里cabin的用unknown填充
④使用属性的均值填充缺失值:例如,假定顾客的平均收入为56000美元,则使用该值替换income中的缺失值。

 data.Age.fillna(data.Age.mean(),inplace=True)
#Age里的缺失值用Age的平均数填充

⑤使用与给定元组属同一类的所有样本的属性均值,例如,将顾客按credit_risk分类,则用具有相同信用度给定元组的顾客的平均收入替换income中的缺失值。



 
⑥使用最可能的值填充缺失值:可以用回归、使用贝叶斯形式化的基于推理的工具或决策树归纳确定。例如,利用数据集中其他顾客的属性,可以构造一棵决策树来预测income的缺失值。 

col=['Pclass', 'SibSp', 'Parch', 'Fare', 'Cabin', 'Embarked', 'female', 'male']
#选出不含空值的属性  注意:这里的数据已经做过处理,已经把字符串型转为数字型
notnull=data[pd.notnull(data.Age)]
isnull=data[pd.isnull(data.Age)]
from sklearn.ensemble import GradientBoostingRegressor
G=GradientBoostingRegressor()
G.fit(notnull[col].values,notnull.Age)
isnull.Age=G.predict(isnull[col])
data.Age[pd.isnull(data.Age)]=isnull.Age

(2)噪声数据处理
噪声(noise)是被测量的变量的随机误差或方差。给定一个数值属性(如price),怎样才能光滑数据,去掉噪声?下面介绍数据光滑技术。
①分箱(binning):分箱方法通过考察数据的“近邻”来光滑有序数据的值。有序值分布到一些桶或箱中。由于分箱方法考察近邻的值,因此是对数据进行局部光滑。
例如:price排序后数据(美元):4,8,15,21,21,24,25,28,34
划分为(等频)箱:
箱1:4,8,15
箱2:21,21,24
箱3:25,28,34

c=[4,8,15,21,21,24,25,28,34]
c=pd.Series(c)
s=pd.qcut(c,[0,0.33,0.66,1])
pd.groupby(c,by=s).mean()

用箱均值光滑:
箱1:9,9,9

箱2:22,22,22

箱3:29,29,29

pd.groupby(c,by=s).min()

用箱边界光滑:
箱1:4,4,15

箱2:21,21,24

箱3:25,25,34

pd.groupby(c,by=s).max()
pd.groupby(c,by=s).min()


②回归:可以用一个函数(如回归函数)拟合数据来光滑数据。


③聚类:可以通过聚类检测离群点,将类似的值组织成群或簇。直观地,落在簇集合之外的值视为离群点。

from sklearn.cluster import KMeans
c=[4,8,15,21,21,24,25,28,34]
K=KMeans(n_clusters=3)
import numpy as np
c=np.array(c)
c=c.reshape(9,1)
K.fit(c)
center=K.cluster_centers_
c=center[K.predict(c)]
print c
!!!光滑的方法还有很多

(3)数据不一致的处理
作为一位数据分析人员,应当警惕编码使用的不一致问题和数据表示的不一致问题(如日期“2004/12/25”和“25/12/2004”)。字段过载(field overloading)是另一种错误源,通常是由如下原因导致:开发者将新属性的定义挤压到已经定义的属性的未使用(位)部分(例如,使用一个属性未使用的位,该属性取值已经使用了32位中的31位)。

参考文献https://www.douban.com/note/128949687/
本人小白,能力有限,若有错误,请大家指正。

  • 3
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值