泰坦尼克号生存预测

学习

机器学习之特征工程

使用sklearn做单机特征工程

参考

kaggle 泰坦尼克号生存预测——六种算法模型实现与比较

Kaggle初体验-机器学习之泰坦尼克号乘客生存预测(上)

猴子数据分析之泰坦尼克号生存率预测

 

数据集:https://www.kaggle.com/c/titanic

 

字段

Age:年龄

Cabin:船舱号

Embarked:登船港口 C为Cherbourg Q为Queenstown S为Southampton

Fare:船票费用

Name:姓名

Parch:在船上的父母/孩子人数

PassengerId:乘客编号

Pclass:船票等级 1为一等舱 2为二等舱 3为三等舱

Sex:性别

Sibsp:在船上的兄弟姐妹人数

Ticket:船票编号

Survived:生存与否 预测值

 

导入数据

import warnings
warnings.filterwarnings('ignore')

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='darkgrid',font_scale=1.5)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
print ('训练数据集:',train.shape,'测试数据集:',test.shape)
训练数据集: (891, 12) 测试数据集: (418, 11)
#合并数据集 方便同时对两个数据集进行清洗
full = train.append(test,ignore_index=True)

 

数据清洗

缺失值统计

full.isnull().sum()

年龄 船舱的缺失数据较多

登船港口 船票价格的缺失数据较少

Survived的缺失是合并后的测试集

缺失值处理

很多机器学习算法为了训练模型,要求传入的特征中不能有空值:

1、如果是数值类型,用平均值代替

2、如果是分类数据,用最常见的类别取代

3、使用KNN等模型预测缺失值

#年龄缺失值处理
full['Age'] = full['Age'].fillna(full['Age'].mean())
#船票缺失值处理
full['Fare'] = full['Fare'].fillna(full['Fare'].mean())
#embarked&cabin为字符串列
#查看最常见的港口类别
full['Embarked'].value_counts()
#用最常见的类别填充
full['Embarked'] = full['Embarked'].fillna('S')

#查看最常见的船舱类别
full['Cabin'].value_counts()
#缺失数据过多,且不同船舱号的数量差距不大
#船舱号(Cabin)缺失值填充为U,表示未知(Uknow) 
full['Cabin'] = full['Cabin'].fillna( 'U' )

 

特征分析

相关系数矩阵

corr = train.corr()
#热度图可视化相关系数矩阵 只显示数字之间的
plt.subplots(figsize=(10,4)) # 可以先试用plt设置画布的大小,然后在作图,修改
sns.heatmap(corr, annot = True) # 使用热度图可视化这个相关系数矩阵

绝对值排序为pclass fare parch age sibsp passengerid

pclass 社会阶层

sns.countplot(x='Pclass',hue='Survived',data=train)

船舱等级为一等舱的乘客生存几率较高 pclass与生存率有关

sex 性别

sns.countplot(x='Sex',hue='Survived',data=train)

女性生存几率较高 女士优先原则 性别与生存率有关

age 年龄

train_age = sns.FacetGrid(train, col='Survived',height=5)
train_age.map(plt.hist, 'Age', bins=40)

fig = plt.figure(figsize=(10, 6))
sns.violinplot(  x='Survived',y='Age', data=train, 
               split=True,palette={0: "r", 1: "g"} )
plt.title('乘客年龄与存活关系')
plt.ylabel('年龄')

年龄较小的乘客生存率较高,年龄较大的次之,20-40岁的青壮年明显生存率较低

符合儿童优先原则 年龄与生存率相关

sibsp 兄弟姐妹数

sns.countplot(x='SibSp',hue='Survived',data=train)

=0生存率低 1-2较高 >3低

parch 父母子女数

sns.countplot(x='Parch',hue='Survived',data=train)

=0生存率低 1-2较高 >3低

家庭成员数

sibsp与parch的分布相似 可结合起来看家庭成员数

家庭人数 = Parch兄弟姐妹数+SibSp父母子女数+自己

train['members'] = train['Parch'] + train['SibSp']
sns.countplot(x='members',hue='Survived',data=train)

=0生存率低 1-3较高 >4低

fare 船票价格

train['Fare'].describe()
train_fare = sns.FacetGrid(train, col='Survived',height=5)
train_fare.map(plt.hist, 'Fare', bins=5)
#train_fare.set(xticks=[0,600])

# 按船舱等级分组
train.groupby('Pclass').agg('mean')['Fare'].plot(k
  • 9
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值