kaggle泰坦尼克数据之数据清洗及特征处理

2 第二章:数据清洗及特征处理

我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗,本章我们将学习缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的亚子。

2.1 缺失值观察与处理

我们拿到的数据经常会有很多缺失值,比如我们可以看到Cabin列存在NaN,那其他列还有没有缺失值,这些缺失值要怎么处理呢

2.1.1 任务一:缺失值观察

(1) 请查看每个特征缺失值个数

查看数据信息

df.info()

在这里插入图片描述
查看缺失值个数

df.isnull().sum()

在这里插入图片描述
(2) 请查看Age, Cabin, Embarked列的数据

df.loc[:,['Age', 'Cabin', 'Embarked']].head()

在这里插入图片描述

2.1.2 任务二:对缺失值进行处理

(1)处理缺失值一般有几种思路

(2) 请尝试对Age列的数据的缺失值进行处理

(3) 请尝试使用不同的方法直接对整张表的缺失值进行处理

#使用年龄均值填补缺失值
df.loc[:,"Age"].fillna(df.loc[:,"Age"].mean(), inplace = True)
df.loc[:,"Age"].isnull().sum()
#删除Cabin列
df.drop("Cabin", axis=1, inplace=True)
#删除Embarked缺失行
df.dropna(inplace=True)
df.isnull().sum()

在这里插入图片描述

2.2 重复值观察与处理

2.2.1 任务一:请查看数据中的重复值
for i in range(df.columns.shape[0]):
    print(df.columns[i], 'duplicate', df.duplicated(subset=df.columns[i]).sum())

在这里插入图片描述

2.2.2 任务二:对重复值进行处理
df.drop_duplicates(inplace=True)
2.2.3 任务三:将前面清洗的数据保存为csv格式
df.to_csv("test_clear.csv")

2.3 特征观察与处理

我们对特征进行一下观察,可以把特征大概分为两大类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征,数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。

2.3.1 任务一:对年龄进行分箱(离散化)处理

(1) 分箱操作是什么?
可以将连续数值转换成为离散区间。

(2) 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示

df.loc[:, 'AgeBand'] = pd.cut(df.loc[:, 'Age'], bins=5, labels=[1,2,3,4,5])
df.head()

(3) 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示

bins = [0, 5, 15, 30, 50, 80]

df.loc[:, 'AgeBand'] = pd.cut(df.loc[:, 'Age'], bins = bins, right=False, labels=[1,2,3,4,5])
df.head()

(4) 将连续变量Age按10% 30% 50% 70% 90%五个年龄段,并用分类变量12345表示

q = [0, 0.1, 0.3, 0.5, 0.7, 0.9]
df.loc[:, 'AgeBand'] = pd.qcut(df.loc[:, 'Age'], q = q, labels=[1,2,3,4,5])
df.head()

(5) 将上面的获得的数据分别进行保存,保存为csv格式

2.3.2 任务二:对文本变量进行转换

(1) 查看文本变量名及种类

#方法一: value_counts
df.loc[:, 'Sex'].value_counts()
#方法二: unique
df.loc[:, 'Sex'].unique()

(2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示

#方法一: replace
df.loc[:, 'Sex_num'] = df.loc[:, 'Sex'].replace(['male', 'female'], [0, 1])

#方法二: map
df.loc[:, 'Sex_num'] = df.loc[:, 'Sex'].map({'male':0, 'female':1})

#方法三: 使用sklearn.preprocessing的LabelEncoder
from sklearn.preprocessing import LabelEncoder
lbl = LabelEncoder() 
lbl.fit_transform(df.loc[:, 'Sex'])

df.head()

(3) 将文本变量Sex, Cabin, Embarked用one-hot编码表示

#方法一: 使用sklearn.preprocessing的OneHotEncoder
from sklearn.preprocessing import OneHotEncoder
ohenc = OneHotEncoder() 
df.loc[:, ['male','female']] = ohenc.fit_transform(np.array(df.loc[:, 'Sex_num']).reshape(-1,1)).toarray()
df.head()

#方法二: 使用get_dummies
pd.get_dummies(df.loc[:, 'Sex'])

在这里插入图片描述

2.3.3 任务三:从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)
df.Name.str.extract('([a-zA-z]+\.)')

在这里插入图片描述

df.Name.str.extract('([a-zA-z]+\.)').value_counts()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值