背景:

1912年4月15日,泰坦尼克号在它的处女航中撞上冰山后沉没。造成2224名乘客和1502名机组人员遇难。

这场悲剧轰动了国际社会。沉船导致遇难的原因之一是没有足够的救生艇给乘客和船员。虽然在这场灾难中幸存下来有一些运气在里面,但一些人比其他人更有可能幸存,比如妇女,儿童和上层阶级。




泰坦尼克号遇难人数python 泰坦尼克号遇难人数加5_数据


本次分享中我们将使用python对这些幸存者情况进行分析。哪些人会在这场灾难中幸存下来?

数据准备

首先拿到泰坦尼克号人员的数据。该数据集包含1309个人,并记录了他们14项个人信息情况。部分数据情况如下:


泰坦尼克号遇难人数python 泰坦尼克号遇难人数加5_泰坦尼克号遇难人数python_02


survival - 是否幸存(0=幸存,1=遇难)

pclass - 船票类型(1=一等票,2=二等票,3=三等票)

sex - 性别

age - 年龄

sibsp - 泰坦尼克号上该人员兄弟姐妹的数量

parch - 泰坦尼克号上该人员父母或者子女的数量

ticket - 船票编号

fare - 乘客票价

cabin - 客舱号码

embarked - 起航运港(C = Cherbourg, Q = Queenstown, S = Southampton)

boat - 救生艇的编号(如果幸存)

body - 人体编号(如果遇难并且尸体被找到)

home.dest - 出发地到目的地

数据分析

1总体生还率分析

titanic_df['survived'].mean()0.3819709702062643

结果显示仅有38%左右的乘客幸存下来。其主要原因是泰坦尼克号上并未携带足够的救生艇,只有20艘,这对于1317名乘客和885名机组人员来说是远远不够的。

2按乘客阶级地位进行分析

titanic_df.groupby('pclass').mean()


泰坦尼克号遇难人数python 泰坦尼克号遇难人数加5_决策树_03


我们可以看出来,头等舱的乘客有62%的生还几率。相比之下,三等舱的乘客只有25.5%的生还概率。此外客舱越豪华,乘客的年纪也就越大。

3按乘客年纪和性别进行分析

对性别进行分析:

class_sex_grouping = titanic_df.groupby(['pclass','sex']).mean()class_sex_groupingclass_sex_grouping['survived'].plot.bar(figsize=(12, 7), fontsize=12)


泰坦尼克号遇难人数python 泰坦尼克号遇难人数加5_建模_04


从上面的分析中可以看出来,在惨剧发生的时候大家倾向于首先疏散女性。在所有的阶层中,女性都比男性更有可能生存下来。

对年纪进行分析:

group_by_age = pd.cut(titanic_df["age"], np.arange(0, 90, 10))age_grouping = titanic_df.groupby(group_by_age).mean()age_grouping['survived'].plot.bar(figsize=(12, 7), fontsize=12)


泰坦尼克号遇难人数python 泰坦尼克号遇难人数加5_决策树_05


显然,儿童的生还比例是最高的,在本次灾难中儿童也得到了充分的优先照顾。

测试你在泰坦尼克号上能否生还:

在本次分析中,我们使用决策树进行建模。使用到的乘客个人信息包括:年龄,性别,舱位等级,船上兄弟姐妹数量,船上父母与子女的数量,票价,以及起航运港。

处理后的数据:


泰坦尼克号遇难人数python 泰坦尼克号遇难人数加5_决策树_06


使用决策树建模:

from sklearn.tree import DecisionTreeClassifierclf_dt = DecisionTreeClassifier(max_depth=10)

模型建好了,终于,可以进行预测啦!

拿小编自己来举例:

假如小编在二等舱,性别为女,年龄为25, 船上没有兄弟姐妹,船上有父母双亲,票价为35美元,从s港口登陆出发。

prediction=clf_dt.predict([[ 2. ,0. ,25.,0. , 2.,35.00, 2. ]])print(prediction)[1]

预测结果为1,也就是说幸运的小编竟然能够生还!

如果小编性别为男,其他条件不变,我们再来看一看:

prediction=clf_dt.predict([[ 2. ,1. ,25.,0. , 2.,35.00, 2. ]])print(prediction)[0]