泰坦尼克号沉船生存率分析

  • 了解如何调查数据集中的问题,以及将数据整理成你可以使用的格式
  • 练习传达你的分析结果
  • 能够在 NumPy 和 Pandas 中使用向量化运算,以加快数据分析代码的运行速度
  • 熟悉 Pandas 的 Series 和 DataFrame 对象,它们能使你访问数据更方便
  • 了解如何使用 Matplotlib 生成图形,展示你的发现

一、导入数据集

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import DataFrame
from pandas import Series

%matplotlib inline
df = pd.read_csv('titanic_data.csv', index_col=0)
df.head(5)

image.png

以下为Data Dictionary

  • PassengerId:乘客的ID
  • Survived:乘客是否获救,Key:0=没获救,1=已获救
  • Pclass:乘客船舱等级(1/2/3三个等级舱位)
  • Name:乘客姓名
  • Sex:性别
  • Age:年龄
  • SibSp:乘客在船上的兄弟姐妹/配偶数量
  • Parch:乘客在船上的父母/孩子数量
  • Ticket:船票号
  • Fare:船票价
  • Cabin:客舱号码
  • Embarked:登船的港口

变量类型说明

  • 数值变量:Age、SibSp、Parch、Fare
  • 分类变量:Pcalss, Sex, Cabin, 和Embarked
二、提出问题和猜想
影响乘客生还率的因素可能有哪些
猜测因素包括:
  • 年龄
  • 性别
  • 客舱等级
  • 票价
  • 家人数 (因从电影了解到,妇女儿童获救概率高,且一等舱因为靠近最高层获救可能性更高。)
三、数据预处理
数据预处理包括:
  • 1、查看缺失值,并对缺失值删除或填充
  • 2、删除不需要的数据
  • 3、对数据进行分组或合并
查看CSV中各列的缺失值

df

image.png

从以上所列数据可知:总共891个乘客,其中有缺失值部分的是:Age中只有714个,Cabin中只有204,而Embarked是889

填充Age中的缺失值

df['Age'].fillna(df['Age'].median(), inplace=True)
乘客名字、船票、客舱号码和登船的港口,与生存率关系不大,可直接删除。

df.drop(['Cabin', 'Embarked', 'Name', 'Ticket'], axis=1, inplace=True)
df.head(5)

image.png

根据分析目的,猜测家人数与被获救可能有关,因此将SibSP与Parch两组合并成一组亲属

df['rel'] = df['SibSp'] + df['Parch']
df.head(6)

image.png

df.describe()

image.png

从以上数据结果可看出,平均的生还率是0.38,乘客平均年龄是29.69岁,最小的乘客4个月,最大的乘客年龄80岁。年龄的中位数是28岁。

四、数据分析

通过描述性分析和数据可视化分析结果,探索乘客生还的因素

单变量探索,查看船上乘客和票价的整体分布情况

%matplotlib inline
import matplotlib.pyplot as plt

fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,5))
df["Age"].hist(ax=ax[0])
ax[0].set_title("Hist plot of Age")
df["Fare"].hist(ax=ax[1])
ax[1].set_title("Hist plot of Fare")
image.png

乘客的年龄集中在20-40岁之间,大部分乘客的票价很低,基本在0-100之间。

单变量探索,查看船上性别的整体分布情况

Sex_count = df.Sex.value_counts()
print Sex_count

image.png

Sex_count.plot(kind='pie',autopct = '%3.1f%%');

image.png

船上绝大多数为女性,不到两倍。

探索性别、船舱等级和生还率的关系
image.png

variable_visulization('Pclass')

image.png

乘客中,三等舱的乘客最多,一等舱和二登舱乘客相差不多。大部分乘客未获救,同时,船舱等级越高,生还率越大。一等舱的获救比例是最高的,三等舱人数最多,但生还率最低。

variable_visulization('Sex')

image.png

以上图结果可知,大部分人是没有被获救的,且获救的乘客中,女性远远大于男性,大概有三倍之多。

接下来探索,不同船舱等级、性别与生还率的关系
image.png

从图中可以看出,不管是在什么等级的船舱,女性的生还率都是高于男性的。但无论男女,船舱等级越高,生还率越高。

探索生还的乘客年龄

创建新的一列,储存乘客的年龄范围

bins = np.arange(0, 80, 10)
df['Age_group'] = pd.cut(df['Age'], bins)
将"Age_group"分组,并计算各年龄段的生还率

survival_count_by_age_bracket = df.groupby(['Age_group'])['Survived'].count()
survival_rate_by_age_bracket = df.groupby(['Age_group'])['Survived'].mean()

print survival_rate_by_age_bracket
print survival_count_by_age_bracket
image.png
figure = plt.figure(figsize=(13,8))
plt.hist([df[df['Survived']==0]['Age']], stacked=True, color = ['g'],
         bins = 30,label = ['Survived'])
plt.xlabel('Age')
plt.ylabel('Number of passengers')
plt.legend()
plt.title("Age of plot") 
image.png

从数据中可知,0-10岁的生还率是最高的,而图中可知,大部分的被获救的乘客介于0-30岁之间。

从图中可知,票价低的乘客罹难可能性更高。

探索携带了亲属的乘客,与生还率的关系

rel_count = df.rel.value_counts()
print rel_count

image.png

survival_rate_by_sibsp_parch = df.groupby('rel')['Survived'].mean()
print survival_rate_by_sibsp_parch

image.png
survival_rate_by_sibsp_parch.plot(kind='bar')
plt.title('Survival by rel', fontsize=16) 
plt.xlabel('rel')
plt.ylabel('Survial Rate')
plt.ylim(0, 1)
image.png

虽然从图中可知,亲属越多,生还的可能性越大。

探索年龄、票价和生还率的关系
plt.figure(figsize=(13,8))
ax = plt.subplot()
ax.scatter(df[df['Survived']==1]['Age'],df[df['Survived']==1]['Fare'],c='green',s=40)
ax.scatter(df[df['Survived']==0]['Age'],df[df['Survived']==0]['Fare'],c='red',s=40)
ax.set_xlabel('Age')
ax.set_ylabel('Fare')
ax.legend(('survived','dead'),scatterpoints=1,loc='upper right',fontsize=15,)
image.png

罹难乘客的年龄集中在15-50岁之间的低票价乘客

总结
通过数据可视化结果,对初期提出的猜测做出以下结论:
  • 1、女性生还率远远高于男性,大约是3倍左右。
  • 2、0-10岁的幼儿生还率远远大于成年人,15-50岁的低票价乘客罹难最多。
  • 3、票价越高,生还率越高。客舱等级越高,生还率越高。
  • 4、亲属越多,生还的可能性越大。

说明:通过使用python对泰坦尼克号的生还数据进行分析,初步得出了一些结论,但这些结论仅通过可视化和描述性统计得出,缺乏进一步深入的分析,结论的可靠性有待验证。 另外,由于数据中有缺失值,对分析造成了负面影响。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容