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

这篇具有很好参考价值的文章主要介绍了泰坦尼克号可视化数据分析报告。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

目录

  1. 提出问题
  2. 理解数据
    • 采集数据
    • 导入数据
    • 查看数据
  3. 数据清洗
  4. 数据处理
    • 幸存率与家庭类别
    • 幸存率与头衔
    • 幸存率与年龄
    • 幸存率与客舱等级
    • 幸存率与性别
    • 幸存率与登船港口

1. 提出问题

什么样的人更容易存活?

2. 理解数据

2.1 采集数据

点击此链接进入kaggle的titanic项目下载数据集

2.2 导入数据

#导入处理数据包
import numpy as np
import pandas as pd

train=pd.read_csv('E:\\titanic\\train.csv')
print('训练数据集:',train.shape)
训练数据集: (891, 12)

2.3 查看数据集信息

2.3.1 查看数据集前几行数据

train.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

2.3.2 查看数值型数据的描述性统计信息

train.describe()
PassengerId Survived Pclass Age SibSp Parch Fare
count 891.000000 891.000000 891.000000 714.000000 891.000000 891.000000 891.000000
mean 446.000000 0.383838 2.308642 29.699118 0.523008 0.381594 32.204208
std 257.353842 0.486592 0.836071 14.526497 1.102743 0.806057 49.693429
min 1.000000 0.000000 1.000000 0.420000 0.000000 0.000000 0.000000
25% 223.500000 0.000000 2.000000 20.125000 0.000000 0.000000 7.910400
50% 446.000000 0.000000 3.000000 28.000000 0.000000 0.000000 14.454200
75% 668.500000 1.000000 3.000000 38.000000 1.000000 0.000000 31.000000
max 891.000000 1.000000 3.000000 80.000000 8.000000 6.000000 512.329200

Age列有714个数据,说明有缺失值;
Fare票价最低是0元,说明有异常值。

2.3.3 查看数据每一列的数据总和和数据类型

train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 66.2+ KB

发现Age、Cabin和Embarked有缺失值,需要进行数据清洗

3. 数据清洗

3.1 缺失值处理

3.1.1 数值型缺失值处理,简单的方法用平均值代替

train['Age']=train['Age'].fillna(train['Age'].mean())

3.1.2 字符串型缺失值处理

3.1.2.1 Embarked缺失值处理

Embarked只缺失两个值,可用最多的值代替

train['Embarked'].value_counts()
S    644
C    168
Q     77
Name: Embarked, dtype: int64
#S最多,选择用S来填充缺失值
train['Embarked']=train['Embarked'].fillna('S')
3.1.2.2 Cabin缺失值处理

因Cabin缺失值较多,选择用U(Uknow)来填充

train['Cabin']=train['Cabin'].fillna('U')
#查看缺失值处理后的结果
train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          891 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        891 non-null    object 
 11  Embarked     891 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 66.2+ KB
train.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 U S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 U S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 U S

3.2 异常值处理

#查看Fare等于0的有多少个
train[train['Fare']==0].shape[0]
15

只有15个比较少,选择保留不做处理

4. 数据分析

数据库里有10个指标与乘客信息有关

其中以下三个指标不进行分析:
Ticket(票号):无法分类,没有参考价值;Fare(票价):票价由客舱等级决定,不必重复分析;Cabin(客舱号):缺失值数量太多,没有分析价值。

下面对家庭类别、头衔、年龄、客舱等级、性别、登船港口6个指标分别进行分析

4.1 家庭类别与生存率的关系

4.1.1 家庭分组

#存放家庭信息
familyDf = pd.DataFrame()

'''
家庭人数=同代直系亲属数(Parch)+不同代直系亲属数(SibSp)+乘客自己
(因为乘客自己也是家庭成员的一个,所以这里加1)
'''
familyDf[ 'FamilySize' ] = train[ 'Parch' ] + train[ 'SibSp' ] + 1

