【人工智能】数据分析与机器学习——泰坦尼克号(更新中)

1912年4月15日,泰坦尼克号在首次航行期间撞上冰山后沉没,船上共有2224名乘客和乘务人员,最终有1502人遇难。沉船导致大量伤亡的重要原因之一是,没有足够的救生艇给乘客和船员。虽然从这样的悲剧性事故中幸存下来有一定的运气因素,但还是有一定规律可循的,一些人,比如妇女、儿童和上层人士,比其他人有更高的存活可能性。泰坦尼克号事件留下了“弥足珍贵”的数据记录。如前所述,乘客的幸存率存在一定的规律,因此这些数据记录集成了Kaggle上流行的入门机器学习的数据集。同时,又由于该数据集中的记录不完整,存在缺失值、异常值等,因此也成了很典型的练习数据分析的数据集。

在这里插入图片描述

1. 预览数据

由于我们用到的数据集是CSV格式的,所以直接利用Pandas提供的read_csv()方法来读取数据即可。在将数据读取到内存之后,最好对数据进行简单的预览(使用head()方法)。预览的目的主要是了解数据表的大小、字段的名称及数据格式等。这为理解数据及后续的数据处理工作做了铺垫。
在这里插入图片描述

2. 获取该数据集的更多信息

我们还可以用shape属性和info()方法来获取该数据集的更多信息
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
从上面的输出不仅可看出每个字段的数据类型,更重要的是,还可从每个字段的计数信息看出,Cabin相比于其他字段仅有204个有效数据,数据缺失严重。

在这里插入图片描述
对于泰坦尼克幸存者数据集,我们也可以借助于热力图来查看缺失值的情况。

plt.rcParams['font.sans-serif'] = ['SimHei']  #正常显示中文标签
sns.heatmap(train_df.isnull(),cbar=False).set_title(r"缺失值热力图")

在这里插入图片描述

3. 数据分布

describe()会对所有数值型字段进行一些必要的统计:
在这里插入图片描述

细细体会describe()给出的信息,我们还能多少看到“异常值”(Outlier)的侧影。比如说,票价(Fare)的平均值为32.4美元,而中位数为14.45美元,平均值居然比中位数大很多,说明该特征分布是严重右偏的,我们又看到最大值是512.32美元,严重偏离均值和中位数,所以这个值很可能是潜在的异常值。

此外,还可从describe()的输出大致看到整个数据集的缺失值情况。比如,从count(计数)这个指标来看,多特征的个数都是981个,而年龄只有714个,这表明这个数据集中年龄字段至少有200个值是缺失的。

在这里插入图片描述

38%的乘客生存率

在这里插入图片描述

超过76%的乘客没有与父母和孩子一起旅行

在这里插入图片描述

大约31% 的乘客与亲属一起登船

在这里插入图片描述

少于1%的乘客付了高达512美元的船票费,少于1%的乘客年龄在64~80岁

在这里插入图片描述

Sex特征中有65%为男性

577➗891=0.6476

Cabin 中的count 与unique并不相等,说明有些乘客共享一个Cabin

Embarked一共有3种取值,其中从S港口登船的人最多

Ticket的特征下,有22%左右的重复值(unique=618)

在这里插入图片描述

4. 特征相关性分析与可视化

fig , [ax1,ax2,ax3] = plt.subplots(1,3,figsize=(20,5))
sns.countplot(x='Sex',hue='Survived',data=train_df,ax=ax1)
sns.countplot(x='Pclass',hue='Survived',data=train_df,ax=ax2)
sns.countplot(x='Embarked',hue='Survived',data=train_df,ax=ax3)
ax1.set_title('Sex 特征分析')
ax2.set_title('Pclass 特征分析')
ax3.set_title('Embarked 特征分析')

countplot()是“计数图”的意思。我们可将它认为是一种对某些分类进行计数的直方图。通过设置方法中的hue参数,可分标签显示不同类别。
在这里插入图片描述

女性有更大的存活率

train_df[['Sex','Survived']].groupby(['Sex'],as_index=False).mean()

在这里插入图片描述

上等舱的乘客(Plass=1)有更大的存活率

train_df[['Pclass','Survived']].groupby(['Pclass'],as_index=False).mean()

在这里插入图片描述

SipSp和Parch与Survive有相关性

train_df[['SibSp', 'Survived']].groupby(['SibSp'], as_index=False).mean().sort_values(by='Survived', ascending=False)

在这里插入图片描述

train_df[['Parch', 'Survived']].groupby(['Parch'], as_index=False).mean().sort_values(by='Survived', ascending=False)

在这里插入图片描述
还可以进行可视化分析:

fig ,ax =plt.subplots(1,2,figsize=(20,5))
sns.countplot(x='SibSp',hue='Survived',data=train_df,ax=ax[0])
sns.countplot(x='Parch',hue='Survived',data=train_df,ax=ax[1])
ax1.set_title('SibSp 特征分析')
ax2.set_title('Parch 特征分析')

在这里插入图片描述
可以看出,配偶或兄弟姐妹数量为0的人(如同Jack一样的单身汉)最多,但获救率最低,而配偶或兄弟姐妹数量为1的人群获救率相对较高,超过50%。观察Parch这个特征可以发现,情况和SibSp基本相同,在做模型特征选择时,可考虑将二者合并

Age与Survived有相关性

使用了seaborn库中的FacetGrid对象来绘制一个分面图(faceted plot),其中按照train_df数据集中的’Survived’列的值(0表示未存活,1表示存活)来分面,并在每个分面中绘制’Age’列的直方图:

g = sns.FacetGrid(train_df,col='Survived')
g.map(plt.hist, 'Age',bins=20)
plt.show()

'Age’参数指定了要绘制直方图的列,bins=20指定了直方图中条形的数量
在这里插入图片描述

密度图

此外,以上分析多是定量分析,我们还可以定性分析。这里的定性特指基于密度图进行分析。下面我们以年龄(Age)特征为例来说明:

fig,ax = plt.subplots(figsize=(20,5))
sns.kdeplot(train_df.loc[(train_df['Survived']==0),'Age'],color='gray',linestyle="--",fill=True,label='非幸存')
sns.kdeplot(train_df.loc[(train_df['Survived']==1),'Age'],color='gray',linestyle="--",fill=True,label='非幸存')
plt.title('Age 特征分布 - Survivor V.S. Not Survivor',fontsize=15)
plt.xlabel("Age(年龄)",fontsize=15)
plt.ylabel("Frequency(频度)",fontsize=15)

在这里插入图片描述
可以很明显看到,15岁以下的乘客的幸存率出现了小高峰,也就是说孩子的幸存率比较高,而对于15岁以上的乘客,幸存与否并无明显区别

箱形图

当然,我们还可以接着挖掘,看看年龄(Age)和舱位等级(Pclass)有什么关联。

# 箱型图特征分析
fig ,ax = plt.subplots(figsize=(20,5))
sns.boxplot(x = "Pclass", y = "Age", data=train_df,ax=ax)
sns.swarmplot(x="Pclass", y="Age", data=train_df,ax=ax,hue="Survived")

在这里插入图片描述
如果说舱位等级(Pclass)能在一定程度上代表社会地位的话,那么,不同Pclass下的年龄分布也不同,三个分布的**中位数(箱形图的中间线)**的关系为Pclass1 > Pclass2 > Pclass3。
社会地位高的人,年龄一般会比较大。而三等舱中人数众多,他们大多数是普通的想去美国讨生活的年轻人,年龄在20~30岁之间。

我们还用swarmplot()绘制了带分布的散点图,并用不同的颜色展示是否幸存,从图中可以看出,社会等级较高(即Pclass等级高)的人,他们的幸存率更高。

PS:从代码层面,如果想将两种不同类型的图形绘制在一起,可将它们的绘图坐标轴设置为一样的。

5. 数据清洗与预处理

前面我们已经收集了一些假设和结论,接下来清洗数据。

修正数据

丢弃Cabin 和 Ticket这两个特征(同时在训练集和测试集中丢弃)

train_df = train_df.drop(['Ticket','Cabin'], axis=1) #axis 删除的是列(axis=1)还是行(axis=0)
test_df = test_df.drop(['Ticket','Cabin'], axis=1)
combine = [train_df, test_df]

female 转换为1,male 转换为0

for dataset in combine:
    dataset['Sex'] = dataset['Sex'].map({'male': 0, 'female': 1}).astype(int)

train_df.head()

在这里插入图片描述

创建数据

Title特征

从Name特征中提取Title特征,并测试Title与Survive之间的关系

在泰坦尼克号数据集中,乘客的姓名(Name 列)通常包含了他们的称谓(如 Mr., Mrs., Miss., Master, Dr., etc.),这些称谓后面通常跟着一个点(.)和乘客的名字。由于这些称谓可能与乘客的社会地位、年龄或性别有关,它们可能包含对预测乘客生存几率有用的信息。

在数据分析和机器学习的预处理阶段,提取这些称谓并将其作为新的特征(或称为列)添加到数据集中是很常见的做法。这有助于捕捉原始数据中可能隐藏的模式或相关性,并可能提高模型的预测性能。

