对泰坦尼克号项目的简单分析

泰坦尼克号项目数据可在kaggle上免费下载。

一、分析目的:探索泰坦尼克号乘客存活影响因素

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib notebook
plt.rcParams['font.sans-serif'] = ['FangSong'] 
plt.rcParams['axes.unicode_minus'] = False 

data = pd.read_csv('titanic_data.csv')
data.head()

对泰坦尼克号项目的简单分析_第1张图片

二、分析思路
我们的目的是要探寻乘客存活因素。观察上面的表头,可大致判断乘客的幸存与否与名字和上船地点应该没有关系。所以我们探寻的应该是:

1、探索舱室等级与存活率的关系

2、探索性别与存活率的关系

3、探索年龄与存活率的关系

4、探索兄弟姐妹/配偶数量与存活率的关系

5、探索父母/小孩数量与存活率的关系

6、探索票价与存活率的关系

三、数据准备与处理

data.info()

对泰坦尼克号项目的简单分析_第2张图片

data.isnull().sum()

对泰坦尼克号项目的简单分析_第3张图片
处理缺失值,上船地点的缺失值暂时与我的分析无关,缺失的年龄用其他你年龄的平均值代替。

data['Age'].fillna(data['Age'].mean(), inplace=True)

四、数据分析¶

相关分析

data.corr()['Survived']

对泰坦尼克号项目的简单分析_第4张图片
分组分析

1、探索舱室等级与存活率的关系

df_Pclass = data.groupby('Pclass')['Survived'].mean()
print(df_Pclass)
df_Pclass.plot(kind='bar', title='Pclass distributed')
plt.ylabel('生存率')
plt.xticks(rotation=360)

对泰坦尼克号项目的简单分析_第5张图片
可以看到,舱室等级越高,存活率越高

2、探索性别与存活率的关系

df_sex = data.groupby('Sex')['Survived'].mean()
print(df_sex)
df_sex.plot(kind='bar', title='Sex distributed')
plt.ylabel('生存率')
plt.xticks(rotation=360)

对泰坦尼克号项目的简单分析_第6张图片
女性的生存率更高

3、探索年龄与存活率的关系

首先要对年龄进行分组,再进行可视化

bins = np.arange(0, 90, 10)
age_groups = pd.cut(data['Age'], bins)
df_age = data.groupby(age_groups)['Survived'].mean()
print(df_age)
df_age.plot(kind='bar', title='Age distributed')
plt.ylabel('生存率')
plt.xticks(rotation=360)

对泰坦尼克号项目的简单分析_第7张图片
孩子的生存率较高

4、探索兄弟姐妹/配偶数量与存活率的关系

df_SibSp = data.groupby('SibSp')['Survived'].mean()
print(df_SibSp)
df_SibSp.plot(kind='bar', title='SibSp distributed')
plt.ylabel('生存率')
plt.xticks(rotation=360)

对泰坦尼克号项目的简单分析_第8张图片
兄弟姐妹/配偶数量为1到2个时生存率最高。

5、探索父母/小孩数量与存活率的关系

df_Parch = data.groupby('Parch')['Survived'].mean()
print(df_Parch)
df_Parch.plot(kind='bar', title='Parch distributed')
plt.ylabel('生存率')
plt.xticks(rotation=360)

对泰坦尼克号项目的简单分析_第9张图片
6、探索票价与存活率的关系

首先将票价分组,预先得知最低票价为0,最高票价为512.3292

bins = np.arange(0, 600, 50)
fare_groups = pd.cut(data['Fare'], bins)
df_Fare = data.groupby(fare_groups)['Survived'].mean()
print(df_Fare)
df_Fare.plot(kind='bar', title='Fare distributed')
plt.ylabel('生存率')
plt.xticks(rotation=90)

对泰坦尼克号项目的简单分析_第10张图片
对泰坦尼克号项目的简单分析_第11张图片
我在这里发现了一个奇怪的现象,数据中是没有300-500区间的票价的,但是有500-550的票价,而且存活率为100%。不知道这是不是异常值,我好奇地分析了一下。

print(data.groupby(fare_groups)['Survived'].count())
plt.style.use('ggplot')
plt.boxplot(data['Fare'])

对泰坦尼克号项目的简单分析_第12张图片
对泰坦尼克号项目的简单分析_第13张图片
由于0-50票价的人数众多,达716人,所以我们看到,箱线图的上边缘还不到100,100-550的区间都被定义为了异常值。

在上面的分组分析中,年龄和票价我用到了分布分析的方法,分布分析是指将数据(定量数据)进行等距或者不等距的分组,进而研究各组分布规律的一种分析方法。

交叉分析

通常用于两个或两个以上,分组变量之间的关系,以交叉表形式进行变量间关系的对比分析

new_df = data.pivot_table(values=['Survived'], index=['Pclass'], columns=age_groups, aggfunc=[np.mean])
new_df

对泰坦尼克号项目的简单分析_第14张图片
很容易看出几乎每个年龄段的存活率都是一等舱的最高

for i in [1, 2, 3]:
    plt.figure(figsize=(8, 8))
    new_df.loc[i].plot(kind='bar', title='Pclass'+str(i)+' survival rate')
    plt.xlabel('年龄段')
    plt.ylabel('生存率')

对泰坦尼克号项目的简单分析_第15张图片
对泰坦尼克号项目的简单分析_第16张图片
对泰坦尼克号项目的简单分析_第17张图片

你可能感兴趣的:(对泰坦尼克号项目的简单分析)