'''
家庭类别:
小家庭Family_Single:家庭人数=1
中等家庭Family_Small: 2<=家庭人数<=4
大家庭Family_Large: 家庭人数>=5
'''
# 定义家庭分组用的函数
def familyGroup(FS):
    if FS==1:
        return 'Family_Single'
    elif 2<=FS<=4:
        return 'Family_Small'
    else:
        return 'Family_Large'
    
#map函数主要作用是使用自定义函数
familyDf['FamilyCategory'] = familyDf['FamilySize'].map(familyGroup)
familyDf.head()
FamilySize FamilyCategory
0 2 Family_Small
1 2 Family_Small
2 1 Family_Single
3 2 Family_Small
4 1 Family_Single

将得到的familyDf分组添加到train数据集中

train = pd.concat([train,familyDf],axis=1)
train.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked FamilySize FamilyCategory
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 U S 2 Family_Small
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C 2 Family_Small
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 U S 1 Family_Single
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S 2 Family_Small
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 U S 1 Family_Single

4.1.2 汇总家庭类别与是否幸存的人数

DataFrame的pivot_table方法可用于汇总统计,类似于Excel的数据透视表,参数如下:

  • 第1个参数:需要汇总统计的数据源
  • index : 透视表的行索引,必要参数,如果我们想要设置多层次索引,使用列表[ ]
  • values : 对目标数据进行筛选,默认是全部数据,我们可通过values参数设置我们想要展示的数据列
  • columns :透视表的列索引,非必要参数,同index使用方式一样
  • aggfunc :对数据聚合时进行的函数操作,默认是求平均值,也可以sum、count等
  • margins :额外列,在最边上,默认是对行列求和
  • fill_value : 对于空值进行填充
  • dropna : 默认开启去重
# 汇总统计家庭类别与是否幸存的人数
FamilyCgDf = pd.pivot_table(train,
                            index='FamilyCategory',
                            columns='Survived',
                            values='PassengerId',
                            aggfunc='count')

FamilyCgDf
Survived 0 1
FamilyCategory
Family_Large 52 10
Family_Single 374 163
Family_Small 123 169
# 汇总统计家庭类别与是否幸存的人数
FamilyCgDf_1 = pd.pivot_table(train,
                            index='FamilyCategory',
                            columns='Survived',
                            values='FamilySize',
                            aggfunc='count')

FamilyCgDf_1
Survived 0 1
FamilyCategory
Family_Large 52 10
Family_Single 374 163
Family_Small 123 169

4.1.3 汇总统计家庭类别的存活率

DataFrame的div函数用于数据框除以其他元素后的值,主要有2个参数:

  • other:标量 (scalar),序列(sequence),Series或DataFrame,任何单个或多个元素数据结构或类似列表的对象。
  • axis:0 或‘index’, 1 或‘columns’,是否通过索引 (0 or‘index’) 或列(1 或‘columns’)进行比较。对于Series输入,轴匹配Series索引。
# div函数用法1:除以同一个值
FamilyCgDf.div(10)
Survived 0 1
FamilyCategory
Family_Large 5.2 1.0
Family_Single 37.4 16.3
Family_Small 12.3 16.9
# div函数用法2:根据不同索引,除以不同值
otherS = pd.Series([10,100,1000],index=['Family_Large','Family_Single','Family_Small'])
FamilyCgDf.div(otherS,axis='index')
Survived 0 1
FamilyCategory
Family_Large 5.200 1.000
Family_Single 3.740 1.630
Family_Small 0.123 0.169

以上代码表示FamilyCgDf数据框的3行索引的值分别除以10、100和1000。 同理,可设置索引的值分别除以所在行的求和值:

# 汇总统计家庭类别与是否幸存的比例
FamilyCgDf2 = FamilyCgDf.div(FamilyCgDf.sum(axis=1),axis=0)

FamilyCgDf2
Survived 0 1
FamilyCategory
Family_Large 0.838710 0.161290
Family_Single 0.696462 0.303538
Family_Small 0.421233 0.578767

