当前位置:

首页 > 编程开发 > 如何使用python对泰坦尼克号幸存者进行数据分析与预测

如何使用python对泰坦尼克号幸存者进行数据分析与预测

数据获取当我们成功注册账号后,可以在竞赛链接中找到泰坦尼克沉船存活的竞赛链接,如下图所示:进入竞赛页面后,可以看到关于竞赛的简单介绍以及其他人的代码等内容,在这里我们点击Data。注意下面的数据介绍,这里的数据介绍将会帮助我们了解数据的基本情况以及其代表的内容。我们获取到数据之后,打开编译环境准备开始进行数据分析,在本文中我使用的是jupyter进行数据分析,当然可以选择自己习惯的编译环境进行后续的工作。拿到数据之后,我们首先编写代码将其读取进编译环境中,代码如下:#导入pandasimportpanda

数据获取

当我们成功注册账号后,可以在竞赛链接中找到泰坦尼克沉船存活的竞赛链接,如下图所示:

如何使用python对泰坦尼克号幸存者进行数据分析与预测


进入竞赛页面后,可以看到关于竞赛的简单介绍以及其他人的代码等内容,在这里我们点击Data。

如何使用python对泰坦尼克号幸存者进行数据分析与预测


注意下面的数据介绍,这里的数据介绍将会帮助我们了解数据的基本情况以及其代表的内容。

如何使用python对泰坦尼克号幸存者进行数据分析与预测

我们获取到数据之后,打开编译环境准备开始进行数据分析,在本文中我使用的是jupyter进行数据分析,当然可以选择自己习惯的编译环境进行后续的工作。

拿到数据之后,我们首先编写代码将其读取进编译环境中,代码如下:

# 导入pandas
import pandas as pd
# 将训练集数据导入
data = pd.read_csv('train.csv')

导入数据后的结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

数据初步观察与处理 数据观察 数据清理4C原则

在我们拿到数据后,我们需要对数据进行初步的观察以及数据清洗。这里介绍Kaggle大佬提出的数据清理4C原则,其分别是:

Correcting(纠正):顾名思义,纠正数据就是对数据进行异常值的处理。例如年龄如果存在100+的数据,那么这一定是不正常的值。我们将对不同的数据进行异常值的检查以确保其是正常有效的。但是,当我们从原始的数据中修改数据的时候一定要谨慎行事,因为建立一个准确的模型的基石就是数据,数据决定了模型的好坏

Completing(补充):补充缺失值以及被我们所发现的异常值是必须的。虽然在某些模型中,可以自动的帮助我们处理缺失值儿不需要处理(例如决策树)。在这部分中,我们通常会选择缺失占比小的缺失值进行删除,儿占比较大或者占比非常大的缺失值,我们会考虑在原有的数据中探寻某种规律将其进行填充。

Creating(创建):特征工程中需要我们对原有的特征进行理解并决定是否提取新的特征。例如,在本题中我们可以考虑对年龄进行分段作为一个新的特征考虑在内。当然这里的前提是,我们对问题有一个深刻的了解,探寻我们提取的特征是否真的能够对最后的模型构建有帮助。这就需要我们反复验证,思考进行提取特征,找寻到真正对不同问题有帮助的特征。

Converting(转换):在针对某些特定的数据格式的时候,可能还需要我们进行数据转换。这当然是非常重要的,例如某些字符串类型的数据,需要我们转换为数值的形式来表示。

在这一步中,我们将调用pandas中的基本函数对数据进行初步的观察。我们首先调用info()查看数据的类型以及基本情况,代码如下:

data.info()

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

当我们调用该函数后,可以看到所有数据的类型以及基本情况。

这里需要注意我标注的数据,我们发现Age数据与其它数据相比数量少了很多,也就是我们说的缺失值。与此同时,可以看到Cabin以及Embarked也存在缺失的情况。

这些都需要我们关注,并在后续进行一些处理。

随后,我们调用describe()函数进一步观察数据的分布情况,该函数可以帮助我们计算每列数据的分布以及平均值等内容。代码如下:

data.describe()

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

这里我们发现Parch数据的75%都是0,存在明显的分布不均匀的情况,后续可能需要处理。

缺失值处理(Completing)

在上节中,我们发现数据存在一定的缺失情况,我们首先对其进行可视化,这能够使得我们对数据的观察更直观。

在这里我们用到了missingno库进行缺失数据的可视化,其对缺失数据的可视化更加直观。

使用之前,请确保自己已经安装该库。

使用该库进行可视化的代码如下:

# 在数据中抽样100个单位
data_sample = data.sample(100)
msno.matrix(data_sample)

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

可以发现,Cabin的缺失值较为明显,Age也存在一些缺失值。

因为数据中每列代表的情况不尽相同,所以我们将针对数据进行不同的处理方法。

我们再通过代码来观察一下缺失的数据情况,代码与结果如下:

missing_data = data.isnull().sum()
missing_data = missing_data [missing_data >0]
missing_data

如何使用python对泰坦尼克号幸存者进行数据分析与预测

Embarked的处理

我们首先处理Embarked列,在上边的数据观察中发现其拥有两个缺失值,因为相对于全部的一千条数据来说其量级较小,所以我们在这里直接选择该列缺失的两条数据进行删除处理,代码如下:

# 在data中寻找Embarked的缺失值 找到后在原表中将其行删除
data.dropna(axis=0, how='any',subset=['Embarked'], inplace=True)

