Python实战—泰坦尼克号生还者数据分析
原创
©著作权归作者所有:来自51CTO博客作者大话数据分析的原创作品,请联系作者获取转载授权,否则将追究法律责任
今天给大家讲一个凄美的故事
有“永不沉没”的美誉的“泰坦尼克号”
1912年从英国出发,驶向美国纽约
然而不幸的是
泰坦尼克号与一座冰山相撞
泰坦尼克船体断裂成两截后沉入大西洋底
2224名船员及乘客中,1517人丧生
其中仅333具罹难者遗体被寻回
以此背景,做出本节数据分析
一、数据来源
本节使用seaborn自带的泰坦尼克号生还乘客的数据集,其中各字节所代表的含义如下:survived alive乘客生还情况、pclass class船舱等级、sex who乘客性别、age 乘客年龄、sibsp parch是否带有家属,统一用alone字段代表是否有家属、fare船票价格、embarked和embark_town上船地点。
import numpy as np #导入库
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic = sns.load_dataset("titanic")
titanic.head() #数据概览
二、问题研究
- 泰坦尼克号乘客信息的基本情况。
- 乘客信息与生还数据是否有关联。
三、数据清洗
titanic.isnull().sum() #查看是否具有缺失值
age和deck字段存在缺失值。
sns.set(style="darkgrid", palette="muted", color_codes=True)
sns.distplot(titanic[titanic['age'].notnull()]['age']) #distplot函数查看乘客的年龄分布
对年龄的缺失值处理,并且用distplot函数查看乘客的年龄分布,发现年龄呈正态分布。
titanic['age'] = titanic['age'].fillna(titanic['age'].mean())
sns.distplot(titanic['age'])
年龄呈正态分布,用年龄的均值进行缺失值的填充,再对年龄分布可视化。
sns.countplot(x="embarked",data=titanic) #绘制类别计数柱状图
titanic['embarked'] = titanic['embarked'].fillna('S')
titanic.isnull().sum()
利用正确的登船地点S进行缺失值填充。
titanic = titanic.drop(['survived','pclass','sibsp','parch','who','adult_male','deck','embark_town'],axis=1)
titanic.head() #删除多余的字段,数据清洗
四、数据探索
sns.countplot(x="sex",data=titanic)
由上图可以看出,男性乘客比女性乘客多。
sns.boxplot(x='sex',y='age',data=titanic)
由上图可看出,男性与女性的年龄分布很相近,但女性乘客的年龄跨度更大一点。
sns.countplot(x="class",data=titanic)
对于船舱等级计数,第三级船舱数量最多。
sns.violinplot(x="class", y="age", data=titanic)
结合船舱等级,绘制乘客年龄分布箱线图,头等舱的年龄跨度较大,第三级船舱的中年人分布最多。
sns.countplot(x="alone",data=titanic)
对alone字段计数,单独的乘客数量更多一些。
sns.countplot(x="alive",data=titanic)
对生还字段可视化,未生还的乘客人数更多一些。
sns.countplot(x='alive',hue='sex',data=titanic)
hue='sex'添加性别变量,生还中女性占大多数。
g = sns.FacetGrid(titanic, col='sex') #利用网格技术
g.map(sns.countplot, 'alive') #不同性别生还情况
def agelevel(age):
if age <= 16:
return 'child'
elif age >= 60:
return 'aged'
else:
return 'midlife'
titanic['age_level'] = titanic['age'].map(agelevel) #对年龄分级,分开老人和小孩的数据
sns.countplot(x='age_level',data=titanic)
分级年龄可视化,成年人乘客数量占比很大,小孩和年长者占比很小。
sns.countplot(x='alive',hue='age_level',data=titanic)
乘客年龄与生还关系,乘客年龄与生还乘客之间的关系并不明显,小孩的生还几率比较大,老人却相对较小。
g = sns.FacetGrid(titanic, col='class', row='alone') #网格技术
g.map(sns.countplot, 'alive')
乘客舱位等级越高,生还的可能性越大,单独的乘客生还的几率也更大一些。
话说今年的情人节
你是如何度过的
对于小编这种单身狗来说
只能一个人过了
好在还有广大的粉丝
写写文章、研究研究数据分析
生活过的也不是太单调