编程技术分享平台

网站首页 > 技术教程 正文

Python在数据分析中的应用|泰坦尼克号生还者数据分析

xnh888 2024-10-23 16:12:51 技术教程 42 ℃ 0 评论

今天给大家讲一个凄美的故事,有“永不沉没”的美誉的“泰坦尼克号”,1912年从英国出发,驶向美国纽约,然而不幸的是,泰坦尼克号与一座冰山相撞,泰坦尼克船体断裂成两截后沉入大西洋底,2224名船员及乘客中,1517人丧生,其中仅333具罹难者遗体被寻回,以此背景,做出本节数据分析。

一、数据来源

本节使用seaborn自带的泰坦尼克号生还乘客的数据集,其中各字节所代表的含义如下:survived alive乘客生还情况、pclass class船舱等级、sex who乘客性别、age 乘客年龄、sibsp parch是否带有家属,统一用alone字段代表是否有家属、fare船票价格、embarked和embark_town上船地点。

import numpy as np #导入库
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
  %matplotlib inline
titanic = sns.load_dataset("titanic")
titanic.head() #数据概览

二、问题研究

  1. 泰坦尼克号乘客信息的基本情况。
  2. 乘客信息与生还数据是否有关联。

三、数据清洗

titanic.isnull().sum() #查看是否具有缺失值

age和deck字段存在缺失值。

titanic.info() #数据情况
sns.set(style="darkgrid", palette="muted", color_codes=True)    
sns.distplot(titanic[titanic['age'].notnull()]['age']) #distplot函数查看乘客的年龄分布

对年龄的缺失值处理,并且用distplot函数查看乘客的年龄分布,发现年龄呈正态分布。

titanic['age'] = titanic['age'].fillna(titanic['age'].mean())
sns.distplot(titanic['age'])

年龄呈正态分布,用年龄的均值进行缺失值的填充,再对年龄分布可视化。

sns.countplot(x="embarked",data=titanic) #绘制类别计数柱状图
titanic['embarked'] = titanic['embarked'].fillna('S')
titanic.isnull().sum()

利用正确的登船地点S进行缺失值填充。

titanic.head()
titanic = titanic.drop(['survived','pclass','sibsp','parch','who','adult_male','deck','embark_town'],axis=1)
titanic.head() #删除多余的字段,数据清洗

四、数据探索

sns.countplot(x="sex",data=titanic)

由上图可以看出,男性乘客比女性乘客多。

sns.boxplot(x='sex',y='age',data=titanic)

由上图可看出,男性与女性的年龄分布很相近,但女性乘客的年龄跨度更大一点。

sns.countplot(x="class",data=titanic)

对于船舱等级计数,第三级船舱数量最多。

sns.violinplot(x="class", y="age", data=titanic)

结合船舱等级,绘制乘客年龄分布箱线图,头等舱的年龄跨度较大,第三级船舱的中年人分布最多。

sns.countplot(x="alone",data=titanic)

对alone字段计数,单独的乘客数量更多一些。

sns.countplot(x="alive",data=titanic)

对生还字段可视化,未生还的乘客人数更多一些。

sns.countplot(x='alive',hue='sex',data=titanic)

hue='sex'添加性别变量,生还中女性占大多数。

g = sns.FacetGrid(titanic, col='sex') #利用网格技术
g.map(sns.countplot, 'alive') #不同性别生还情况
def agelevel(age):       
      if age <= 16:       
      return 'child'   
      elif age >= 60:       
       return 'aged'   else:      
       return 'midlife'   
titanic['age_level'] = titanic['age'].map(agelevel) #对年龄分级,分开老人和小孩的数据
titanic.head() #年龄等级
sns.countplot(x='age_level',data=titanic)

分级年龄可视化,成年人乘客数量占比很大,小孩和年长者占比很小。

sns.countplot(x='alive',hue='age_level',data=titanic)

乘客年龄与生还关系,乘客年龄与生还乘客之间的关系并不明显,小孩的生还几率比较大,老人却相对较小。

g = sns.FacetGrid(titanic, col='class', row='alone') #网格技术
g.map(sns.countplot, 'alive')

乘客舱位等级越高,生还的可能性越大,单独的乘客生还的几率也更大一些。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表