由于原始文件是ipython格式的,建议转到github下浏览(欢迎点星星^_^)
数据集地址:my github
背景介绍:
泰坦尼克号的沉没是历史上最臭名昭着的沉船之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和机组人员中造成1502人死亡。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。 尽管幸存的人有一些运气因素,但有些人比其他人更容易生存,比如女人,孩子和上流社会。在这个挑战中,我们要求您完成对哪些人可能存活的分析,运用机器学习工具来预测哪些乘客幸免于悲剧。
一、数据的获取与分析
首先导入所需要的库:
import pandas as pd
import numpy as np
import random as rnd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
然后导入一下数据:
train_df = pd.read_csv('./data/train.csv')
test_df = pd.read_csv('./data/test.csv')
先看一下部分数据:
train_df.head()
可以看出测试集主要包括以下特征:
PassengerId,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
其中,每个特征的含义如下:
PassengerId: 乘客的id
Survived: 乘客是否存活
Pclass: 乘客的社会经济地位,分为3个等级:1代表上层,2代表中层,3代表下层
Name: 乘客姓名
Sex: 乘客性别
Age: 乘客年龄
SibSp: 与乘客同行的兄弟姐妹和配偶的数量
Parch: 与乘客同行的父母或子女的数量
Ticket: 船票号码
Fare: 船票费用
Cabin: 船舱号
Embarked: 登船港口,包含3个值,分别表示3个城市:C = Cherbourg, Q = Queenstown, S = Southampton
看一下数据的信息:
train_df.info()
从上面我们可以知道训练集中共有891个样本,其中Age,Cabin,Embarked这3个特征存在为空的值。
为了了解乘客的存活和部分特征的关系,我们可以根据经验提出以下假设:
- 女性更有可能幸存下来。
- 儿童更有可能幸存下来。
- 上层乘客(Pclass = 1)更有可能幸存下来。
为了验证我们的猜想,我们利用给出的数据分析一下:
- 女性更有可能幸存下来。
train_df[["Sex", "Survived"]].groupby(['Sex'], as_index=False).mean().sort_values(by='Survived', ascending=False)
- 上层乘客(Pclass = 1)更有可能幸存下来。
train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)
利用上面的信息,我们可以直观的了解到女性的幸存率跟上层乘客的幸存率要高出不少。下面来将数据可视化一下
二、数据的可视化与分析
看一下不同年龄和幸存间的关系:
g = sns.FacetGrid(train_df, col='Survived')
g.map(plt.hist, 'Age', bins=20)
plt.show()
从上图中我们可以了解到:
- 婴儿(年龄<= 4)的存活率很高。
- 大量15-25岁的人没有活下来。
- 大多数乘客年龄在15-35岁之间。
由于年龄是一个预测能否幸存很重要的特征,所以我们需要填充缺失的年龄信息。我们也可以将乘客的年龄划分为年龄段。
接下来将乘客的级别Pclass和年龄组合一下,看这两个特征下乘客存活的信息: