泰坦尼克号生存预测分析"/>
[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'
更多推荐
[kaggle数据] 泰坦尼克号生存预测分析
发布评论