学习目标:
了解数据清洗的流程以及数据的特征处理
学习内容:
1、 掌握数据清洗方法
2、了解数据,并对数据的特征处理
学习产出:
1、掌握数据清洗方法
1.1 准备好数据
# 导入需要的库
import numpy as np
import pandas as pd
# 读取csv
df = pd.read_csv('train.csv')
1.2 数据预处理
第一步:缺失值处理,有两种方法,一是删除,二是填充
# 方法一:删除
# 删除所有有缺失值的行
df.dropna()
# 只删除全为nan值的行
df.dropna(how='all')
# 删除指定缺失值的行
df.dropna(subset=['Age'])
# 方法二:填充
# 将Age缺失值填充成10
df.fillna({'Age':10})
# 后向前填充数据
df['Age'].fillna(method='bfill')
# 前向后填充
df['Age'].fillna(method='ffill')
第二步:重复值处理,删除重复值
# 删除重复值,保留第一个
df.drop_duplicates(subset=['Age'], keep='first')
# 删除重复值,保留最后一个
df.drop_duplicates(subset=['Age'], keep='last')
# 删除所有重复值
df.drop_duplicates(subset=['Age'], keep=False)
第三步:异常值的检测与处理
检测方法:
1、3σ准则
3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值(P(|x-u| > 3∂) <= 0.003)。且3σ适用于有较多组数据的时候。
正态分布状况下,数值分布表:
数值分布 | 在数据中的占比 |
---|---|
(μ-σ,μ+σ) | 0.6827 |
(μ-2σ,μ+2σ) | 0.9545 |
(μ-3σ,μ+3σ) | 0.9973 |
注:在正态分布中σ代表标准差,μ代表均值,x=μ为图形的对称轴
# 定义3σ法则识别异常值函数
def three_sigma(data):
'''
data:表示传入DataFrame的某一列。
'''
rule = (data.mean()-3*data.std()>data) | (data.mean()+3*data.std()< data)
index = np.arange(data.shape[0])[rule]
outrange = data.iloc[index]
return outrange
three_sigma(df['Age'])
2、箱线图法
#将连续变量Fare平均分箱成5个价格段
df['FareBand'] = pd.cut(df['Fare'], 3,labels = [1,2,3])
#将连续变量Fare划分为(0,100] (100,200] (200,300] (300,400] (400,513)的5个价格段
df['FareBand'] = pd.cut(df['Fare'],[0,100,200,300,400,512],labels = [1,2,3,4,5])
将连续变量Fare按10% 30% 50 70% 90%5个价格段
df['FareBand'] = pd.qcut(df['Fare'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])
df.head(3)
处理方法:
检测到了异常值,我们需要对其进行一定的处理。而一般异常值的处理方法可大致分为以下几种:
1、缺失值处理方法:删除和填充
2、可根据情况判断异常值是否需要处理
第四步:数据类型转换
# 查看数据类型
df['Fare'].dtype
# 将float64转int类型
df['Fare'].astype("int")
数据来源:https://github.com/datawhalechina/hands-on-data-analysis.git