泰坦尼克号乘客生存情况预测分析2


泰坦尼克号乘客生存情况预测分析1
泰坦尼克号乘客生存情况预测分析2
泰坦尼克号乘客生存情况预测分析3
泰坦尼克号乘客生存情况预测分析总


在这里插入图片描述

背景描述

Titanic数据集在数据分析领域是十分经典的数据集,非常适合刚入门的小伙伴进行学习!

泰坦尼克号轮船的沉没是历史上最为人熟知的海难事件之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会,从而促进了船舶安全规定的完善。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管在沉船事件中幸存者有一些运气因素,但有些人比其他人更容易存活下来,究竟有哪些因素影响着最终乘客的生存与否呢?

数据说明

在该数据集中,共包括三个文件,分别代表训练集测试集以及测试集的答案

数据描述:

变量名称PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
变量解释乘客编号是否存活船舱等级姓名性别年龄兄弟姐妹和配偶数量父母与子女数量票的编号票价座位号登船码头
数据类型numericcategoricalcategoricalStringcategoricalcategoricalnumericnumericstringnumericstringcategorical

:以上数据类型均为经过预处理后的数据类型!

数据来源

Titanic Competition : How top LB got their score


目录

    • 背景描述
    • 数据说明
    • 数据来源
  • 二 特征工程
    • 1. 合并训练集与测试集
    • 2. 缺失值处理
      • 2.1 填充Embarked字段
      • 2.2 填充船票Fare字段
      • 2.3 填充年龄Age字段
    • 3 不同特征字段的数据处理
      • 3.1 先对Embarked、Sex以及Pclass等用dummy处理
      • 3.2 票价分级处理
      • 3.3 名字处理
      • 3.4 Cabin处理
      • 3.5 Ticket处理
    • 4. 利用随机森林预测Age缺失值
    • 5. 各特征与Survived的相关系数排序
    • 6. 保存特征处理后的数据
    • 7. 小结

二 特征工程

1. 合并训练集与测试集

在进行特征工程的时候,我们不仅需要对训练数据进行处理,还需要同时将测试数据同训练数据一起处理,使得二者具有相同的数据类型和数据分布。

import pandas as pdtrain = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
train_and_test = train.append(test, sort=False) # 合并训练集与测试集
PassengerId = test['PassengerId']
train_and_test.shape

在这里插入图片描述

2. 缺失值处理

对Embarked直接用众数填充;
对Fare用均值填充;
对Age,建立模型预测;

2.1 填充Embarked字段

mode = train_and_test['Embarked'].mode().iloc[0] # 找到众数
train_and_test['Embarked'].fillna(mode, inplace=True)
train_and_test.info()

在这里插入图片描述

2.2 填充船票Fare字段

train_and_test['Fare'].mean()

在这里插入图片描述

Fare_mean = train_and_test['Fare'].mean()
train_and_test['Fare'].fillna(Fare_mean, inplace=True)
train_and_test.info()

在这里插入图片描述

2.3 填充年龄Age字段

为尽可能用多的特征去预测Age的值,先对Cabin、Embarked、Name、Sex、Ticket、Pclass等特征进行处理,模型预测见后;

3 不同特征字段的数据处理

3.1 先对Embarked、Sex以及Pclass等用dummy处理

对分类特征进行编码

cols = ['Embarked', 'Sex', 'Pclass']
train_and_test = pd.get_dummies(train_and_test, columns=cols, prefix_sep='__')
train_and_test.info()

在这里插入图片描述

3.2 票价分级处理

我们可以尝试将Fare分桶处理,使用qcut函数。qcut是根据这些值的频率来选择箱子的均匀间隔,每个箱子中含有的数的数量是相同的;

# 临时列
train_and_test['Fare_bin'] = pd.qcut(train_and_test['Fare'], 5)#编码
train_and_test['Fare_bin_id'] = pd.factorize(train_and_test['Fare_bin'])[0]
fare_bin_dummies_df = pd.get_dummies(train_and_test['Fare_bin_id']).rename(columns=lambda x : 'Fare_' + str(x))
train_and_test = pd.concat([train_and_test, fare_bin_dummies_df], axis=1)
train_and_test.drop(['Fare_bin'], axis=1, inplace=True)

3.3 名字处理

对名字Name进行处理,提取其特征;

提取称呼