dropna 参数介绍
axis: default 0指行,1为列
how: {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的
thresh: int,保留含有int个非空值的行
subset: 对特定的列进行缺失值删除处理
inplace: 这个很常见,True表示直接在原数据上更改

Age的处理

在上述观察中,我们发现Age存在一定的缺失情况,接下来我们对其进行处理。

我们由Kaggle中的数据介绍中了解到,其表示乘客的年龄,且缺失值相对来说较多,不能够直接采用删除的方式。

我们首先观察Age的分布情况,绘制年龄的直方图,代码如下:

data.hist(column='Age')

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

我们注意到,年龄的分布存在一定的偏态,这时候更适合采用中位数进行填充。

注意:偏态分布的大部分值都聚集在变量分布的一侧,中位数可以很好的表示中心趋势。

所以,我们对年龄的缺失值进行中位数的填充。代码如下:

data['Age'].fillna(data['Age'].median(), inplace=True)

至此,我们对于年龄的缺失值处理完毕。

Cabin的处理

我们首先看一下Cabin的数据解释:Cabin number(机舱号码)

对于该特征来说,仿佛对于最终的数据帮助不大。即使其对于最后的数据是非常重要的,由于其缺失值过多且不容易探寻其中的规律,我们还是选择对其做删除的处理。

代码如下:

# 这里我直接删除了该列
del data['Cabin']

至此,所有数据的缺失值处理完毕。

异常值的检测与处理(Correcting)

在本例中,我们能够进行检测并处理的主要是Age特征,因为我们预先知道其大概的范围。在这里我们绘制箱线图观察其数据的异常情况决定是否需要进行处理,代码如下:

data['Age'].plot.box()

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

在这里,我们可以看到该数据的最高点在80,符合我们对于数据的预先认知,遂不进行处理。

特征构建(Create)

在这部分中,要求我们对不同的特征有一定的了解以及认识,在这里我列出所有的特征含义。

特征名称含义survival是否存活,1表示存活,0表示没有pclass表示票的种类,分别为1,2,3等sex性别Age年龄sibsp在泰坦尼克号上的兄弟姐妹/配偶的数量parch在泰坦尼克号上的父母/子女人数ticket票号fare乘客票价cabin机舱号embarked上岸港口 ,C = Cherbourg, Q = Queenstown, S = Southampton

在这里,我们提取两个特征,分别是乘客家庭规模,是否独自一人,并对票价以及年龄进行分段构造两个新的特征。

注意:针对不同的项目采取的特征提取工作并不相同,因为这需要根据具体的业务进行分析并提取。

我们首先针对家庭规模以及是否独自一人创建新的两个特征,代码如下:

data['FamilySize'] = data['SibSp'] + data['Parch'] + 1

data['IsAlone'] = 1 
data['IsAlone'].loc[data['FamilySize'] > 1] = 0

然后,我们对年龄和票价进行分段,代码如下:

data['FareBin'] = pd.qcut(data['Fare'], 4)
data['AgeBin'] = pd.cut(data['Age'].astype(int), 5)

这里简单介绍一下上述两个函数的区别与作用
qcut:根据传入的数值进行等频分箱,即每个箱子中含有的数的数量是相同的。
cut:根据传入的数值进行等距离分箱,即每个箱子的间距都是相同的。

特别的,在本节中特征工程的过程要根据实际业务进行不同的特征提取,这个过程需要我们对业务有足够的理解程度。几个好的特征对后续的模型精确程度有很大的积极影响。

数据格式转换(Convert)

某些特定的格式在很多模型中其实是不适用的,在本例中经过上述处理后的数据如下所示:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

图中的性别等内容都为字符类型,这显然在模型中存在一定的不兼容情况,这就需要我们进行一定程度的格式转换。

在本部分中,我们要处理的有以下几个部分:

PassengerId:用户id的部分对后面的预测仿佛用处不大,我们对其进行删除。Name:这里的名字中有MR.MISS等信息,这可能对后续的模型有帮助,我们对其进行处理保留。Sex:需要进行编码使用,因为它是字符串类型。Ticket:仿佛用处不大,这里我们选择删除。Embarked:需要进行编码使用,因为它是字符串类型。FareBin:需要进行编码使用,因为它是一个范围。AgeBin:需要进行编码使用,因为它是一个范围。

我们首先对需要删除的两列进行删除的操作,代码如下:

del data['PassengerId']
del data['Ticket']

然后我们对Name进行处理,将其中的身份信息提取出来,代码如下:

data['Title'] = data['Name'].str.split(", ", expand=True)[1].str.split(".", expand=True)[0]

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

最后,我们对需要编码的数据进行编码:

from sklearn.preprocessing import OneHotEncoder, LabelEncoder
label = LabelEncoder()

data['Sex_Code'] = label.fit_transform(data['Sex'])
data['Embarked_Code'] = label.fit_transform(data['Embarked'])
data['Title_Code'] = label.fit_transform(data['Title'])
data['AgeBin_Code'] = label.fit_transform(data['AgeBin'])
data['FareBin_Code'] = label.fit_transform(data['FareBin'])

编码后的结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

至此,数据格式转换已经完毕。

模型构建与评价

在本节中,我们将基于上述数据进行模型的构建,并且通过不同的评价指标进行构建。

模型构建

在这里我将会使用基础的分类模型进行模型的构建,并挑选出初步表现最好的模型进行参数调节。代码如下:

# 处理不需要的数据列
data_x = data.copy()
del data_x['Survived']
del data_x['Name']
del data_x['Sex']
del data_x['FareBin']
del data_x['AgeBin']
del data_x['Title']
del data_x['Embarked']
# 构建y
data_y = data['Survived']
# 导入包
from sklearn import svm, tree, linear_model, neighbors, naive_bayes, ensemble, discriminant_analysis, gaussian_process
from sklearn.model_selection import cross_val_score
# 定义常用的几种分类模型
MLA = {
    #随机森林
    '随机森林':ensemble.RandomForestClassifier(),
    #逻辑回归
    '逻辑回归':linear_model.LogisticRegressionCV(max_iter=3000),
    #SVM
    'SVM':svm.SVC(probability=True),
    #树模型
    '树模型':tree.DecisionTreeClassifier(),
    }
# 进行5折交叉验证并选择f1作为评价指标
for model_name in MLA:
    scores = cross_val_score(MLA[model_name], X=data_x, y=data_y, verbose=0, cv = 5, scoring='f1')
    print(f'{model_name}:',scores.mean())

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

我们可以看到,目前随机森林的效果最好,所以我们选择随机森林进行参数调节。

参数调节

在这里我们选择使用网格调参的方式进行参数调节,代码如下:

from sklearn.model_selection import GridSearchCV

n_estimators = [3,5,10,15,20,40, 55]
max_depth = [10,100,1000]

parameters = { 'n_estimators': n_estimators, 'max_depth': max_depth}

model = ensemble.RandomForestClassifier()
clf = GridSearchCV(model, parameters, cv=5)
clf = clf.fit(data_x, data_y)
clf.best_estimator_

结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

在这里,我们选择了几个简单的参数进行调节,可以根据自己的实际情况对不同的参数进行调节。我们再进行一次交叉验证求平均值看一下效果,结果如下:

如何使用python对泰坦尼克号幸存者进行数据分析与预测

可以看到与刚才的效果相比有一些提升。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Python
相关文章 更多
Python安装后怎么打开:使用IDLE或命令行启动解释器
Python安装后怎么打开:使用IDLE或命令行启动解释器

刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

Windows系统Python安装教程:下载、勾选PATH及环境变量配置
Windows系统Python安装教程:下载、勾选PATH及环境变量配置

针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

麒麟OS如何查看Python进程的运行状态
麒麟OS如何查看Python进程的运行状态

要想确认麒麟OS中Python程序的运行状态以及资源占用情况,我们可以这样做:用ps -ef | grep python来筛选进程;通过top命令,按P键排序查看实时负载;使用pgrep -f "script.py"精准获取PID;借助lsof -p PID验证文件打开状态。另外,还可以结合syst

Python在Debian上如何配置SSL证书
Python在Debian上如何配置SSL证书

在Debian系统上配置SSL证书通常涉及以下几个步骤:安装Web服务器:首先,你需要一个Web服务器,比如Apache或Nginx。这里以Apache为例。sudo apt updatesudo apt install apache2获取SSL证书:你可以从Let’s Encrypt免费获取SSL

统信UOS怎么安装Python开发环境
统信UOS怎么安装Python开发环境

要想让Python项目在统信UOS上正常运行,得先安装python3、python3-pip、python3-venv、python3-dev以及build-essential等组件。具体操作就是执行sudo apt install命令来一步到位完成安装,同时别忘了配置清华镜像源来给pip加速哦。在

纯Python方案实现中英文全文搜索
纯Python方案实现中英文全文搜索

在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点搜索,大到搜索引擎搜索。从简单的来说,搜索功能确实很简单,一个简单的select语句就可以实现数据的搜索。而从复杂的来看,无论是搜索的精度还是搜索的效率,都是有很深的研究范围的。对于简单的搜索功能来说,一个s

Mac如何取消通过Python脚本运行的关机程序
Mac如何取消通过Python脚本运行的关机程序

立即在终端输入sudo shutdown -c取消倒计时关机,成功后显示“Shutdown cancelled”;若存在pmset重复任务,需再执行sudo pmset repeat cancel清除。Mac因Python脚本执行了os.system("sudo shutdown -h +10")或

Pythonasyncio异步并发与多固定出口IP调度实战
Pythonasyncio异步并发与多固定出口IP调度实战

之前写过一篇同步场景下用 Python 管理多个固定出口 IP 的实践(ExitPool + requests/httpx),覆盖了健康检查、故障转移和连接池复用。但在实际业务中,越来越多的场景用 asyncio 做高并发采集或批量接口调用——异步事件循环下多出口的管理方式和同步场景完全不同:单线程

Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换
Python在静态出口IP产品中的实战:从地址漂移巡检到多IP故障切换

写在前面:为什么静态出口 IP 不是"买了就行"不少团队在引入静态出口 IP 产品时,第一反应往往是:“地址配上去,这事就算完了。”可真到了真实业务里,静态出口 IP 真正能体现价值的地方,往往不在分配这一步,而在分配之后怎么管:地址有没有漂移,质量是否达标,某一条线路突然不可用时怎么切换,连接层又

using namespace 使用中遇到的问题怎么解决
using namespace 使用中遇到的问题怎么解决

命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。