上面数据框的两列分别表示各个家庭类别的死亡率和幸存率,这里只获取幸存率:

# 获取家庭类别的幸存率
FamilyCgDf_rate = FamilyCgDf2.iloc[:,1]

FamilyCgDf_rate
FamilyCategory
Family_Large     0.161290
Family_Single    0.303538
Family_Small     0.578767
Name: 1, dtype: float64

4.1.4 幸存率与家庭类别的可视化分析

可视化需要用到matplotlib包,先导入相关包:

%matplotlib inline
# 导入可视化包
import matplotlib.pyplot as plt

使用Python建立可视化图表的步骤主要有:

  1. 创建画板
  2. 创建画纸,图表都建立在画纸上
  3. 选择画纸,绘制图表
  4. 设置图表参数
  5. 显示图表
# 创建画板并设置大小
fig = plt.figure(1)
plt.figure(figsize=(12,4))

# 创建画纸(子图)
'''
subplot()方法里面传入的三个数字
前两个数字代表要生成几行几列的子图矩阵,第三个数字代表选中的子图位置
subplot(1,2,1)生成一个1行2列的子图矩阵,当前是第一个子图
'''
#创建画纸,并选择画纸1
ax1 = plt.subplot(1,2,1)
# 在画纸1绘制堆积柱状图
FamilyCgDf.plot(ax=ax1,#选择画纸1
                kind='bar',#选择图表类型
                stacked=True,#是否堆积
                color=['orangered','royalblue'] #设置图表颜色
               )
# x坐标轴横向显示
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Family')
# y坐标轴文本
plt.ylabel('Num')
# 图表标题
plt.title('Family and Survived Num')
# 设置图例
plt.legend(labels=['Not Survived','Survived'],loc='upper right')

# 选择画纸2
ax2 = plt.subplot(1,2,2)
# 在画纸2绘制柱状图
FamilyCgDf_rate.plot(ax=ax2,kind='bar',color='orange')
# x坐标轴横向显示
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Family')
# y坐标轴文本
plt.ylabel('Survived Rate')
# 图表标题
plt.title('Family and Survived Rate')

# 显示图表
plt.show()
<Figure size 432x288 with 0 Axes>

泰坦尼克号可视化数据分析报告
在人数上,单身人士最多,其次是小家庭,最少的是大家庭;

在幸存率方面,人数最少的大家庭幸存率最低,小家庭的幸存率最高,其次是单身人士。

4.2 头衔与生存率的关系

4.2.1 头衔分组

首先定义一个函数,用于从乘客姓名中获取头衔:

'''
定义函数:从姓名中获取头衔
'''
def getTitle(name):
    str1=name.split(',')[1] #Mr. Owen Harris
    str2=str1.split('.')[0] #Mr
    #strip() 方法用于移除字符串头尾指定的字符(默认为空格)
    str3 = str2.strip()
    return str3

利用该函数获取每位乘客的头衔,并汇总统计所有头衔的数量:

# 存放提取后的特征
titleDf = pd.DataFrame()

# map函数:对Series每个数据应用自定义的函数计算
titleDf['Title'] = train['Name'].map(getTitle)

# 所有头衔及其数量
titleDf['Title'].value_counts()
Mr              517
Miss            182
Mrs             125
Master           40
Dr                7
Rev               6
Major             2
Mlle              2
Col               2
Mme               1
Jonkheer          1
Sir               1
Lady              1
Capt              1
Ms                1
the Countess      1
Don               1
Name: Title, dtype: int64

由于头衔类别过多,且有些头衔数量很少,这里将头衔重新归为6大类,定义如下:

  • Officer:政府官员
  • Royalty:王室(皇室)
  • Mr:已婚男士
  • Mrs:已婚妇女
  • Miss:年轻未婚女子
  • Master:有技能的人/教师

然后,建立姓名中头衔与6大类的映射关系,并用map函数完成转换:

