泰坦尼克号生还率分析

泰坦尼克号生还率分析

数据来源 kaggle 数据集 → 共有 1309 名乘客数据,其中 891 是已知存活情况(train.csv)

剩下 418 则是需要进行分析预测的(test.csv)

字段意义:

  • PassengerID:乘客编号
  • Survived:存活情况(存活:1;死亡:0)
  • Pclass:客舱等级
  • Name:乘客姓名
  • Sex:性别
  • Age:年龄
  • SibSp:同乘的兄弟姐妹/配偶数
  • Parch:同乘的父母/小孩数
  • Ticket:船票编号
  • Fare:船票价格
  • Cabin:客舱号
泰坦尼克号生还率分析_第1张图片
泰坦尼号克生还率分析

目的:

通过已知获救数据,预测乘客生存情况

1、整体来看,存活比例如何?

分析思路:

  1. 读取已知生存数据 train.csv
  2. 查看已知存活数据中,存活比例如何?

提示:

  1. 注意过程中筛选掉缺失值之后再分析
  2. 这里用 seaborn 制图辅助研究

存活比例为 38.38%

泰坦尼克号生还率分析_第2张图片
整体存活比例

2、结合性别和年龄数据,分析幸存下来的人是那些人?

分析思路:

  1. 年龄数据的分布情况
  2. 男性和女性存活情况
  3. 老人和小孩存活情况

我们用柱形图和箱线图查看具体年龄数据分布情况。

泰坦尼克号生还率分析_第3张图片
年龄数据的分布情况

由柱形图和箱线图可得知,样本年龄数据分布在 18 - 30岁之间的人数比较多,同时小孩特别多,老人比较少。

总体年龄分布:去掉缺失值后样本有 714,平均年龄为 30岁,标准差 14岁,最小年龄 0.42,最大年龄 80

泰坦尼克号生还率分析_第4张图片
描述统计

通过描述统计可得出,总体年龄分布:去掉缺失值后样本有 714,平均年龄为 30岁,标准差 14岁,最小年龄 0.42,最大年龄 80。

接下来我们对整个数据按性别进行分组,查看性别对生存率的影响。

泰坦尼克号生还率分析_第5张图片
男性和女性具体存活情况
泰坦尼克号生还率分析_第6张图片
男性和女性存活情况

通过计算可得知,女性存活率74.20%,男性存活率18.89%,女性存活率明显高于男性。

接下来,我们再按照船舱等级分组,进行分析,看看船舱等级对生还率的影响。

泰坦尼克号生还率分析_第7张图片
船舱等级对生还率的影响

按船舱等级和年龄划分(看蓝色部分存活者),一等船舱集中分布在 20 - 40岁,二等和三等不仅仅年龄分布在 20 - 40岁,还有许多低龄存活者;

按船舱等级和性别划分(看蓝色部分存活者),两者均有较低年龄的存活者,总体来说这次对女性和低龄人士,都有一定的照顾,存活率都比较高。

接下来按年龄划分绘制柱状图,看看每个年龄段的存活情况。

泰坦尼克号生还率分析_第8张图片
老人与小孩存活情况

由图可知,灾难中,老人和小孩存活率较高,中间人数最多(年龄分布可以看出),存活率却比较低。

综上所诉,按年龄划分,老人和小孩的存活率较高;按性别划分,女性的存活率较高。

3、结合 SibSp、Parch 字段,研究亲人多少与存活的关系

分析思路:

  1. 有无兄弟姐妹/父母子女和存活与否的关系
  2. 亲戚多少与存活与否的关系
泰坦尼克号生还率分析_第9张图片
有无兄弟姐妹/父母子女和存活与否的关系

由上图所知,有兄弟姐妹、父母子女的生存率更大

泰坦尼克号生还率分析_第10张图片
亲戚多少与存活与否的关系1
泰坦尼克号生还率分析_第11张图片
亲戚多少与存活与否的关系2

综上所示,独自一人的生存率较低,随着亲戚数量增加,生存率逐渐增加,超过 4 名后,生存率下降。

4、结合船票的费用情况,研究票价和存活与否的关系

分析思路:

  1. 票价分布和存活与否的关系
  2. 比较研究生还者和未生还者的票价情况
泰坦尼克号生还率分析_第12张图片
票价分布和存活与否的关系

由上图所示,总体来说,票务价格比较平均,20英镑 一张,一等舱票价较高,平均 60 英镑,二等舱和三等舱票价都是在 25 英镑以下;人数集中在二三等舱,一等舱人数较少。

泰坦尼克号生还率分析_第13张图片
比较研究生还者和未生还者的票价情况

总体来看,生还者票价高于未生还者票价,一等舱存活率较高一点,二等舱和三等舱基数大,存活率不高。

接下来我们基于上述的特征,利用 KNN 分类模型,对结果进行预测。

5、利用 KNN 分类模型,对结果进行预测

分析思路:

  1. 模型训练字段:'Surivied','Pclass','Sex','Age','Fare','family_Size'
  2. 模型预测 test.csv 样本数据的生还率

提示:

  1. 训练数据集中,性别改为数字表示 → 1 代表男,0 代表女性
#去掉缺失值
knn_train = train_data[['Survived','Pclass','Sex','Age','Fare','family_size']].dropna()

knn_train['Sex'][knn_train['Sex'] == 'male'] = 1
knn_train['Sex'][knn_train['Sex'] == 'female'] = 0

test_data['family_size'] = test_data['Parch'] + test_data['SibSp'] + 1
knn_test = test_data[['Pclass','Sex','Age','Fare','family_size']].dropna()
knn_test['Sex'][knn_test['Sex'] == 'male'] = 1
knn_test['Sex'][knn_test['Sex'] == 'female'] = 0

from sklearn import neighbors

knn = neighbors.KNeighborsClassifier()
knn.fit(knn_train[['Pclass','Sex','Age','Fare','family_size']],knn_train['Survived'])

knn_test['predict'] = knn.predict(knn_test)
pre_survived = knn_test[knn_test['predict'] == 1].reset_index()
del pre_survived['index']

你可能感兴趣的:(泰坦尼克号生还率分析)