1、背景介绍
大家都看过电影泰坦尼克号,是历史上一件家喻户晓的灾难性事件;泰坦尼克号沉船事故,1912年,当时属于英国的世界级豪华客轮泰坦尼克号,因在处女航行中不幸撞上北大西洋冰山而沉没。这场事故使得1500多名乘客患难。后来,这场震惊世界的惨剧被详细地调查,而且遇难乘客的信息也逐渐被披露。在当时救援条件下,无法短时间内确认每位乘客生还的可能性。而今,许多科学家视图通过计算机模拟和分析找出潜藏在数据背后的生还逻辑。我们也尝试通过代码,揭开尘封了100多年的数据的面纱。
数据简介
任务目标
任务:预测泰坦尼克号乘客能否存活 预测模型 分类问题
2、导入模块和数据
from sklearn.tree import export_graphviz
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.feature_extraction import DictVectorizer
from sklearn.metrics import classification_report
import seaborn as sns
import numpy as np
# 导入测试集数据和训练集数据
train_df = pd.read_csv('mytrain.csv')
test_df = pd.read_csv('mytest.csv')
# 导入测试集答案
test_y = pd.read_csv('mygender.csv')
test_y = test_y[['Survived']]
train_df
# 合并训练集合测试集的数据,drop无用的特征
all_df = train_df.append(test_df, ignore_index=True)
all_df.drop(['Unnamed: 12', 'Unnamed: 11'], axis=1, inplace=True)
all_df.info()
3、 描述性分析:分析各个特征跟存活率之间的关系
# 查看各个特征和存活之间的关系
# 'Embarked' 和 'Survived'的关系
sns.barplot(data=train_df, x='Embarked', y='Survived')
# 从以下图可以看出,Embarked为"C"的乘客存活率较高
# 进一步探究不同Embarked与所属仓位的关系
sns.catplot(x='Pclass', col='Embarked', data=train_df, kind='count')
# Embarked=S 的 1等座乘客所占比例最多
# Parch与Survived
sns.barplot(data=train_df, x='Parch', y='Survived')
# 同行乘客中父母及子女的数量为1-3人的存活率较高
# SibSp与Survived
sns.barplot(data=train_df, x='SibSp', y='Survived')
# 与乘客同行的同辈数量为1-2的存活率较高
# Pclass与Survived
sns.barplot(data=train_df, x='Pclass', y='Survived')
# 1等座的乘客存活率最高
# Sex与Survived
sns.barplot(data=train_df, x='Sex', y='Survived')
# 女性的存活率远高于男性
# Age与Survived
# 创建坐标轴
ageFacet = sns.FacetGrid(data=train_df, hue='Survived', aspect=3)
# 选择图形类型
ageFacet.map(sns.kdeplot, 'Age', shade=True)
# 设置坐标轴
ageFacet.set(xlim=(0, train_df.Age.max()))
# 添加标签
ageFacet.add_legend()
# 从图中可以看出0-10岁的存活率高于普通值
# Fare与Survived
# 创建坐标轴
ageFacet = sns.FacetGrid(data=train_df, hue='Survived', aspect=3)
# 选择图形类型
ageFacet.map(sns.kdeplot, 'Fare', shade=True)
# 设置坐标轴
ageFacet.set(xlim=(0, train_df.Fare.max()))
# 添加标签
ageFacet.add_legend()
# 票价较高的乘客,存活率较高一些。
# 查看票价的特征分布
farePlot = sns.displot(all_df['Fare'][all_df['Fare'].notnull()], label='skewness:%.2f'%(all_df['Fare'].skew()