title_mapDict = {
                    "Capt":       "Officer",
                    "Col":        "Officer",
                    "Major":      "Officer",
                    "Jonkheer":   "Royalty",
                    "Don":        "Royalty",
                    "Sir" :       "Royalty",
                    "Dr":         "Officer",
                    "Rev":        "Officer",
                    "the Countess":"Royalty",
                    "Dona":       "Royalty",
                    "Mme":        "Mrs",
                    "Mlle":       "Miss",
                    "Ms":         "Mrs",
                    "Mr" :        "Mr",
                    "Mrs" :       "Mrs",
                    "Miss" :      "Miss",
                    "Master" :    "Master",
                    "Lady" :      "Royalty"
                    }

# map函数:对Series每个数据应用自定义的函数计算
titleDf['Title'] = titleDf['Title'].map(title_mapDict)

将刚得到的头衔分组添加到数据集train中:

train = pd.concat([train,titleDf],axis=1)

train.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked FamilySize FamilyCategory Title
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 U S 2 Family_Small Mr
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C 2 Family_Small Mrs
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 U S 1 Family_Single Miss
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S 2 Family_Small Mrs
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 U S 1 Family_Single Mr

4.2.2 汇总统计不同头衔与是否幸存的人数

TitleDf = pd.pivot_table(train,
                         index='Title',
                         columns='Survived',
                         values='PassengerId',
                         aggfunc='count')

TitleDf
Survived 0 1
Title
Master 17 23
Miss 55 129
Mr 436 81
Mrs 26 101
Officer 13 5
Royalty 2 3

4.2.3 汇总统计不同头衔的幸存率

# 汇总统计不同头衔与是否幸存的比例
TitleDf2 = TitleDf.div(TitleDf.sum(axis=1),axis=0)

TitleDf2
Survived 0 1
Title
Master 0.425000 0.575000
Miss 0.298913 0.701087
Mr 0.843327 0.156673
Mrs 0.204724 0.795276
Officer 0.722222 0.277778
Royalty 0.400000 0.600000
# 获取不同头衔的幸存率
TitleDf_rate = TitleDf2.iloc[:,1]

TitleDf_rate
Title
Master     0.575000
Miss       0.701087
Mr         0.156673
Mrs        0.795276
Officer    0.277778
Royalty    0.600000
Name: 1, dtype: float64

4.2.4 幸存率与头衔的可视化分析

# 创建画板并设置大小
fig = plt.figure(1)
plt.figure(figsize=(12,4))

# 创建画纸(子图)

#创建画纸,并选择画纸1
ax1 = plt.subplot(1,2,1)
# 在画纸1绘制堆积柱状图
TitleDf.plot(ax=ax1,#选择画纸1
                kind='bar',#选择图表类型
                stacked=True,#是否堆积
                color=['orangered','royalblue'] #设置图表颜色
               )
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Title')
# y坐标轴文本
plt.ylabel('Num')
# 图表标题
plt.title('Title and Survived Num')
# 设置图例
plt.legend(labels=['Not Survived','Survived'],loc='upper right')

# 选择画纸2
ax2 = plt.subplot(1,2,2)
# 在画纸2绘制柱状图
TitleDf_rate.plot(ax=ax2,kind='bar',color='orange')
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Title')
# y坐标轴文本
plt.ylabel('Survived Rate')
# 图表标题
plt.title('Title and Survived Rate')

# 显示图表
plt.show()
<Figure size 432x288 with 0 Axes>

泰坦尼克号可视化数据分析报告
头衔分类中人数最多的是已婚男士,未婚女士和已婚女士次之,其他头衔的只占少数;

幸存率方面,已婚男士最低,政府官员也较低,已婚女士和未婚女士的幸存率最高。

4.3 年龄与幸存率的关系

4.3.1 年龄分组

'''
年龄分组:
儿童(Children):0-13
青年(Youth):14-30
中年(Middle-aged):30-60
老年(The old):60以上
'''
# 定义年龄分组函数
def ageCut(a):
    if a<=13:
        return 'Children'
    elif 13<a<=30:
        return 'Youth'
    elif 30<a<=60:
        return 'Middle-aged'
    else:
        return 'The old'