for dataset in combine:
    dataset['Title'] = dataset['Name'].str.extract('([A-Za-z]+)\.',expand=False)
pd.crosstab(dataset['Title'], dataset['Sex'])

使用 pandas 的 .str.extract() 方法可以很容易地从包含这些称谓的字符串中提取它们。在这个方法中,我们使用了正则表达式 ([A-Za-z]+)\. 来匹配一个或多个字母(不区分大小写),后面紧跟着一个点号(.)。正则表达式的括号 () 用于捕获匹配的文本,而 expand=False 参数确保只返回一个列
在这里插入图片描述
再将Title特征中常见的称呼用“Rare”来替代:

for dataset in combine:
    dataset['Title'] = dataset['Title'].replace(['Lady','Countess','Capt','Col','Don','Dr','Major','Rev','Sir','Jonkheer','Dona'],'Rare')
    dataset['Title'] = dataset['Title'].replace('Mlle','Miss')
    dataset['Title'] = dataset['Title'].replace('Ms','Miss')
    dataset['Title'] = dataset['Title'].replace('Mme','Mrs')
train_df[['Title','Survived']].groupby(['Title'],as_index=False).mean()

在这里插入图片描述
再将离散型的Title转化为有序的数值型:

title_mapping = {"Mr":1,"Miss":2,"Mrs":3,"Master":4,"Rare":5}
for dataset in combine:
    dataset['Title'] = dataset['Title'].map(title_mapping)
dataset['Title'] = dataset['Title'].fillna(0)
train_df.head()

在这里插入图片描述
丢弃Name 特征和PassengerId 特征

现在丢弃训练集和测试集中的Name特征,丢弃训练集的PassengerId特征

train_df = train_df.drop(['Name','PassengerId'], axis=1) #axis 删除的是列(axis=1)还是行(axis=0)
test_df = test_df.drop(['Name'], axis=1)
combine = [train_df, test_df]

在这里插入图片描述

IsAlone 特征

组合Parch和SibSp特征,创建一个新的FamilySize特征,再通过FamilySize特征创建一个名为IsAlone的特征。最后丢弃Parch、SibSp和FamilySize特征,保留IsAlone特征。

for dataset in combine:
    dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1
train_df[['FamilySize','Survived']].groupby(['FamilySize'],as_index=False).mean().sort_values(by='Survived',ascending=False)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Aware接口作用

介绍 Aware(感知)接口是一个标记,里面没有任何方法,实际方法定义都是子接口确定(相当于定义了一套规则,并建议子接口中应该只有一个无返回值的方法)。 我们知道spring已经定义好了很多对象,如…

半导体测试基础 - 基本概念

随着芯片集成度越来越高,手动测试已无法满足需求,因此要用到自动化测试设备(ATE,Automated Test Equipment)。因为现在的芯片原来越复杂,普通的 Bench 测试没法满足需求。ATE 可检测集成电路功能之完整性&a…

Joomla 3.7.0 (CVE-2017-8917) SQL注入漏洞环境

1 漏洞概述 Joomla是一个基于PHP的内容管理系统(CMS),广泛应用于各类网站。2017年,Joomla 3.7.0版本被发现存在SQL注入漏洞(CVE-2017-8917),攻击者可以利用该漏洞对数据库进行未授权查询或操作…

Centos 7.9 使用 iso 搭建本地 YUM 源

Centos 7.9 使用 iso 搭建本地 YUM 源 1 建立挂载点 [rootlocalhost ~]# mkdir -p /media/cdrom/ 2 创建光盘存储路径 [rootlocalhost ~]# mkdir -p /mnt/cdrom/ 3 上传 CentOS-7-x86_64-Everything-2207-02.iso 到 光盘存储路径 [rootlocalhost ~]# ls /mnt/cdrom/ CentOS-…

基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)

基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest) 随着数据科学和机器学习的发展,越来越多的企业开始利用这些技术来提高运营效率。在这篇博客中,我将分享如何利用机器学习模型来预测信用卡的潜在客户。此…

如何设计足够可靠的分布式缓存体系,以满足大中型移动互联网系统的需要?no.31

传统 CAP 的突破 随着分布式系统的不断演进,会不断遇到各种问题,特别是当前,在大中型互联网系统的演进中,私有云、公有云并行发展且相互融合,互联网系统的部署早已突破单个区域,系统拓扑走向全国乃至全球的…

[深度学习]基于yolov8+bytetrack+pyqt5实现车辆进出流量统计+车辆实时测速实现

以前使用过yolov5deepsort实现过车辆进出流量统计车辆实时测速,可以看我往期视频,这回改成yolov8bytetrack实现,实时性更好,原理和原来一样。车流量进出统计车速测量优点: 使用目标检测算法考虑bbox抖动,解…

