泰坦尼克号数据_数据挖掘经典实例——泰坦尼克号幸存者预测

本文分享了一位数据分析师在kaggle上的泰坦尼克号幸存者预测案例。通过数据导入、探索和可视化,揭示了性别和船舱等级对幸存率的影响:女性和高等级船舱乘客的幸存率更高。下篇将利用机器学习的分类树模型进一步预测。
摘要由CSDN通过智能技术生成

3969427646a4732fe189ee475a8fe141.png

泰坦尼克号幸存者预测是kaggle上一个较为经典的数据分析案例,之前做了这个案例,今天向大家分享一下自己的学习笔记。

小伙伴注意了,本次实例分为两部分,第一部分(也就是本篇)我们会用我们之前使用过的一些数据挖掘方法来对数据集进行探索,并进行幸存者预测;第二部分(下篇)我们会使用机器学习的内容,利用分类树模型来进行幸存者预测。

数据集来源:

https://www.kaggle.com/c/titanic​www.kaggle.com

为了让部分没看过《泰坦尼克号》这部电影的小伙伴也能对数据背景有一个基本认识,我们简单概括一下背景

泰坦尼克号的沉没是世界上最严重的海难事故之一,造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮,船上的人年龄各异,背景不同,有贵族豪门,也有平民旅人,邮轮撞击冰山后,船上的人马上采取措施安排救生艇转移人员,从本次海难中存活下来的,也就是幸存者。

而这也引出了我们今天的主题:通过挖掘数据中的关键信息来预测一下哪些人可能成为幸存者

下面,正文开始~


一、数据导入及基本了解

import numpy as np
import pandas as pd
df = pd.read_csv(r'C:UsersAdministratorDesktopdata.csv',encoding='utf-8')

为了方便,我们将等会可能需要用到的库一并导入:

from matplotlib import pyplot as plt
%matplotlib inline
plt.style.use('fivethirtyeight')
import seaborn as sns
sns.set()
import warnings
warnings.filterwarnings('ignore')

1、查看前10行数据

df.head(10)

66f808fdc05e92bd5411e40ac1b045c9.png

2、查看数据大小

df.shape

d2e6bf1d67be3c8ebf21e2cd8ddc5006.png

可以看到,我们的数据集有891个样本,12个特征。

3、查看特征

df.info()

5955934b4a88a6864d11ae90728b4a24.png

其中,

Survived:代表是否幸存,0否,1是

Pclass:船舱等级,1最好,2次之,3最后

SibSp:该名乘客上船后,与其一起同行上船的兄弟姐妹的个数

Parch:该名乘客上船后,与其一起同行上船的家里的老人与孩子的个数

Ticket:船票编号

Fare:船票价格

Cabin:该名乘客所在船舱的编号

Embarked:该名乘客登船的码头,有三个:S、C、Q三个码头

4、查看数据缺失情况

df.isnull().sum()

81a3a7d5873073a3a0250ce8b8f5d510.png

可以看到,Cabin(乘客所在船舱的编号)大量缺失。

5、使用describe()做简单的数理统计

df.describe()

3bb0bf06e69329a018b0def117819b32.png

6、统计一下获救人数占比

df_survive = df['Survived'].value_counts(normalize=True)
n0_sample = df_survive[0]
n1_sample = df_survive[1]
print('死亡人数占{:.2%}; 幸存人数占{:.2%}'.format(n0_sample,n1_sample))

eae4e4ec171056e4e2accc88843642a7.png

可视化:

df_counts = df['Survived'].value_counts()
plt.rcParams['font.sans-serif']=['SimHei']
plt.pie(df_counts, explode=(0, 0.1),labels=['未获救','获救'],
         shadow=True, autopct='%1.1f%%')     
plt.axis('equal')
plt.legend()

06049201267eac64d0f8612ef1b42229.png

我们可以得到一个不幸的信息,在本次海难中获救人数仅占38.4%。

7、统计性别特征对获救几率的影响

首先看一下船上乘客的男女比例:

df['Sex'].value_counts()

f41a124430fed493e4d839b305f39f18.png

男性乘客577人,女性314人。

看过电影的同学,可能也有注意到电影里的这一个细节:邮轮出事后,是本着“老人、小孩、女士优先”的准则,也就是说这一部分乘客会优先获救。下面我们来看看在这一点在数据集中是否有体现:

df['Survived'].groupby(df['Sex']).value_counts()

df8ee31cdc87d2ce6001e953b36a7aec.png

可以看到,女性乘客总人数比男性少,但是获救人数却比男性乘客要多。

分别统计船上女性乘客与男性乘客的获救率:

sur_fe = 233/314
sur_ma = 109/577
print("女性获救比例:{:.2%};男性获救比例:{:.2%}".format(sur_fe,sur_ma))

c0842a1f3d0ca217be004eaae05f21a9.png

可以看到,

性别特征是影响获救概率的一个重要因素

女性获救概率要远远高于男性。

8、研究船舱等级对获救几率的影响

查看船舱等级分类及各船舱人数:

df['Pclass'].value_counts()