#if 条件为真的时候返回if前面内容,否则返回后面的内容
train['AgeCategory'] =train['Age'].map(ageCut)
train[['AgeCategory','Age' ]].head()
AgeCategory Age
0 Youth 22.0
1 Middle-aged 38.0
2 Youth 26.0
3 Middle-aged 35.0
4 Middle-aged 35.0

4.3.2 汇总统计不同年龄段与是否幸存的人数

AgeDf = pd.pivot_table(train,
                       index='AgeCategory',
                       columns='Survived',
                       values='PassengerId',
                       aggfunc='count',
                       fill_value=0)

AgeDf
Survived 0 1
AgeCategory
Children 29 42
Middle-aged 164 119
The old 17 5
Youth 339 176

4.3.3 汇总统计不同年龄段的幸存率

# 汇总统计不同年龄与是否幸存的比例
AgeDf2 = AgeDf.div(AgeDf.sum(axis=1),axis=0)

AgeDf2
Survived 0 1
AgeCategory
Children 0.408451 0.591549
Middle-aged 0.579505 0.420495
The old 0.772727 0.227273
Youth 0.658252 0.341748
# 获取不同年龄段的幸存率
AgeDf_rate = AgeDf2.iloc[:,1]

AgeDf_rate
AgeCategory
Children       0.591549
Middle-aged    0.420495
The old        0.227273
Youth          0.341748
Name: 1, dtype: float64

4.3.4 幸存率与年龄的可视化分析

# 创建画板并设置大小
fig = plt.figure(1)
plt.figure(figsize=(12,4))

# 创建画纸(子图)

#创建画纸,并选择画纸1
ax1 = plt.subplot(1,2,1)
# 在画纸1绘制堆积柱状图
AgeDf.plot(ax=ax1,#选择画纸1
                kind='bar',#选择图表类型
                stacked=True,#是否堆积
                color=['orangered','royalblue'] #设置图表颜色
               )
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Age')
# y坐标轴文本
plt.ylabel('Num')
# 图表标题
plt.title('Age and Survived Num')
# 设置图例
plt.legend(labels=['Not Survived','Survived'],loc='upper left')

# 选择画纸2
ax2 = plt.subplot(1,2,2)
# 在画纸2绘制柱状图
AgeDf_rate.plot(ax=ax2,kind='bar',color='orange')
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Age')
# y坐标轴文本
plt.ylabel('Survived Rate')
# 图表标题
plt.title('Age and Survived Rate')

# 显示图表
plt.show()
<Figure size 432x288 with 0 Axes>

泰坦尼克号可视化数据分析报告
青年人数最多,中年人次之,儿童人数较少,老年人最少;

儿童的幸存率最高,中年人次之,老年人的最低。

4.4 客舱等级与幸存率的关系

4.4.1 汇总统计不同客舱等级与是否幸存的人数

PclassDf = pd.pivot_table(train,
                          index='Pclass',
                          columns='Survived',
                          values='PassengerId',
                          aggfunc='count')

PclassDf
Survived 0 1
Pclass
1 80 136
2 97 87
3 372 119

4.4.2 汇总统计不同客舱等级的幸存率

# 汇总统计不同客舱等级与是否幸存的比例
PclassDf2 = PclassDf.div(PclassDf.sum(axis=1),axis=0)

PclassDf2
Survived 0 1
Pclass
1 0.370370 0.629630
2 0.527174 0.472826
3 0.757637 0.242363
# 获取不同客舱等级的幸存率
PclassDf_rate = PclassDf2.iloc[:,1]

PclassDf_rate
Pclass
1    0.629630
2    0.472826
3    0.242363
Name: 1, dtype: float64

4.4.3 幸存率与客舱等级的可视化分析

