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

Posted rgzngf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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)

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

 

以上是关于关于TiTanic存活预测实战(数据清洗)的主要内容,如果未能解决你的问题,请参考以下文章

关于TiTanic存活预测实战(建模预测)

泰坦尼克Titanic乘客生存预测

泰坦尼克Titanic乘客生存预测

预测Titanic号上的乘客生存概率_03_优化训练集

坦克尼克号存活率预测

TensorFlow简单实例:titanic实战