deba3c292b7de835bc91fc13991e77e3.png

查看各船舱的获救情况:

df['Survived'].groupby(df['Pclass']).value_counts()

a93f90aebb6df22bfe996ac882750ea8.png

我们也可以用另一种方法查看:

pd.crosstab(df.Pclass,df.Survived,margins=True).style.background_gradient()

28066fc2d359fa15bab935b82ef42887.png

分别统计不同船舱乘客的获救率

sur_1 = 136/216
sur_2 = 87/184
sur_3 = 119/491
print("一号舱获救比例:{:.2%};二号舱获救比例:{:.2%};三号舱获救比例:{:.2%}".format(sur_1,sur_2,sur_3))

e400b240b6361c5cd32208066b8c3cdc.png

可视化:

sur_123 = [136/216,87/184,119/491]

import matplotlib
plt.figure(figsize=(8,6),dpi=80,num=4)
myfont = matplotlib.font_manager.FontProperties(fname='C:WindowsFontssimsun.ttc')
x= range(1,4)

plt.bar(x, sur_123, color='g',label='不同船舱下的乘客获救比例')


plt.xlabel('船舱',FontProperties=myfont,fontsize=15)
plt.ylabel('获救比例',FontProperties=myfont,fontsize=15)
plt.title('不同船舱下乘客的获救率',FontProperties=myfont,fontsize=15)

xtick_labels=['{}号舱'.format(i) for i in x]
plt.xticks(x,xtick_labels,FontProperties=myfont)
plt.legend(prop=myfont)

4a4cebe5fc8b8853661f789572647e23.png

可以看到,船舱等级对于乘客的获救率还是存在很大的影响,从三个船舱的获救率可以看到,一号舱乘客有着很高的优先级,获救率接近63%,二号舱次之,只有47.28%,三号舱获救率则很低,不到25%。

9、研究在不同等级的船舱内,“女士优先”的原则还是否存在:

(依然使用groupby函数)

第一步,统计不同船舱内的男女人数:

df['Sex'].groupby(df['Pclass']).value_counts()

83709ff01fe1e936271aa63ac42595a5.png
df['Survived'].groupby([df['Pclass'],df['Sex']]).value_counts()

81772b0f7130973c110043424b006f9c.png

第二步,分别计算在不同等级的船内,女性乘客与男性乘客的获救率:

1、一号舱:

sur_fe = 91/94
sur_ma = 45/122
print("一号舱女性获救比例:{:.2%};一号舱男性获救比例:{:.2%}".format(sur_fe,sur_ma))

a04cfa4c16658d908cc8bdd52cdae976.png

2、二号舱:

sur_fe = 70/76
sur_ma = 17/108
print("二号舱女性获救比例:{:.2%};二号舱男性获救比例:{:.2%}".format(sur_fe,sur_ma))

f58273d5b5459df16df692f37e76adb5.png

3、三号舱:

sur_fe = 72/144
sur_ma = 47/347
print("三号舱女性获救比例:{:.2%};三号舱男性获救比例:{:.2%}".format(sur_fe,sur_ma))

5bf022a7139616a4402dee9a1bf8d0af.png

可以看到,在一等舱和二等舱,女性的获救率都很高,在90%以上,在三等舱中的乘客获救率普遍较低,女性的获救率为50%,仍远高于男性获救率。

可以看出,“女士优先”的准则,在各个船舱中都得到呈现。

可视化:

sur_fe = [91/94,70/76,72/144]
sur_ma = [45/122,17/108,47/347]
import matplotlib
plt.figure(figsize=(8,6),dpi=80,num=4)
myfont = matplotlib.font_manager.FontProperties(fname='C:WindowsFontssimsun.ttc')
x= range(1,4)

plt.plot(x, sur_fe, color='r',label='女性获救比例',  linewidth=2)
plt.plot(x, sur_ma, color='g',label='男性获救比例',  linewidth=2)

plt.xlabel('船舱',FontProperties=myfont,fontsize=15)
plt.ylabel('获救比例',FontProperties=myfont,fontsize=15)
plt.title('不同船舱及不同性别下乘客的获救率',FontProperties=myfont,fontsize=15)

xtick_labels=['{}号舱'.format(i) for i in x]
plt.xticks(x,xtick_labels,FontProperties=myfont)
plt.legend(prop=myfont)

10d7556392dc150c7904506c0b296cb0.png

从这个图我们就能明显看到,性别及船舱等级对获救概率的影响。

小结:

从上述分析结果,我们可以得到以下两个关于乘客获救率结论:

(1)在泰坦尼克号上,女性的获救率会高于男性;

(2)高等级船舱的乘客获救率会高于低等级船舱。

除此之外,也可以从年龄等其他角度进行分析,这里由于篇幅问题我们就不再续写了,感兴趣的小伙伴可以自己动手试试。

在本篇中,我们使用了常用的数据挖掘手段对乘客的获救率进行预测;下一篇中,我们将会使用回归树的方法,同样实现预测获救率的目标。


以上便是<数据挖掘经典实例——泰坦尼克号幸存者预测>的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值