# 创建画板并设置大小
fig = plt.figure(1)
plt.figure(figsize=(12,4))

# 创建画纸(子图)

#创建画纸,并选择画纸1
ax1 = plt.subplot(1,2,1)
# 在画纸1绘制堆积柱状图
PclassDf.plot(ax=ax1,#选择画纸1
                kind='bar',#选择图表类型
                stacked=True,#是否堆积
                color=['orangered','royalblue'] #设置图表颜色
               )
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Pclass')
# y坐标轴文本
plt.ylabel('Num')
# 图表标题
plt.title('Pclass and Survived Num')
# 设置图例
plt.legend(labels=['Not Survived','Survived'],loc='upper left')

# 选择画纸2
ax2 = plt.subplot(1,2,2)
# 在画纸2绘制柱状图
PclassDf_rate.plot(ax=ax2,kind='bar',color='orange')
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Pclass')
# y坐标轴文本
plt.ylabel('Survived Rate')
# 图表标题
plt.title('Pclass and Survived Rate')

# 显示图表
plt.show()
<Figure size 432x288 with 0 Axes>

泰坦尼克号可视化数据分析报告
三等舱的人数最多,一等舱和二等舱人数相差不多;

一等舱幸存率最高,二等舱次之,三等舱最低。

4.5 性别与幸存率的关系

4.5.1 汇总统计不同性别与是否幸存的人数

SexDf = pd.pivot_table(train,
                       index='Sex',
                       columns='Survived',
                       values='PassengerId',
                       aggfunc='count')
SexDf
Survived 0 1
Sex
female 81 233
male 468 109

4.5.2 汇总统计不同性别的幸存率

# 汇总统计不同性别与是否幸存的比例
SexDf2 = SexDf.div(SexDf.sum(axis=1),axis=0)

SexDf2
Survived 0 1
Sex
female 0.257962 0.742038
male 0.811092 0.188908
# 获取不同性别的幸存率
SexDf_rate = SexDf2.iloc[:,1]

SexDf_rate
Sex
female    0.742038
male      0.188908
Name: 1, dtype: float64

4.5.3 幸存率与性别的可视化分析

# 创建画板并设置大小
fig = plt.figure(1)
plt.figure(figsize=(12,4))

# 创建画纸(子图)

#创建画纸,并选择画纸1
ax1 = plt.subplot(1,2,1)
# 在画纸1绘制堆积柱状图
SexDf.plot(ax=ax1,#选择画纸1
                kind='bar',#选择图表类型
                stacked=True,#是否堆积
                color=['orangered','royalblue'] #设置图表颜色
               )
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Sex')
# y坐标轴文本
plt.ylabel('Num')
# 图表标题
plt.title('Sex and Survived Num')
# 设置图例
plt.legend(labels=['Not Survived','Survived'],loc='upper left')

# 选择画纸2
ax2 = plt.subplot(1,2,2)
# 在画纸2绘制柱状图
SexDf_rate.plot(ax=ax2,kind='bar',color='orange')
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Sex')
# y坐标轴文本
plt.ylabel('Survived Rate')
# 图表标题
plt.title('Sex and Survived Rate')

# 显示图表
plt.show()
<Figure size 432x288 with 0 Axes>

泰坦尼克号可视化数据分析报告
乘客性别以男性为主,大约是女性的两倍;

男性的幸存率比女性低很多,不及女性的三分之一。

4.6 登船港口与幸存率的关系

4.6.1 汇总统计不同登船港口与是否幸存的人数

EmbarkedDf = pd.pivot_table(train,
                            index='Embarked',
                            columns='Survived',
                            values='PassengerId',
                            aggfunc='count')

EmbarkedDf
Survived 0 1
Embarked
C 75 93
Q 47 30
S 427 219

4.6.2 汇总统计不同登船港口的幸存率

# 汇总统计不同登船港口与是否幸存的比例
EmbarkedDf2 = EmbarkedDf.div(EmbarkedDf.sum(axis=1),axis=0)

