关于TiTanic存活预测实战(二、数据清洗)

一、前言

  上一节已经对这次的实战北京做了介绍,这一节主要介绍数据清洗。

  唯一的就是,今天大年三十,祝大家新年快乐,来年事业、家庭都能如意!!!

二、实战-数据清洗

  导入库

#导入库
import
pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline

  加载并合并数据集,合并一起,方便清洗

data_test = pd.read_csv('test.csv')
data_train = pd.read_csv('train.csv')
data_train['status'] = 'train'
data_test['status'] = 'test'
#data_train = data_train.drop(['Survived'],axis=1)
df_data = pd.concat([data_train,data_test],axis=0,ignore_index=True)

  看一下合并后的情况

df_data.head(4)

1、Pclass

上一节中,我们可以看到,船舱的等级越高,存活的越多,这里我做了一下onehot

df_pclass = pd.get_dummies(df_data.Pclass,prefix='Pclass')#onehot
df_data = pd.concat([df_data,df_pclass],axis=1,ignore_index=False)#把onehot的数据合并到df_data中
df_data.drop(['Pclass'],axis=1,inplace=True)#把原来的列Pclass删除

2、Name、Ticket

这个感觉不用处理,直接删除就好。

df_data.drop(['Name','Ticket'],axis=1,inplace=True)

3、Cabin 空的太多,懒得弄了,也直接干掉

df_data.drop(['Cabin'],axis=1,inplace=True)

4、Sex,map处理一下

df_data.Sex = df_data.Sex.map({'male':0,'female':1})#male变成0,female变成1

5、Age

Age还有很多空的,先暴力填充一下平局值

df_data.Age.fillna(df_data.Age.mean(),inplace=True)

然后再分段处理

def get_age(age):
    if 0<age <= 8:
        return 0
    if 8<age<=15:
        return 1
    if 15<age<=22:
        return 2
    if 22<age<=30:
        return 3
    if 30<age<=38:
        return 4
    if 38<age<=48:
        return 5
    if 48<age<=58:
        return 6
    if 58<age:
        return 7
    else:
        return 8
df_data.Age = df_data.Age.apply(get_age)

因为之前分析,发现Age这个和存活不是线性关系,所以做一下onehot吧

df_age = pd.get_dummies(df_data.Age,prefix='Age')
df_data = pd.concat([df_data,df_age],axis=1)
df_data.drop(['Age'],inplace=True,axis=1)

6、SibSp

df_data.SibSp.value_counts()

这里可以看到,大于3的其实很少,把大于3的都归为一类吧

df_data.SibSp = df_data.SibSp.map(lambda x:x  if x <3 else 3)

再做一下onehot encoding

df_sibsp = pd.get_dummies(df_data.SibSp,prefix='SibSp')
df_data = pd.concat([df_data,df_sibsp],axis=1)

7、Parch

和上面一样的处理方法

df_data.Parch = df_data.Parch.map(lambda x:x if x<3 else 3)
df_Parch = pd.get_dummies(df_data.Parch,prefix='Parch')
df_data = pd.concat([df_data,df_Parch],axis=1)

8、增加一列,family

df_data['Family'] = df_data.Parch + df_data.SibSp
df_data.Family = df_data.Family.map(lambda x:x if x<3 else 3)
df_Family = pd.get_dummies(df_data.Family,prefix='Family')
df_data.drop(['Parch','SibSp','Family'],axis=1,inplace=True)

9、Embarked 这个处理 one-hot一下吧

df_embarked = pd.get_dummies(df_data.Embarked,prefix='embarked')
df_data = pd.concat([df_data,df_embarked],axis=1)
df_data.drop(['Embarked'],axis=1,inplace=True)

10、Fare做一下归一化

因为有空值,先填充平均值,在除以平均值做一下归一化,也可以用StandardScaler做

df_data.Fare.fillna(df_data.Fare.mean(),inplace=True)
df_data.Fare = df_data.Fare/df_data.Fare.mean()

11、PassengerId 干掉

df_data.drop(['PassengerId'],axis=1,inplace=True)

12、清理完成,保存

df_train = df_data.loc[df_data.status == 'train']
df_test = df_data.loc[df_data.status == 'test']
df_train.to_csv('df_train.csv',index=False)
df_test.to_csv('df_test.csv',index=False)

至此,清理工作完成,当然也可以发挥想象力,做其他处理

猜你喜欢

转载自www.cnblogs.com/rgzngf/p/12231864.html