[kaggle数据] 泰坦尼克号生存预测分析

一、案列背景

1912年,泰坦尼克号在第一次航行中就与冰山相撞沉没,导致了大部分乘客和船员身亡。泰坦尼克号生存预测分析作为kaggle入门项目,我们将根据部分泰坦尼克号旅客名单,来筛选哪些特征可以最好地预测一个人是否会生还。

泰坦尼克号全长约269.06米(882.75英尺),宽28.19米(92.5英尺)。共有五层甲板(分别为A-E甲板),分为头等舱,二等舱,三等舱三个等级的船舱,从英国南安普敦出发开往美国纽约,途径法国瑟堡-奥克特维尔,爱尔兰昆士敦两个港口。在途中与冰山相撞,安排救生艇时,由头等舱到三等舱就进行撤离。妇女孩子优先离开。

以上为查阅所得信息,可以更好的理解数据集中的特征。

从上述中我们可以得出几个可能对生存预测有很大影响的结论:
1、妇女、小孩生还概率较高
2、1代表头等舱,2代表二等舱,3代表三等舱
3、A甲板为头等舱,B、C甲板可能为二等舱,D、E甲板可能为三等舱
4、C 代表从法国瑟堡-奥克特维尔港口(Cherbourg),Q 代表爱尔兰昆士敦(Queenstown ),S 代表英国南安普敦(Southampton )


二、数据加载

#numpy,pandas
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

#plot
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns

#load
train_df = pd.read_csv('train.csv')
test_df = pd.read_csv('test.csv')
full_df=pd.concat([train_df,test_df],ignore_index=True)
full_df.head()

这里写图片描述

Survived:是否存活(0代表否,1代表是)
Pclass:船舱阶级
Name:乘客的名字
Sex:乘客的性别
Age:乘客的年龄
SibSp:乘客在船上的兄弟姐妹和配偶的数量
Parch:乘客在船上的父母以及小孩的数量
Ticket:乘客船票的编号
Fare:船票费用
Cabin:船舱的座位号
Embarked:乘客上船的港口


三、观察数据

对数据集进行整体观察

# 查看数据框的大小
train_df.shape    #(891, 12)

test_df.shape     #(418, 11)

full_df.shape     #(1309, 12)

训练集和测试集合并后共有条1309条观测,12个变量

#查看各个变量的观测数和变量类型
full_df.info()

这里写图片描述
数据集有浮点型变量3个,整数变量4个,共7个数值型变量,字符串变量5个。

#检查异常和极端值(观察最大值和最小值)
full_df.describe().T

这里写图片描述

#查看各个变量的缺失个数
full_df.isnull().sum()

这里写图片描述
数据集中,缺失值的变量为:Age、Cabin、Embarked、Fare。其中Cabin几乎都缺失。


四、特征工程

因为是对生存预测进行分析,所以主要是对Survived和其他变量进行可视化分析,可以在一定程度上观察他们间是否相关。

1、Pclass

fig, (axis1,axis2,axis3) = plt.subplots(1,3,figsize=(15,4))

train_df.Pclass.value_counts().plot(kind="bar",color='steelblue',ax=axis1)
axis1.set_xticklabels([3,1,2],rotation=0)
axis1.set_ylabel(u'人数',fontproperties='SimHei')
axis1.set_xlabel('Pclass')

pd.crosstab(train_df.Pclass,train_df.Survived).plot.bar(stacked=True,color=['#FA2479','steelblue'],ax=axis2)
axis2.set_xticklabels([1,2,3], rotation=0)
axis2.set_ylabel(u'人数',fontproperties='SimHei')


pd.pivot_table(train_df,index=['Pclass'],values=['Survived']).plot.bar(ax=axis3,color='steelblue')
axis3.set_xticklabels([1,2,3], rotation=0)

axis1.set_title(u"乘客等级分布",fontproperties='SimHei')
axis2.set_title(u"各乘客等级的获救情况",fontproperties='SimHei')
axis3.set_title(u"生存概率",fontproperties='SimHei')

这里写图片描述
从图中可以看到,不同等级的舱位,生存几率也不同。高等舱位生存几率越大。

·

2、Name

数据集中的姓名有个特点,姓名中间是称谓名称,并且用符号与其他部分隔开。
联系现实生活,称谓可以在一定程度上反映一个人的职业,年龄。所以我对名字中的称谓进行了提取。

#对字符串按符号进行分裂提取
full_df['Title']=full_df['Name'].apply(lambda x: x.split(',')[1].split('.')[0].strip())  
full_df.Title.value_counts()

Mr              757
Miss            260
Mrs             197
Master           61
Dr                8
Rev               8
Col               4
Major             2
Ms                2
Mlle              2
Capt              1
the Countess      1
Jonkheer          1
Sir               1
Don               1
Lady              1
Mme               1
Dona              1
Name: Title, dtype: int64

提取出来的称谓中包含英,法,西班牙语的不同叫法,把他们进行归类。
最终分成了5类。

full_df['Title'] = full_df['Title'].replace(['Capt', 'Don', 'Major', 'Col', 'Sir','Rev'], 'Mr')
full_df['Title'] = full_df['Title'].replace(['Ms','Mlle'], 'Miss'
  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值