利用Python去除PDF水印

摘要 本文介绍了如何使用 Python 中的 PyMuPDF 和 OpenCV 库来从 PDF 文件中移除水印,并将每个页面保存为图像文件的方法。我们将深入探讨代码背后的工作原理,并提供一个简单的使用示例。 导言 简介:水印在许多 PDF 文件中都很常见&#x…

Spark项目实训(一)

目录 实验任务一:计算级数 idea步骤分步: 完整代码: linux步骤分布: 实验任务二:统计学生成绩 idea步骤分布: 完整代码: linux步骤分步: 实验任务一:计算级数 请…

【Linux001】centos常用命令总结总结(已更新)

1.熟悉、梳理、总结下centos知识体系。 2.Linux相关知识,在日常开发中必不可少,如一些必知必会的常用命令,如环境搭建、应用部署等。同时,也要谨慎使用一些命令,如rm -rf,防止一些生产事故的发生。 3.欢迎点…

洗衣行业在线预约小程序源码系统 在线下单+上门取件+订单状态跟踪 带网站的源代码包以及搭建部署教程

开发背景 在现代社会,人们越来越注重时间的利用和生活的便捷性。传统的洗衣服务模式往往需要消费者亲自将衣物送到洗衣店,然后再等待取衣,整个过程既耗时又不方便。此外,随着移动互联网的普及,人们更习惯于通过手机应…

Soybean Admin:一款高效、现代化的后台管理模板探索

随着前端技术的快速发展,越来越多的开发者开始寻求使用最新技术栈来构建高效、用户友好的后台管理系统。Soybean Admin作为一款基于Vue3、Vite5、TypeScript、Pinia、NaiveUI和UnoCSS等前沿技术的后台管理模板,为我们提供了一个全新的解决方案。本文将深…

List、IList、ArrayList 和 Dictionary

List 类型: 泛型类命名空间: System.Collections.Generic作用: List<T> 表示一个强类型的对象列表&#xff0c;可以通过索引访问。提供了搜索、排序和操作列表的方法。特点: 类型安全&#xff0c;性能较好&#xff0c;适用于需要强类型和高效操作的场景。例子: List<…

数字人系统OEM源码及赚钱方式详解!

当前&#xff0c;数字人直播的热度持续上涨&#xff0c;应用场景日益丰富。而随着数字人直播所蕴含的前景和潜力被不断挖掘一批又一批的创业者纷纷开始入局分羹。其中&#xff0c;数字人系统OEM源码模式作为最为常见的入局方式之一&#xff0c;更是备受瞩目。 所谓数字人系统O…

【个人经历分享】末流本科地信,毕业转码经验

本人24届末流本科&#xff0c;地理信息科学专业。 我们这个专业可以说是 “高不成&#xff0c;低不就”的专业&#xff0c;什么都学但都不精。考研我实在是卷不动同学历的人&#xff0c;我在大三的时候就开始考虑转码。 至于我为什么选择转码&#xff0c;选择了GIS开发&#xf…

hcip—VLAN实验

目录 实验拓扑&#xff1a; 实验目的&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 1.创建VLAN 2.将接口放进相应VLAN当中&#xff0c;并配置接口类型&#xff08;hybrid口配置撕tag表&#xff09; 3.配置路由器接口 4.配置DHCP服务 pc1 ping pc4的过程分析…

position: absolute对el-dialog的影响

当用到position: absolute,会使元素脱离文档流,从而对原始层级发生变化,导致蒙层无法消失.

dubbo复习: (5)和springboot集成时的标签路由

标签路由&#xff1a;服务提供者和服务消费者都可以指定标签。 只有服务提供者的标签和服务消费者的标签一致时&#xff0c;才会进行请求路由。 给服务提供者指定标签有两种方式&#xff0c;一种是通过在DubboService注解的tag属性来指定&#xff0c;如下示例 package cn.edu…

VScode C/C++环境安装配置

1. 编译器需要从如下网站下载&#xff1a; MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 2. 切换到file选项&#xff0c;下拉找到对应的文件版本直接下载&#xff1a; 3. 右键解压到当前文件夹如下&#xff1a; 4. 如图所示复制浏览器上的相应的…

LabVIEW2022安装教程指南【附安装包】

文章目录 前言一、安装指南1、软件包获取 二、安装步骤总结 前言 LabVIEW是一种程序开发环境&#xff0c;提供一种图形化编程方法&#xff0c;可可视化应用程序的各个方面&#xff0c;包括硬件配置、测量数据和调试&#xff0c;同时可以通过FPGA数学和分析选板中的NI浮点库链接…