美文网首页我爱编程
泰坦尼克号沉船生存率分析

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

作者: 奇颖 | 来源:发表于2018-02-26 14:07 被阅读0次
    • 了解如何调查数据集中的问题,以及将数据整理成你可以使用的格式
    • 练习传达你的分析结果
    • 能够在 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对泰坦尼克号的生还数据进行分析,初步得出了一些结论,但这些结论仅通过可视化和描述性统计得出,缺乏进一步深入的分析,结论的可靠性有待验证。 另外,由于数据中有缺失值,对分析造成了负面影响。

    相关文章

      网友评论

        本文标题:泰坦尼克号沉船生存率分析

        本文链接:https://www.haomeiwen.com/subject/rbcyxftx.html