01 幸存者

泰坦尼克号的沉没,是人为的悲剧,1800人罹难者近70%,让我们一起来看看泰坦尼克号的幸存者都有哪些特征吧。

先给出分析框架

  1. 一切的分析都建立在数据清洗之后
  2. 幸存率的分析非常重要,下面将按性别、年龄、仓位、登船码头4个维度分别观察与幸存率的关系
  3. 然后按照仓位+性别、仓位+年龄段、年龄段+性别3个二维组合维度观察与幸存率的关系
  4. 最后按仓位+性别+年龄段这个三维组合维度观察与幸存率关系

想知道在泰坦尼克号事故中活下来的人的特征么?

一起来看看吧。


02 数据清洗

一切分析的前提,都是干净可靠的数据,所以我们先来观察一下数据情况,进行数据清洗。

查看数据三步走

  1. 数据大小 df.shape
  2. 字段类型及缺失值
  3. 数据头尾行

使用df.shape查看数据大小,使用df.info()查看数据字段类型和缺失值情况。

  • 891行,12列,占据空间84kB
  • Age字段有20%的缺失,年龄是乘客的重要参数,后续会补全
  • Cabin字段有70%的缺失,船舱号码不是重要参数,考虑暂不分析该字段

df.head(), df.tail()查看数据头尾行情况

各字段解释如下:

  • PassengerId: 乘客的id
  • Survival: 是否幸存 0 = No, 1 = Yes
  • Pclass: 舱位 class 1 = 1st, 2 = 2nd, 3 = 3rd
  • Name: 姓名
  • Sex: 性别
  • Age: 年龄
  • SibSp: 船上兄弟姐妹以及配偶的个数
  • Parch: 船上父母以及子女的个数
  • Ticket: 船票号码
  • Fare: 票价
  • Cabin: 船舱号码
  • Embarked: 登船码头 C = Cherbourg, Q = Queenstown, S = Southampton

补全缺失值

Age字段是乘客的重要参数,需要补全。

可不能直接填充0,或者某个数去补全整个数据哦,这样做很危险,数据源会失去客观性!

那怎么办呢?考虑到不同性别的年龄层不同,不同仓位(可以理解为社会等级)的年龄层也不同,我们可以这样做:

以性别+仓位将数据分组,用每组的中位数去补全各组的空值

#读取原始数据
titanic=pd.read_csv(r'D:\DataScience\python\python_course\titanic.csv',sep=';')# 分组计算不同仓位、性别的年龄中位数,得到一个Series数据,索引为Pclass、Sex
age_median3=titanic.groupby(["Pclass","Sex"]).Age.median()
titanic.set_index(["Pclass","Sex"],inplace=True)# 使用fillna补全空值,将根据索引进行补全
titanic.Age.fillna(age_median3,inplace=True)
titanic.reset_index(inplace=True)titanic.Age.describe()

这样一波操作之后,Age字段有891个非空值,已经被补全。


03 数据挖掘

现在我们已经得到一分干净的数据集了,可以开动啦!

是什么因素影响了乘客的幸存率呢?

3.1 按性别、年龄段、仓位、登船码头4个维度分别观察与幸存率的关系
  • 仓位-幸存率
# 数据透视表
titanic.pivot_table(values="Survived",index="Pclass",aggfunc="mean")#可视化呈现
sns.barplot(data=titanic,x="Pclass",y="Survived",ci=None)

果然,仓位等级越高,幸存率也越大,可能是由于高等仓位更远离水面,乘客也更少,有更多的逃生机会吧。

  • 性别-幸存率
titanic.pivot_table(values="Survived",index="Sex",aggfunc="mean")sns.barplot(data=titanic,x="Sex",y="Survived",ci=None)

女性幸存率明显高于男性,绅士风度在死亡面前依然存在,让人感动。

  • 年龄段-幸存率

Age字段是一个连续变量而不是分类变量,我们需要将Age字段离散化之后再进行分析。

# 连续变量离散化:将某个变量的所在区间分割为几个小区间,落在同一个区间的观测值用同一个符号表示
titanic["Ageband"]=pd.cut(titanic["Age"],5)

现在我们给titanic这个dataframe新增了一列“Ageband”,它代表Age字段所在的年龄段

# 可视化
sns.barplot(data=titanic,x="Ageband",y="Survived",ci=None)
plt.xticks(rotation=60)

低年龄段生存率最高,64岁以上老人生存率最低,青壮年次之,看来大家还是很有爱的——小朋友先救,青壮年让位,老人可能体力不支或自动放弃。

  • 登船码头-幸存率
# 用groupby也可实现数据透视表
titanic[["Embarked","Survived"]].groupby("Embarked").mean()sns.barplot(data=titanic,x="Embarked",y="Survived",ci=None)

