数据分析之泰坦尼克号事件

本文就泰坦尼克号上的生还率与各个因素之间的关系进行探索。

首先,我们先在网上进行泰坦尼克号数据的下载。
然后引用python中的几个包。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline`

然后进行文件导入

df = pd.read_csv('TTNKH.csv')

接下来检查一下文件,然后看看数据中有多少幸存者。

df.info()
total_survived_sum = df['Survived'].sum()
total_nosurvived_sum =891 - df['Survived'].sum()
print("幸存者为%d,遇难者为%d"%(total_survived_sum,total_nosurvived_sum))

此次数据共有891人,幸存者为342,遇难者为549。
然后可以把生还者与未生还者的数据进行可视化。

plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x="Survived",data=df )
plt.title('Survival count')plt.subplot(122)
plt.pie([total_nosurvived_sum,total_survived_sum],labels=['no survived','survived'],autopct='%1.0f%%')
plt.title('Survival rate')plt.show()


891名乘客中,生存率和死亡率分别为38%和62%

接下来就要对各因素进行具体分析了,首先是船舱等级
我们先查询一下各船舱分别有多少人。

df[['Pclass','Survived']].groupby(['Pclass']).count()

plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x='Pclass',data=df)
plt.title('Pclass count')plt.subplot(122)
plt.pie(df[['Pclass','Survived']].groupby(['Pclass']).count(),labels=['1','2','3'],autopct='%1.0f%%')
plt.show()


由图可以明显看出,在灾难发生前,一等舱、二等舱、三等舱的乘客分别为216、184、491人,分别占总人数的 24%, 21%, 55%。
然后是灾难发生之后各船舱幸存人数。

survived_df=df[df[ 'Survived'] == 1]
survived_df[['Pclass','Survived']].groupby('Pclass').sum()

plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x='Pclass',data=survived_df)
plt.title('Pclass Survived')
plt.ylabel('Survived Count')plt.subplot(122)
plt.pie(survived_df[['Pclass','Survived']].groupby('Pclass').sum(),labels=['1','2','3'],autopct='%1.0f%%')plt.show()


灾难发生后,1等舱的生存人数为136人,2等舱的生存人数为87人,3等舱的生存人数为119人,分别占总生存人数的40%,25%,35%。
接下该对各船舱的生存情况进行一个对比。

Pclass1=df[df['Pclass']==1]
Pclass2=df[df['Pclass']==2]
Pclass3=df[df['Pclass']==3]plt.figure(figsize=(10,20))
plt.subplot(4,2,1)
sns.countplot(x='Survived',data=Pclass1)
plt.title('Pclass 1')
plt.subplot(4,2,2)
plt.pie([Pclass1['Survived'][Pclass1['Survived'] == 0].count(),Pclass1['Survived'][Pclass1['Survived'] == 1].count()],labels=['No Survived', 'Survived'],autopct='%1.0f%%')plt.subplot(4,2,3)
sns.countplot(x='Survived',data=Pclass2)
plt.title('Pclass 2')
plt.subplot(4,2,4)
plt.pie([Pclass2['Survived'][Pclass2['Survived'] == 0].count(),Pclass2['Survived'][Pclass2['Survived'] == 1].count()],labels=['No Survived', 'Survived'],autopct='%1.0f%%')plt.subplot(4,2,5)
sns.countplot(x='Survived',data=Pclass3)
plt.title('Pclass 3')
plt.subplot(4,2,6)
plt.pie([Pclass3['Survived'][Pclass3['Survived'] == 0].count(),Pclass3['Survived'][Pclass3['Survived'] == 1].count()],labels=['No Survived', 'Survived'],autopct='%1.0f%%')plt.subplot(4,1,4)
df.groupby('Pclass')['Survived'].mean().plot(kind='bar')plt.show()



可以看到一等舱生还率为 63%,二等舱为 47%,三等舱为 24%。可见客舱等级越高,生还率越高。

之后该对性别进行分析了。
首先查出船上男女分别为多少。

male=df['Sex'][df['Sex']=='male'].count()
female=df['Sex'][df['Sex']=='female'].count()
print('船上男性为%d人,女性为%d人'%(male,female))

首先查出船上男性为577人,女性为314人。

plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x='Sex',data=df)plt.subplot(122)
plt.pie([male,female],labels=['male','female'],autopct='%1.0f%%')
plt.show()


灾难发生前,891人中,男性共577人,女性314人,男女比例为 65% 和 35%
然后进行灾难发生后的人数查询

Survived_male=survived_df['Sex'][survived_df['Sex']=='male'].count()
Survived_female=survived_df['Sex'][survived_df['Sex']=='female'].count()
print('幸存者中男性为%d人,女性为%d人'%(Survived_male, Survived_female))

幸存者中男性为109人,女性为233人

plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x='Sex', data=survived_df,order=['male','female'])
plt.subplot(122)
plt.pie([Survived_male, Survived_female],labels=['male', 'female'],autopct='%1.0f%%')
plt.show()


由上图可知灾难发生后,男性变为109人,女性变为233人,男女比例变为 32% 和 68%。
对男性做个分析:

male_df=df[df['Sex']=='male']
male_df['Survived'][male_df['Survived']==1].count()
plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x='Survived',data=male_df)
plt.subplot(122)
plt.pie([male_df['Survived'][male_df['Survived']==0].count(),male_df['Survived'][male_df['Survived']==1].count()],labels=['no Survived','Survived'],autopct='%1.0f%%')
plt.show()


男性生还109人,生还率仅为 19%。
对女性进行分析:

female_df=df[df['Sex']=='female']
female_df['Survived'][female_df['Survived']==1].count()
plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x='Survived',data=female_df)
plt.subplot(122)
plt.pie([female_df['Survived'][female_df['Survived']==0].count(),female_df['Survived'][female_df['Survived']==1].count()],labels=['no Survived','Survived'],autopct='%1.0f%%')
plt.show()


女性生还 233 人,生还率为 74%。
对男女生还率做个汇总:

df.groupby('Sex')['Survived'].mean()
df.groupby('Sex')['Survived'].mean().plot(kind='bar')
plt.show()


可以观察到女性生还率明显高于男性。
然后是对年龄因素的分析。
由于数据不完整,需要对个别缺失年龄的数据进行填充。

average_age=df['Age'].mean()
std_age=df['Age'].std()
count_nan_age=df['Age'].isnull().sum()
rand1=np.random.randint(average_age-std_age,average_age+std_age,size=count_nan_age)
df['Age'][np.isnan(df['Age'])]=rand1
plt.figure(figsize=(12,5))
plt.subplot(121)
df['Age'].hist(bins=70)
plt.xlabel('Age')
plt.ylabel('Num')plt.subplot(122)
df.boxplot(column='Age',showfliers=False)
plt.show()


上图为年龄的分布。
对年龄进行统计:

df['Age'].describe()


可以看出在891 人中,平均年龄约为 30 岁, 标准差 14 岁,最小年龄为 0.42岁 ,最大年龄 80岁。
然后按年龄将船上的人划分为四类:

children_df=df[df['Age']<=12]
juvenile_df = df[(df['Age'] > 12) & (df['Age'] < 18)]
adults_df=df[(df['Age']>=18)&(df['Age']<65)]
agedness_df=df[df['Age']>=65]

首先查出四类人群的生还情况和生存率:

children_survived_sum = children_df['Survived'].sum()
juvenile_survived_sum = juvenile_df['Survived'].sum()
adults_survived_sum = adults_df['Survived'].sum()
agedness_survived_sum = agedness_df['Survived'].sum()
print('儿童生还人数为%d人,少年生还人数为%d人,成年人生还人数为%d人,老年人生还人数为%d人'%(children_survived_sum, juvenile_survived_sum, adults_survived_sum , agedness_survived_sum))

儿童生还人数为40人,少年生还人数为26人,成年人生还人数为275人,老年人生还人数为1人。

children_survived_rate = children_df["Survived"].mean()
juvenile_survived_rate = juvenile_df['Survived'].mean()
adults_survived_rate = adults_df['Survived'].mean()
agedness_survived_rate = agedness_df['Survived'].mean()
print('儿童生还率为%f,少年生还率为%f,成年人生还率为%f,老年人生还率为%f'%(children_survived_rate, juvenile_survived_rate, adults_survived_rate, agedness_survived_rate))

儿童生还率为0.579710,少年生还率为0.419355,成年人生还率为0.367156,老年人生还率为0.090909。
将数据进行可视化:

x = ['children', 'juvenile', 'adults', 'agedness']
b = [40, 26, 275, 1]
y = [children_survived_rate, juvenile_survived_rate , adults_survived_rate, agedness_survived_rate]
plt.figure(figsize=(12,5))
plt.subplot(121)
x_pos = list(range(len(x)))
rects = plt.bar(x_pos, b, align='center', alpha=0.5)
def autolabel(rects): #显示数据的高度for ii,rect in enumerate(rects):height = rect.get_height()plt.text(rect.get_x()+rect.get_width()/2., 1.02*height, '%s'% (b[ii]),ha='center', va='bottom')
autolabel(rects)
plt.ylabel('Survival num')
plt.xticks(x_pos, x)plt.subplot(122)
x_pos = list(range(len(x)))
rects = plt.bar(x_pos, y, align='center', alpha=0.5)
def autolabel(rects):for ii,rect in enumerate(rects):height = rect.get_height()plt.text(rect.get_x()+rect.get_width()/2., 1.02*height, '%s'% (y[ii]),ha='center', va='bottom')
autolabel(rects)
plt.ylabel('Survival rate')
plt.xticks(x_pos, x)plt.show()


数据中生还的儿童、少年、成年和老年人数分别为40、 21、 228 和 1人,生还率分别为 58%, 48%, 39% 和 9%。
最后我们进行父母因素的分析。

parch_df=df[df['Parch']!=0]
no_parch_df=df[df['Parch']==0]

先对有父母的人员进行分析:


plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x = 'Survived', data = parch_df )plt.subplot(122)
plt.pie([parch_df['Survived'][parch_df['Survived'] == 0].count(),parch_df['Survived'][parch_df['Survived'] == 1].count()],labels=['No Survived', 'Survived'],autopct='%1.0f%%')
plt.show()

parch_survived_rate = parch_df["Survived"].mean()
print('有父母的人中生还者为%d人,生还率为%f'%(parch_df['Survived'].sum(),parch_survived_rate))

有父母的人中生还者为109人,生还率为0.511737。
再对没父母的人进行分析:

plt.figure(figsize=(10,5))
plt.subplot(121)
sns.countplot(x = 'Survived', data = no_parch_df)plt.subplot(122)
plt.pie([no_parch_df['Survived'][no_parch_df['Survived'] == 0].count(),no_parch_df['Survived'][no_parch_df['Survived'] ==1].count()],labels=['No Survived', 'Survived'],autopct='%1.0f%%')
plt.show()

no_parch_survived_rate = no_parch_df["Survived"].mean()
print('没有父母的人中生还者为%d人,生还率为%f'%(no_parch_df['Survived'].sum(),no_parch_survived_rate))

没有父母的人中生还者为233人,生还率为0.343658。

至此本次分析按照船舱等级,性别,年龄,有无父母分别进行对比,观察这些因素是否影响泰坦尼克号上的生存率。

本次数据分析的登船者共有 891人,遇难后,生还者仅剩 342 人,生还率为 38%。

泰坦尼克号上共有三种类型的船舱。遇难前,1等舱里共有 216 人,2等舱有 184 人,3等舱有 491 人。遇难后,三个船舱的乘客人数锐减到136、87、119人。 三个船舱的生还率分别为 63%, 47%和 24%。由数据可知船舱等级越高,生还率越高。

登船时,有 577人为男性, 314人为女性,然后男女比例为 65% 和 35%。 遇难后,男性减少到 109人,女性减少到 233人,男女比例变为 32% 和 68%。男性共有109人生还,生还率为 19%。 女性共有 233 人生还,生还率为 74%。女性比男性更易存活。

泰坦尼克号上的 891 人中,平均年龄约为 30 岁。将所有人员按照儿童、青年、成年、老年划分为四种,这四个类别人的生还率分别为 58%, 48%, 39% 和 9%。 由数据可以看到年龄越小,生还率越高。

此次灾难中,与父母一同登船的乘客,生还人数为 109 人,生还率为 51%。没有与父母一起登船的乘客,生还人数为 233 人,生还率仅为 34%。 由此可见与父母一起登船的乘客生还率高于没有与父母一起登船的乘客。

泰坦尼克号的数据分析相关推荐

  1. 泰坦尼克号沉船数据分析与可视化、数据建模与分类预测【Python | 机器学习-Sklearn】

    泰坦尼克号沉船数据之美--起于悲剧,止于浪漫 前言:泰坦尼克号,不只是卡梅隆导演的经典电影,它是一个真实存在的悲剧,也是电影的故事背景与题材.作为一个IT人,分析事实还得看数据,了解到泰坦尼克号沉船幸 ...

  2. 泰坦尼克号python数据分析统计服_python数据处理——泰坦尼克

    承接上篇豆瓣数据分析 本次主要是进行以下内容: 1.泰坦尼克号的数据分析,主要分析哪些特征影响了乘客的获救和遇难,是年龄?是性别? #泰坦尼克数据集导入 titanic_df = sns.load_d ...

  3. 泰坦尼克号Python数据分析

    环境 Spyder3 参考书籍 Python数据分析及应用 泰坦尼克号数据集 链接:https://pan.baidu.com/s/10y2SRH7Ry_W3CZC3s8PHWw 提取码:s128 复 ...

  4. 泰坦尼克号可视化数据分析报告

    上一节已经用用逻辑回归算法预测泰坦尼克号人员存活情况,但是不了解什么样的人容易存活:因此,用数据分析方法继续探究数据背后隐藏的秘密,并用数据可视化方法展示出来. 目录 提出问题 理解数据 采集数据 导 ...

  5. 泰坦尼克号python数据分析统计服_泰坦尼克号乘客数据分析

    本文是优达学城数据分析师 P2 项目的结课报告,主要探寻泰坦尼克号上的生还率和各因素(客舱等级.年龄.性别.上船港口等)的关系. # Imports import numpy as np import ...

  6. 泰坦尼克号python数据分析统计服_Titanic数据分析报告(Python)

    研究目的:使用机器学习来创建一个模型,该模型可以预测哪些乘客在泰坦尼克号沉船事故中幸存下来. 研究结论: 分析过程: 本次分析使用Jupter Notebook进行分析 该notebook 服务的版本 ...

  7. 泰坦尼克号python数据分析统计服_数据分析可视化——泰坦尼克号幸存者分析(上)...

    文章目录数据获取.结构分析如何获取seaborn提供数据源 特征列分析 缺失值与数据清洗年龄缺失值处理 填充embarked 删除不必要的列 幸存者分析分析性别对存活率的影响 分析年龄对存活率影响 分 ...

  8. 泰坦尼克号python数据分析统计服_Python-数据可视化案例分析之泰坦尼克号(二)...

    在第一节"Python-数据清洗与分析案例之泰坦尼克号(一)"网址:https://www.lixdx.cn/archives/93 中进行了数据清洗与缺失值填充,接下来进行数据可 ...

  9. python数据科学导论-泰坦尼克号之数据分析

    题目一:数据清洗及预处理 一.首先导入读取csv的pandas包,然后读取训练数据集及预测数据集 import pandas as pd import numpy as np import matpl ...

  10. 数据挖掘-泰坦尼克号生存数据分析

    //解析数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns ...

最新文章

  1. PowerDesigner与Rose详解教程
  2. canvas 绘制跟随鼠标移动的线条
  3. Python学习教程:0基础学Python?手把手教你从变量和赋值语句学
  4. MySQL 高级 - 索引 - 索引分类
  5. linux生成免密码登录
  6. 使用模拟的单元测试–测试技术5
  7. 【Spark Summit East 2017】管道泄漏问题:像女士一样在大数据中做个的标记
  8. 19电子设计速成实战宝典pdf_开发宝典丛书:Visual C++编程实战宝典PDF
  9. python 高性能http服务器_Python高性能HTTP客户端
  10. DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比
  11. 华为发布IdeaHub S2系列,与华为云会议结合更强大
  12. java计算机毕业设计英语学习网站设计与实现MyBatis+系统+LW文档+源码+调试部署
  13. 【数据挖掘】K-Means 一维数据聚类分析示例
  14. stata回归分析与系数检验专题【计量经济系列(三)】
  15. Anaconda报错:Conda SSL Error: OpenSSL appears to be unavailable on this machine. OpenSSL is required t
  16. 久贺谷亮《高效休息法》读书笔记
  17. Typora设置标题自动标号
  18. EF(Entity Framework、EF Core)
  19. 天梯赛题目练习——平面向量加法(附带PTA测试点)
  20. CATIA CAA二次开发专题(四)------创建自己的Addin

热门文章

  1. covar of lognormal variables
  2. 数字电路:设计《三个开关控制一个灯的电路》
  3. 新世纪孙鹏飞带你整理平面排版
  4. ROBOGUIDE软件:FANUC机器人弧焊焊接系统配置与虚拟仿真
  5. 【基于51】红外寻迹智能小车 - 代码篇
  6. costmap代价地图学习
  7. 为真实硬件安装WDM驱动
  8. apple id两步验证服务器,什么是Apple ID两步验证 苹果ID二次验证流程
  9. 麦咖啡服务器怎么进系统,麦咖啡(McAfee)系统托盘图标不见了怎么办?
  10. 如何批量打印jpg图片