Kaggle实战入门(一)之泰坦尼克号

博主最近开始在Kaggle上做项目,第一个项目就是最经典的项目泰坦尼克号。在尝试了几种模型,调整了很多次之后,终于将模型调到0.8的得分,给大家分享一下我的做法。
在这里插是图片描述

Part1.数据导入和初步观察

导入泰坦尼克号训练集和测试集的数据,这次我选择同时处理两份数据,所以直接将他们拼接起来

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

train=pd.read_csv('train.csv')
test=pd.read_csv('test.csv')
datas = pd.concat([train, test], ignore_index = True)

我们来看一下数据的组成

train.head()

在这里插入图片描述
可以看到我们的数据集有12个特征,每个特征的重要程度和作用:

特征 作用和重要程度
乘客ID 索引
是否生存 0代表死亡,1代表存活
社会等级 分为1,2,3等级
姓名 重要,可以提炼出大量有用的信息
性别 重要
年龄 重要
直系亲友 一般,和旁系亲友共同处理
旁系亲友 一般,和直系亲友共同处理
票号 一般
票价 重要
舱门编号 一般
上船时的港口编号 一般

查看我们的数据集的缺失情况

train.info()

在这里插入图片描述
可以看到我们的特征还是比较完整的,只有三个特征有缺失的情况,分别是年龄,舱门编号和上船时的港口编号。其中年龄和舱门编号缺失的值比较多,待会需要特殊处理一下。

Part2.数据分析和特征工程

1、数据分析
(1)死亡与存活的比例

train['Survived'].value_counts()

在这里插入图片描述
(2)社会等级对存活的影响:社会等级越高,存活率越高

sns.barplot(x="Pclass", y="Survived", data=datas)

在这里插入图片描述
(3)性别对存活的影响:女性的存活率远大于男性

sns.barplot(x="Sex", y="Survived", data=datas)

在这里插入图片描述
(4)年龄对存活的影响:在0~35岁中的人群具有更高的生存概率,高于35岁的人群生存概率较低

facet = sns.FacetGrid(datas, hue="Survived",aspect=2)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, train['Age'].max()))
facet.add_legend()
plt.xlabel('Age') 
plt.ylabel('Survived') 

在这里插入图片描述
(5)亲属对存活的影响:拥有2~4位家庭成员的人存活率更高

sns.barplot(x="SibSp", y="Survived", data=datas)

在这里插入图片描述

sns.barplot(x="Parch", y="Survived", data=datas)

在这里插入图片描述
将直系和旁系亲属两个特征合并为家庭大小,可以让我们更直观地观察亲属这个特征对存活率的影响

datas['FamilySize']=datas['SibSp']+datas['Parch']+1
sns.barplot(x="FamilySize", y="Survived", data=datas)

在这里插入图片描述
(6)登船时港口的不同对存活的影响:C和Q地的存活率更高,S地的存活率较低

sns.countplot('Embarked',hue='Survived',data=datas)

在这里插入图片描述
2、特征工程
(1)名字的处理
在数据分析中我们可以看到,社会等级对我们的存活率影响非常明显,所以我们可以将姓名替换为称呼前缀,生成新的特征‘Title’,用来对应我们的社会等级。这样我们就将一大串看似没有用的姓名特征转化成了有用的分类型特征。

datas['Title'] = datas['Name'].apply(lambda x:x.split(',')[1].split('.')[0].strip())
datas['Title'].replace(['Capt', 'Col', 'Major', 'Dr', 'Rev'],'Officer', inplace=True)
datas['Title'].replace(['Don', 'Sir', 'the Countess', 'Dona', 'Lady'], 'Royalty', inplace=True)
datas['Title'].replace(['Mme', 'Ms', 'Mrs'],'Mrs', inplace=True)
datas['Title'].replace(['Mlle', 'Miss'], 'Miss', inplace=True)
datas['Title'].replace(
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值