泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析

在上一篇文章中,已经介绍了泰坦尼克号生存率预测的数据处理,预测模型训练

老菜鸟:泰坦尼克号幸存者预测​zhuanlan.zhihu.com

这一次对分析的结果进行数据可视化:

在泰坦尼克号中幸存者的分析中,通过相关性分析选择出7种特征:头衔titleDf,客舱等级pclassDf,家庭大小familyDf,船票价格Fare,船舱号cabinDf, 登船港口embarkedDf,性别Sex。 最后探讨一下年龄特征:老年人,未成年人是否更容易遇难

目录

  • -1-生存情况总体分布
  • -2-生存率函数
  • -3-各特征与生存率的关系
    • 1.船舱等级对生存率影响
    • 2.头衔对生存率影响
    • 3.登船港口对生存率影响
    • 4.船舱号对生存率影响
    • 5.性别对生存率影响
    • 6.票价对生存率影响
    • 7.年龄分布与生存率的关系

-1-生存情况总体分布

本次研究的核心指标是生存率,通过下面代码获得总体的生存率


surviveDf=full.groupby("Survived")['Survived'].count()
fig=plt.figure()
ax1=fig.add_subplot(1,2,1)
surviveDf.plot(ax=ax1,kind='bar')
plt.ylabel("人数")
plt.title("生存人数分布")
sns.despine()
plt.xticks(range(len(surviveDf)),['死亡','幸存'],rotation=360)
ax2=fig.add_subplot(1,2,2)
surviveDf.plot(ax=ax2,kind='pie',labels=['死亡','存活'],autopct='%1.2f%%')
plt.axis("equal")
plt.title("生存率分布情况")
plt.show()

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第1张图片

分析结果: 上图表明,在891个乘客中,生存率为38.38%,遇难率为61.62%


-2-生存率函数

后面要多次使用幸存与死亡人数的柱状图,幸存率的柱状图,而且代码相似,因此构造一个函数,避免重复劳动

#函数以列名为参数,直接输入列名,获得对应列的生存死亡人数柱状图,生存率柱状图
def survived_rate(string):#
    #计算幸存率
    survivedRate=full.groupby([string,'Survived']).Survived.count().unstack()
    survivedRate['总人数']=survivedRate[0].values+survivedRate[1].values
    survivedRate['幸存率']=survivedRate[1].values/survivedRate['总人数'].values
    #对survivedRate按照幸存率排序
    survivedRate=survivedRate.sort_values(by='幸存率',ascending=True)
    #画幸存与死亡人数的柱状图
    survivedRate=survivedRate.fillna(0)
    survivedRate.rename(columns={
      0:"死亡",1:"幸存"},inplace=True)
    survivedRate[["死亡","幸存"]].plot(kind="barh",stacked=True)
    plt.grid(axis="x",ls="--")
    plt.ylabel(string,fontsize=15)
    plt.xlabel("人数",fontsize=15)
    fig=plt.figure(figsize=(6,6))
    x=range(len(survivedRate["幸存率"]))
    #画幸存率的柱状图
    plt.bar(x,survivedRate["幸存率"])
    plt.xticks(x,survivedRate.index)
    plt.xlabel(string,fontsize=15)
    plt.ylabel("幸存率",fontsize=15)
    plt.grid(axis="y",ls="--")
    for x,y in zip(x,survivedRate["幸存率"]):
        plt.text(x,y,"%.0f%%"%(y*100),ha='center',va="bottom",fontsize=13)
    sns.despine()
    plt.show()
    return survivedRate

-3-各特征与生存率的关系

1.船舱等级对生存率影响

#更改列名
dict={
      "Pclass":"船舱等级","Embarked":"登船港口","title":"头衔","Cabin":"船舱号","Sex":"性别"}
full.rename(columns=dict,inplace=True)

survived_rate("船舱等级")

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第2张图片

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第3张图片

分析结果: 由上图可以看出,3等级客舱的人数最多,为491人,占55.04%,在幸存率方面,1等级客舱的生存率最高,为63%,其次是2等级客舱,说明了客舱的等级越高,生存率越高。

2.头衔对生存率影响

survived_rate("头衔")

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第4张图片

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第5张图片

分析结果: 由上图可知,在891名乘客中,人数较多的头衔是Mr, Mrs, Miss, Master,在幸存率方面,Mr的最低,为16%,,而Master,royalty,Mrs, Miss的生存率分别为 57%,60%,70%,80%,说明女性,学者,贵族在此次灾难中生存的机率相对较高

3.登船港口对生存率影响

具体登船情况

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第6张图片
survived_rate("登船港口")

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第7张图片

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第8张图片

分析结果: 由上图可知,登录港口为C(法国瑟堡)的乘客生存率最高,为55.36%,出发地S(英国南安普顿)的乘客生存率最低,为33.7%

4.船舱号对生存率影响

survived_rate('船舱号')

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第9张图片

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第10张图片

分析结果: 从上图可以看出,大多数乘客的船舱号是u类别(数据处理时,把不知道船舱号的船员分为u类,因为没有研究价值),在幸存率方面,D号船舱的幸存率最大,为76%,其次是E和B,生存率分别是75%和74%,幸存率最小的为T号船舱:没有人幸存

5.性别对生存率影响

dict={
      1:"male",0:"female"}
full['性别']=full["性别"].map(dict)
survived_rate("性别")

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第11张图片

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第12张图片

分析结果: 由上图可知,在891名乘客中,男性有577人,占比64.75%,在幸存率方面,女性是74%显著高于男性

6.票价对生存率影响

sns.boxplot(x="Survived",y='Fare',data=full)
plt.ylim(0,130)

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第13张图片

分析结果: 箱线图表明,生存者的船票价格中位数比遇难者高,说明船票价格越贵,生存率越大

7.年龄分布与生存率的关系

由下图可知,年龄呈正态分布

sns.distplot(full.Age)

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第14张图片

那么老人和未成年人的生存率是否要低一些?

分析如下

def get_age(age):
    if age<18:
        return "未成年"
    elif 18<=age<60:
        return "中年"
    else:
        return "老年"
full["年龄分布"]=full.Age.map(get_age)
survived_rate("年龄分布")

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第15张图片

泰坦尼克号数据_数据可视化:泰坦尼克号幸存者分析_第16张图片

分析结果: 从上图可知,船上是以中年人为主体,共752人, 但是幸存率是未成年人最高,为54%, 而老年人最低,为27%

你可能感兴趣的:(泰坦尼克号数据)