train_and_test['Title'] = train_and_test['Name'].apply(lambda x : x.split(',')[1].split('.')[0].strip())
train_and_test['Title']

在这里插入图片描述

# 将各式称呼进行统一化处理
# 头衔映射表
titleDict = {"Capt" :      "Officer", "Col"  :      "Officer","Major":      "Officer","Jonkheer":   "Royalty","Don":        "Royalty","Sir" :       "Royalty","Dr":         "Officer","Rev":        "Officer","the Countess":"Royalty","Dona":       "Royalty","Mme":        "Mrs","Mlle":       "Miss","Ms":         "Mrs","Mr" :        "Mr","Mrs" :       "Mrs","Miss" :      "Miss","Master" :    "Master","Lady" :      "Royalty"
}
train_and_test['Title'] = train_and_test['Title'].map(titleDict)
train_and_test['Title'].value_counts()

在这里插入图片描述

one_hot编码

train_and_test['Title'] = pd.factorize(train_and_test['Title'])[0]
title_dummies_df = pd.get_dummies(train_and_test['Title'], prefix=train_and_test[['Title']].columns[0])
train_and_test = pd.concat([train_and_test, title_dummies_df], axis=1)
train_and_test.info()

在这里插入图片描述

提取长度特征

train_and_test['Name_length'] = train_and_test['Name'].apply(len)
train_and_test['Name_length']

在这里插入图片描述

3.4 Cabin处理

Cabin缺失值过多,将其分为有无两类,进行编码,如果缺失,即为0,否则为1;

train_and_test.loc[train_and_test.Cabin.isnull(), 'Cabin'] = 'U0'
train_and_test['Cabin'] = train_and_test['Cabin'].apply(lambda x : 0 if x == 'U0' else 1)
train_and_test['Cabin']

在这里插入图片描述

3.5 Ticket处理

Ticket有字母和数字之分,对于不同的字母,可能在很大程度上就意味着船舱等级或者不同船舱的位置,也会对Survived产生一定的影响,所以我们将Ticket中的字母分开,为数字的部分则分为一类。

train_and_test['Ticket_Letter'] = train_and_test['Ticket'].str.split().str[0]
train_and_test['Ticket_Letter'] = train_and_test['Ticket_Letter'].apply(lambda x : 'U0' if x.isnumeric() else x)# 将Ticket_Letter factorize
train_and_test['Ticket_Letter'] = pd.factorize(train_and_test['Ticket_Letter'])[0]
train_and_test['Ticket_Letter']

在这里插入图片描述

4. 利用随机森林预测Age缺失值

from sklearn.ensemble import RandomForestRegressor  # 随机森林回归missing_age = train_and_test.drop(['PassengerId', 'Survived', 'Name', 'Ticket'], axis=1) # 去除字符串类型的字段
missing_age_train = missing_age[missing_age['Age'].notnull()]
missing_age_test = missing_age[missing_age['Age'].isnull()]X_train = missing_age_train.iloc[:,1:]
y_train = missing_age_train.iloc[:,0]
X_test = missing_age_test.iloc[:,1:]rfr = RandomForestRegressor(n_estimators=1000, n_jobs=-1)
rfr.fit(X_train, y_train)
y_predict = rfr.predict(X_test)
train_and_test.loc[train_and_test['Age'].isnull(), 'Age'] = y_predict
train_and_test.info()

在这里插入图片描述

5. 各特征与Survived的相关系数排序

根据生存情况与其他各特征的相关系数,按系数倒序排序,筛选出重要特征 – 重要特征

train_and_test.corr()['Survived'].abs().sort_values(ascending=False)

在这里插入图片描述

6. 保存特征处理后的数据

train_and_test.to_csv('经过特征工程处理后的数据.csv', index=None)

7. 小结

特征工程这一章主要做了以下工作:

  • 合并训练集和测试集
    • 为了使二者具有相同的数据类型和数据分布;
  • 缺失值处理:
    • Embarked:众数填充;
    • Fare:平均值填充;
    • Age:随机森林预测填充;
  • 各特征字段的数据处理:
    • Embarked,Sex,Pclass: 直接dummy编码;
    • Fare: 先分桶处理,再dummy编码;
    • Name: 先提取称呼,再对称呼进行人群分类,最后dummy处理;
    • cabin:缺失值较多,根据是否缺失划分类别,缺失为0,否则为1;
    • Ticket:只保留其中字母,并对字母进行数字转换;
  • 随机森林建模预测Age缺失值;
  • 对各特征与生存与否进行了相关系数大小排序;

