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

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)

在这里插入图片描述

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

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

相关文章

微信小程序进阶(1)--自定义组件

自定义组件 1.1 什么是自定义组件 开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ 小程序中常常会有些通用的交互模块,比如:下拉选择列表、搜索框、日期选择器等;这些界面交互模块可…

数据挖掘案例-航空公司客户价值分析

文章目录 1. 案例背景2. 分析方法与过程2.1 分析流程步骤2.2 分析过程1. 数据探索分析2. 描述性统计分析3. 分布分析1.客户基本信息分布分析2. 客户乘机信息分布分析3. 客户积分信息分布分析 4. 相关性分析 3. 数据预处理3.1 数据清洗3.2 属性约束3. 3 数据转换 4. 模型构建4. …

超融合架构下,虚拟机高可用机制如何构建?

作者:SmartX 产品部 钟锦锌 虚拟机高可用(High Availability,简称 HA)是虚拟化/超融合平台最常用、关键的功能之一,可在服务器发生故障时通过重建业务虚拟机以降低故障对业务带来的影响。因此,为了充分保障…

ubuntu22.04下 easyconnect+输入法安装

先使用对应ubuntu版本的easyconnect安装 sudo dpkg -i EasyConnect_x64_7_6_7_3.deb 下载压缩包servicePack,并解压缩 cd 下载路径/servicePack sudo cp * /usr/share/sangfor/EasyConnect/ 打开easyConnect /usr/share/sangfor/EasyConnect/EasyConnect 此处…

pid中的d到底是什么意思?微分到底是用来做什么的,什么情况下用,避免入坑实际案例中的使用-----------PDI中的D阻尼调节

1,PID中表示的含义是什么? 比例(proportional):放大比例-------表示现在 0.2 积分(integral):误差积分------过去 0.04 微分 (derivative):阻尼 ------未来 0.002 在调节…

IDEA设置运行内存

1.开启内存指示条​​​​​​​ 查看idea右下角​​​​​​​ 2.环境变量查看ideaVM地址,没有的话那就是默认的配置文件: idea 安装 bin 目录下 idea64.exe.vmoptions 3.去对应路径修改内存参数大小 4.重启IDEA,end

体育赛事直播系统源码开发:社区论坛模块如何实现引流与增收双赢

在当今数字化时代,体育直播平台不仅是赛事观看的窗口,更是一个互动和交流的社区,以及是一场关于用户体验、用户粘性以及商业模式创新的综合较量。为了在这片红海市场中脱颖而出,平台必须采取更加精细化和多元化的运营策略。其中&a…

前端命令行部署

最近接了一个项目,发版本需要把dist包给后端部署服务,再加上产品那边需求不稳定,改了又改,一天要发好几个,不仅跟我配合的后端不胜其烦,本人也是很烦。最近在网上看到一个npm自主部署的包–deploy cli工具&…

香橙派 AIpro开发板:开启AI视觉的无限可能

前言 在当今这个由数据和智能驱动的时代, 人工智能(AI) 已经成为推动技术创新和实现自动化的关键。 特别是在计算机视觉领域,AI的潜能被无限放大,它使得机器能够“看见”并理解视觉世界,从而执行复杂的任务…

LangChain 0.2 - 对话式RAG

文章目录 一、项目说明二、设置1、引入依赖2、LangSmith 三、Chains1、添加聊天记录Contextualizing the question聊天记录状态管理 2、合并 四、Agents1、检索工具2、代理建造者3、合并 五、下一步 本文翻译整理自:Conversational RAG https://python.langchain.co…

加宽全连接

一、Functional API 搭建神经网络模型 1.对宽深神经网络模型进行手写数字识别: 运行代码: inputs keras.layers.Input(shapeX_train.shape[1:]) hidden1 keras.layers.Dense(300,activation"relu")(inputs) hidden2 keras.layers.Dense(…

MySQL中视图是什么,有什么作用

目录 一、视图的简介 1.1 什么是视图? 1.2 为什么使用视图? 1.3 视图有哪些规则与限制? 1.4 视图能否更新? 二、视图的创建 三、视图的作用 3.1 用视图简化复杂的联结 3.2 用视图格式化检索出的数据 3.3 用视图过滤数据…

梭住绿色,植梦WILL来,容声冰箱“节能森林计划”再启航

近日,容声冰箱再度开启了“节能森林计划”绿色公益之旅。 据「TMT星球」了解,此次活动深入到阿拉善荒漠化地带,通过实地考察和亲身体验,见证容声了“节能森林计划”项目的持续落地和实施效果。 2022年,容声冰箱启动了…

【电控实物-PMSM】

遗留问题 电流环闭环 电流环频率会受到编码器回传频率影响? Ld&Lq辨识 L观测器设计验证 滑膜观测器/高频注入 前馈(加大负载) 各种电流控制模式: psms规格书 参数辨识 Ld&Lq

qt 布局学习笔记

目录 qt下载地址: widget 宽高 管理信息列表源码 c版: pro文件: qt 设置水平布局,里面有两个按钮,每个按钮就变的很宽,怎么设置按钮的精确位置 设置固定大小: 使用弹性空间(…

高效掌控速卖通自养号测评:成本、步骤、技巧全方位掌握

在跨境电商的汹涌浪潮中,速卖通犹如一颗璀璨的领航星,引领着无数寻求海外拓展的企业和商家驶向国际市场的广阔海域。从最初的C2C模式起步,速卖通历经蜕变,如今已华丽转身成为B2C跨境电商领域的翘楚,承载着无数中国卖家…

【传知代码】基于图神经网络的知识追踪方法(论文复现)

前言:本文将深入探讨基于图神经网络的知识追踪方法,旨在通过构建知识图谱来捕捉知识之间的复杂关联,并利用图神经网络强大的表示学习能力来建模学生的学习过程。我们将首先介绍图神经网络的基本原理和关键技术,然后详细阐述如何将…

现代前端工程化实践:Git、Husky、Commitlint与PNPM的协同作战

引言 Git Husky 与 Commitlint 是两个在 Git 工作流程中非常实用的工具,它们可以帮助团队维护代码质量和提交规范。Husky 是一个 Git 钩子管理器,允许你在仓库级别方便地配置钩子脚本;而 Commitlint 则是用来规范 Git 提交信息的工具&#x…

edge浏览器的网页复制

一些网页往往禁止复制粘贴,本文方法如下: 网址最前面加上 read: (此方法适用于Microsoft Edge 浏览器)在此网站网址前加上read:进入阅读器模式即可

跨境电商投放Facebook广告推广攻略!

在出海浪潮中,跨境电商已经成为企业连接不同市场、拓展国际业务的重要途径。Facebook,作为全球最大的社交平台之一,拥有超过20亿的活跃用户,为跨境卖家提供了一个无与伦比的营销舞台。有效利用Facebook广告,不仅能帮助…