EmbarkedDf2
Survived 0 1
Embarked
C 0.446429 0.553571
Q 0.610390 0.389610
S 0.660991 0.339009
# 获取不同登船港口的幸存率
EmbarkedDf_rate = EmbarkedDf2.iloc[:,1]

EmbarkedDf_rate
Embarked
C    0.553571
Q    0.389610
S    0.339009
Name: 1, dtype: float64

4.6.4 幸存率与登船港口的可视化分析

# 创建画板并设置大小
fig = plt.figure(1)
plt.figure(figsize=(12,4))

# 创建画纸(子图)

#创建画纸,并选择画纸1
ax1 = plt.subplot(1,2,1)
# 在画纸1绘制堆积柱状图
EmbarkedDf.plot(ax=ax1,#选择画纸1
                kind='bar',#选择图表类型
                stacked=True,#是否堆积
                color=['orangered','royalblue'] #设置图表颜色
               )
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Embarked')
# y坐标轴文本
plt.ylabel('Num')
# 图表标题
plt.title('Embarked and Survived Num')
# 设置图例
plt.legend(labels=['Not Survived','Survived'],loc='upper left')

# 选择画纸2
ax2 = plt.subplot(1,2,2)
# 在画纸2绘制柱状图
EmbarkedDf_rate.plot(ax=ax2,kind='bar',color='orange')
# x坐标轴横向
plt.xticks(rotation=360)
# x坐标轴文本
plt.xlabel('Embarked')
# y坐标轴文本
plt.ylabel('Survived Rate')
# 图表标题
plt.title('Embarked and Survived Rate')

# 显示图表
plt.show()
<Figure size 432x288 with 0 Axes>

泰坦尼克号可视化数据分析报告
乘客绝大部分都是从Southampton登船,同时Southampton登船的乘客幸存率也最低;幸存率最高的是从Cherbourg登船的乘客。

5. 总结

5.1 家庭类别:

小家庭的幸存率最高,人数最少的大家庭反而幸存率最低。

5.2 头衔:

已婚男士人数最多,但他们的幸存率最低,未婚女士和已婚女士人数虽然人数也多,幸存率却最高。

5.3 年龄:

乘客以青年人为主,但儿童的幸存率最高,说明当时逃生时儿童优先;老年人的人数少,幸存率也低,可能是由于老人行动不便,来不及逃生。

5.4 客舱等级:

三等舱的人数最多,但幸存率从一等舱到三等舱依次下降,票价越高,幸存率越高,说明上层阶级有更大的逃生机会。

5.5 性别:

乘客性别以男性为主,大约是女性的两倍;男性的幸存率比女性低很多,不及女性的三分之一,反映当时逃生时女士优先的原则。

5.6 登船港口:

从三个港口上船的乘客中,Southampton港口的最多,可能是泰坦尼克号出发港口的原因;同时Southampton港口登船的乘客幸存率最低,可能是因为从该港口登船的乘客数量巨大,且身份来自不同阶层;而从Cherbourg登船的乘客幸存率最高。

综上,如果当时有一个小女孩,在父母陪伴下从Cherbourg港口登船,且乘坐的是一等舱,那么她从那次海难中幸存的概率最大;反之,带着一大家子亲戚从Southampton港口登船,乘坐在三等舱的男性老人,能够幸存的概率最小。文章来源地址https://www.toymoban.com/news/detail-500616.html