本章主要关于到泰坦尼克号数据的特征工程处理,后续就是建模预测部分了,建模预测打算分两部分,一部分只是简单涉及一些算法,参数全部默认;另一部分,会加些算法调参、优化以及复杂模型等,这几天就会安排上!

如果本文有存在不足的地方,欢迎大家在评论区留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/652503.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react 基础学习笔记一

1、jsx语法过程 jsx使用react构造组件,通过bable进行编译成js对象,在用ReactDom.render()渲染成DOM元素,最后再插入页面的过程。 2、创建组件 组件的定义:将公用的代码组装成一个独立的文件,保持代码独立性&#xff0…

如何将图片压缩100k?几个方法帮你解决

很多平台为了保证用户体验,会限制我们上传图片的大小,所以我们在社交平台分享图片的时候,就会看有些要求为100kb的字样,那么我们怎么把一些过大的图片压缩100kb大小呢?试试下面介绍的这几个方法吧。 在工具栏中选择【…

每天五分钟深度学习:如何理解梯度下降算法可以逼近全局最小值?

本文重点 上节课程中,我们已经知道了逻辑回归的代价函数J。要想最小化代价函数,我们需要使用梯度下降算法。 梯度下降算法地直观理解: 为了可视化,我们假设w和b都是单一实数,实际上,w可以是更高地维度。 代价函数J是在水平轴w和b上的曲面,因此曲面的高度就是J(w,b)在…

深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解

目录 深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解事务的基本概念1、什么是事务?2、事务的四大特性2-1:原子性(Atomic&#xff09…

创建electron,解决包清理的问题,解决镜像源卡住下载时间长

我的电脑用户名是Anyphasy,我的node.js安装在D:\developp\nodejss18.18.0 使用npm config get prefix查看node.js安装路径 npm config get prefix 创建electron 创建package.json文件,它里面记载了你的electron版本,项目描述,以及启动命令等信息 npm init -y 先查看你自己的…

什么样的内外网文档摆渡,可以实现安全高效传输?

内外网文档摆渡通常指的是在内网(公司或组织的内部网络)和外网(如互联网)之间安全地传输文件的过程。这个过程需要特别注意安全性,因为内网往往包含敏感数据,直接连接内网和外网可能会带来安全风险。因此会…

PyCharm 中的特殊标记

在使用 PyCharm 开发 Python 项目的时候,经常会有一些特殊的标记,有些是 IDE 提示的代码规范,有些则为了方便查找而自定义的标记。 我在之前写过一些关于异常捕获的文章:Python3 PyCharm 捕获异常报 Too broad exception clause …

服务器数据恢复—Storwize V3700存储数据恢复案例

服务器存储数据恢复环境: 某品牌Storwize V3700存储,10块硬盘组建了2组Mdisk加入到一个存储池中,一共创建了1个通用卷来存放数据,主要数据为oracle数据库。 服务器存储故障: 其中一组Mdisk中两块磁盘出现故障离线&…

Python常用包介绍

数据处理 1.numpy(数据处理和科学计算) import numpy as np np.set_printoptions(precision2, suppressTrue) # 设置打印选项,保留两位小数,禁止科学计数法arr np.arange(1, 6) # 使用arange函数创建数组 print(arr)# 输出&…

【1731】jsp 房租跟踪监控管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 房租跟踪监控管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…

实时采集麦克风并播放(springboot+webscoekt+webrtc)

项目技术 springbootwebscoektwebrtc 项目介绍 项目通过前端webrtc采集麦克风声音,通过websocket发送后台,然后处理成g711-alaw字节数据发生给广播UDP并播放。 后台处理项目使用线程池(5个线程)接受webrtc数据并处理g711-alaw字节数组放到Map容器中&…

排队叫号取号投屏语音播报小程序开源版开发

排队叫号取号投屏语音播报小程序开源版开发 多场景排队叫号系统,支持大屏幕投屏,语音播报叫号,可用于餐厅排队取餐、美甲店排队取号、排队领取、排队就诊、排队办理业务等诸多场景,助你轻松应对各种排队取号叫号场景。 功能特性…