C码头登船的幸存率最高,为什么呢?我们来看看各码头登船乘客的仓位情况

# 数据透视表
titanic.pivot_table(values="Name",index="Pclass",columns="Embarked",aggfunc="count")

  • S码头登船人数最多,大部分是3等仓位
  • Q码头登船的人90%以上是3等仓位
  • C码头登船的人半数是1等仓位,数据来看1等仓位的幸存率较高,因此C码头登船的人幸存率较高可解释
  • 看来C码头主要是有钱人登船,S码头就主要是穷人了
3.2 按照仓位+性别、仓位+年龄段、年龄段+性别观察与幸存率的关系
  • 仓位+性别-幸存率
# 数据透视表走起,以数字形式观察结果
titanic.pivot_table(values="Survived",index="Pclass",columns="Sex",aggfunc="mean")# seaborn作图走起,以图像形式观察结果
sns.barplot(data=titanic,x="Pclass",y="Survived",hue="Sex",ci=None)

男性幸存率普遍低于女性,这难道是传说中的绅士风度在起作用?

高等仓位幸存率高于低等仓位,一方面可能是因为高等仓位在上层,淹水较慢,逃生时间够长,另一方面可能是人为因素,高等仓位更受照顾;

一二等仓的女性幸存率很高啊,二三等仓的男性幸存率极低。

  • 仓位+年龄段-幸存率
sns.pointplot(data=titanic,x="Ageband",y="Survived",hue="Pclass",ci=None)
plt.xticks(rotation=60)

各年龄段1等仓位的生存率最高,3等仓位生存率最低;

低年龄段的生存率逐次高于高年龄段;

在考虑各分组生存率的同时,要考虑各分组人数,比如该分组并没有人,那么生存率自然是0,但我们并不能说该分组生存率最低。

  • 性别+年龄段-幸存率
titanic.pivot_table(values="Survived",index="Ageband",columns="Sex",aggfunc="mean")sns.barplot(data=titanic,x="Ageband",y="Survived",hue="Sex",ci=None)# 设置横轴标签位置
plt.xticks(rotation=60)

男性生存率明显偏低与女性,女性高年龄段的生存率逐次高于低年龄段的。

3.3 三维分析

前面的分析从一维、二维角度分析了因素与幸存率的关系,下面我们直接从三维因素来分析。

  • 年龄段+性别+仓位
titanic.pivot_table(values="Survived",index="Ageband",columns=["Sex","Pclass"],aggfunc="mean")

输出结果展示了各年龄段下,各性别分别在123等仓位的幸存率。这张表各可能会让你晕晕的,那么我们就可视化呈现吧。

"""各性别下,仓位+年龄段与幸存率关系"""# aspect设置画布长宽比
# palette设置hue分组的颜色
sns.FacetGrid(data=titanic,row="Sex",aspect=1.5)\
.map(sns.pointplot,"Ageband","Survived","Pclass",palette="deep",ci=None)\
.add_legend()plt.xticks(rotation=60)

男性低年龄段幸存率最高,高等仓位幸存率更高;

中老年女性幸存率最高,1、2等仓位的女性幸存率几乎达到100%,3等仓位女性比较惨一点。

  • 仓位+登船码头+性别
# 直接可视化呈现吧
sns.FacetGrid(data=titanic,col="Pclass",row="Embarked")\
.map(sns.barplot,"Pclass","Survived","Sex",hue_order=["male","female"],palette="deep",ci=None)\
.add_legend()

不论从登船码头还是仓位来看,女性幸存率普遍高于男性;

按性别来看,高等仓位幸存率高于低等仓位;

Q码头登船的男乘客生存率最低,我们来看看是不是Q码头男乘客数量较少?

titanic.pivot_table(values="Survived",index="Embarked",columns="Sex",aggfunc="count")

Q码头登船男乘客多于女乘客,但几乎都罹难了,为什么呢?我们来看看男乘客的仓位、年龄段分布情况,是不是这些情况导致了男乘客生存率较低.

titanic.pivot_table(values="Survived",index=["Embarked","Pclass"],columns=["Sex","Ageband"],aggfunc="count")

Q码头登船的男乘客,绝大部分处于16-32岁,3等仓位,这个分段的乘客幸存率是最低的,解释了为什么Q码头登船的男乘客幸存率趋于0的现象。


04 总结

本次分析针对泰坦尼克号乘客数据,我们分析了幸存者的特征画像:

女性,儿童,头等舱,绅士风度

本次未对数据的直系、旁系亲属个数进行分析,下期考虑加入。

本次主要使用了数据透视表和seaborn包绘图呈现结果,下期考虑加入特征工程对数据进一步分析。