到了这里,关于泰坦尼克号可视化数据分析报告的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 速通——决策树(泰坦尼克号乘客生存预测案例)

    一、决策树 1、概述         树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果 2、建立过程         1. 特征选择:选取有较强分类能力的特征。         2. 决策树生成:根据选择的特征生成决策树。  

    2024年01月21日
    浏览(36)
  • 深度学习项目:泰坦尼克号生存预测【附完整源码】

    数据处理 建立模型 训练模型 评估模型 模型预测 保存模型 数据文件: 2.1 泰塔尼克号数据 数据描述: RMS 泰坦尼克号的沉没是历史上最为人熟知的海难事件之一。 1912 年 4 月 15 日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造

    2024年02月09日
    浏览(39)
  • Kaggle实战入门:泰坦尼克号生还预测(进阶版)

    Kaggle实战入门:泰坦尼克号生还预测(基础版)对机器学习的全流程进行了总体介绍。本文继续以泰坦尼克号生还预测为例,对机器学习中的特征工程、模型构建进行深入解读。 数据集及代码下载 由于针对训练数据集、测试数据集均要做空值填充、编码转换、离散化、归一

    2024年02月02日
    浏览(28)
  • 基于用Hive泰坦尼克号乘客信息存储与分析

    实现以下任务: 创建数据库taitan 创建乘客信息表 导入数据到表中 统计获救与死亡情况 统计舱位分布情况 统计港口登船人数分布情况 统计性别与生存率的关系 统计客舱等级与生存率的关系 统计登船港口与生存率的关系 1.创建一个内/外部表,指定数据的存放路径。 (1)创建

    2024年02月06日
    浏览(31)
  • 极简sklearn-使用决策树预测泰坦尼克号幸存者

    泰坦尼克号幸存者数据集是kaggle竞赛中入门级的数据集,今天我们就来用决策树来预测下哪些人会成为幸存者。 数据集下载地址: https://download.csdn.net/download/ting4937/87630361  数据集中包含两个csv文件,data为训练用数据,test为测试集。 首先我们通过pandas来读取并查看数据 数据如

    2024年02月04日
    浏览(68)
  • 深度学习之构建MPL神经网络——泰坦尼克号乘客的生存分析

          大家好,我是带我去滑雪!       本期使用泰坦尼克号数据集,该数据集的响应变量为乘客是生存还是死亡(survived,其中1表示生存,0表示死亡),特征变量有乘客舱位等级(pclass)、乘客姓名(name)、乘客性别(sex,其中male为男性,female为女性)、乘客年龄(ag

    2024年02月05日
    浏览(29)
  • 机器学习实战(入门级) ------ Kaggle 泰坦尼克号幸存者预测 (随机森林,KNN,SVM)

    本篇将注重于机器学习预测模型的过程、数据分析以及项目实战落地。对于各种所使用的算法直接调用sklearn包,在这里不会说算法的原理和过程。有想看原理和过程的可以看我这两天整理的学习笔记。 KNN K邻近 学习笔记 各种聚类 学习笔记 决策树与随机森林 学习笔记 SVM 支

    2024年02月03日
    浏览(37)
  • 用决策树或随机森林解决泰坦尼克号乘客生存预测(内附数据集百度网盘)

     实现该模型的训练要用到的主要算法和实现思路是   首先的首先当然是导包啦   然后就是读取文件里面的数据进来了 数据集下载:百度网盘 链接:https://pan.baidu.com/s/1slaouE4Es37U8u0U-kDJnw 提取码:ss5o   接着是进行对数据进行基本的处理了,以下是作者的处理方法: 第一步是

    2024年02月15日
    浏览(31)
  • 泰坦尼克沉船存活率(机器学习,Python)

    目录 1,实验要求: 2,报告内容 引言 数据处理 导入数据 查看数据集信息 数据清洗  特征工程 特征提取 特征选择 生还率预测说明 模型构建 建立训练数据集和测试数据集  选择不同的机器学习算法 训练模型,评估模型  方案实施 生存预测 参数调优 结论 改进方法 详细描

    2024年02月03日
    浏览(23)
  • Titanic 泰坦尼克数据集 特征工程 机器学习建模

    以下内容为讲课时使用到的泰坦尼克数据集分析、建模过程,整体比较完整,分享出来,希望能帮助大家。部分内容由于版本问题,可能无法顺利运行。 1   经典又有趣的 Titanic问题 1.1   目标 1.2   解决方法 1.3   项目目的 2   导入模块 3   加载数据 4   探索性数据分析

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包