Python|泰坦尼克号幸存者画像相关推荐

  1. Python数据挖掘项目:构建随机森林算法模型预测分析泰坦尼克号幸存者数据

    作者CSDN:进击的西西弗斯 本文链接:https://blog.csdn.net/qq_42216093/article/details/120196972 版权声明:本文为作者原创文章,未经作者同 ...

  2. python机器学习之决策树案例——泰坦尼克号幸存者的预测

    决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题.决策树算法容易理解,适用各种数 ...

  3. 1.决策树 实例:泰坦尼克号幸存者的预测

    决策树 文章目录 决策树 1.概述 1.1决策树是如何工作的 2 DecisionTreeClassififier与红酒数据集 2.1重要参数 2.1.1 criterion 2.1.2 random ...

  4. Kaggle入门项目,泰坦尼克号幸存者

    泰坦尼克号幸存者项目是kaggle的入门项目,我先用python的matplotlib库对数据进行了可视化,初步探索后对数据进行了清洗,然后建立了逻辑回归模型对测试集进行了预测,kaggle得分是0. ...

  5. 决策树入门案例:泰坦尼克号幸存者预测

    决策树 1 概述 1.1 决策树是如何工作的 1.2 分类树 DecisionTreeClassifier 1.3 回归树 DecisionTreeRegressor 1.4 案例练习 1. 用回归树 ...

  6. 【阅读笔记】使用决策树预测泰坦尼克号幸存者实例 - scikit-learn机器学习

    文章目录 使用决策树预测泰坦尼克号幸存者实例 一.数据获取 二.数据探索 数据质量分析(缺失值.异常值.一致性) 三.数据预处理 四.数据建模 五.优化模型参数 使用决策树预测泰坦尼克号幸存者实例 代 ...

  7. 机器学习-泰坦尼克号幸存者预测

    机器学习-泰坦尼克号幸存者预测 泰坦尼克灾难数据描述 PassengerId:乘客的ID号,这个是顺序编号,用来唯一标识一名乘客.这个特征和幸存与否无关,我们不使用这个特征. Survived:1表示 ...

  8. 泰坦尼克号幸存者逻辑回归预测

    泰坦尼克号幸存者预测 import numpy as np import pandas as pd 数据读取 #最后一行是换行符不取 train=pd.read_csv(r'./mytrain.csv ...

  9. 特征工程实践:泰坦尼克号幸存者预测

    文章目录 泰坦尼克号幸存者预测 泰坦尼克号幸存者预测 数据集下载地址:https://www.kaggle.com/c/titanic/data . 本案例主要展示特征工程对数据集的处理方法,模型只选 ...

最新文章

  1. 你已经是个成熟的表格,该学会NLP了
  2. STM32的SPI驱动代码
  3. 图像“颜色选择”怎么用?
  4. MSCRM2011 Current User has Role 【判定当前用户角色方法】
  5. Fastai-学习器训练
  6. 10怎么设置pg接口_西门子S7300 PLC时间日期怎么读取?
  7. Learning Multiview 3D point Cloud Registration论文阅读笔记
  8. 一网打尽!每个程序猿都该了解的黑客技术大汇总
  9. win7日历加入农历_还是农历更亲切,春节制作一个带农历的日历,欢欢喜喜过新年...
  10. 白话之jsonp跨域原理分析
  11. 区块链软件公司:智媒链在数据分析和开发应用场景
  12. 红外图像特点及识别方法
  13. LeaRun.Java可视化拖拽编辑的BI大屏
  14. 开发多语言常用国家地区对照表(最全的各国地区对照表) 多语言简称
  15. 杀毒软件的一些杀毒原理
  16. windows定时自动备份
  17. fault tolerance中的错误和故障检测(Error and Fault Detection Mechanisms)
  18. 1000亿!苹果挨欧盟反避税第一刀,下一个是谁?
  19. dev c++怎么设置断点_斑马进度计划软件可以检查计划中是否存在逻辑断点和错误逻辑关系...
  20. 3.Sunday算法的一个小优化

热门文章

  1. 开源共轴双桨无人机 Tdrone 软硬件全部在 GitHub 开源
  2. 多因子模型与细分行业多因子测试源码(以医疗行业为例)
  3. xmos固件u8_XMOS USB数字界面 模块 XU208 U8升级版CPL
  4. 爱签电子合同电子签章助力银行数智化发展
  5. 地统计分析在气象领域的应用
  6. Sketch及其相关插件介绍
  7. Arduino:数码管显示原理详解和Proteus仿真实验
  8. c 使用mysql的语句_在 MySQL 数据库中使用C 履行SQL的语句
  9. tc27x的内存保护MPU设置浅析(个人理解)
  10. 东原仁知服务招股书失效:主营业务严重依赖迪马集团,曾多次更名