泰坦尼克号 - 从灾难中学习机器学习/Titanic - Machine Learning from Disaster(kaggle竞赛)第六集(特征工程与生存率分析)

此次目的:
hello大家好,俺是没事爱瞎捣鼓又分享欲爆棚的叶同学!!!准备出几期博客来记录我学习kaggle数据科学入门竞赛的过程,顺便也将其中所学习到的知识分享出来。(所学主要的内容来自与b站大学恩师“编程教学-Python“的教学视频内容)

一. 构造新特征 Title

首先,我们从乘客的姓名中提取出头衔(Title)作为一个新的特征。在泰坦尼克号数据集中,乘客的姓名通常包含头衔信息,例如“Mr.”、“Mrs.”等。

# 从Name中提取Title
full['Title'] = full['Name'].map(lambda x: x.split(',')[1].split('.')[0].strip())

# 查看Title数据分布
full['Title'].value_counts()

注意:split与lambda函数讲解。划重点!!!

  • full['Name']:从数据集full中提取Name列,这列包含全名。
  • .map(lambda x: ...):对Name列的每一个值(即每一个名字)应用一个匿名函数(lambda函数)。
  • x.split(',')[1]:首先将名字字符串以逗号分割,通常名字的格式是“姓氏, 称谓 名字”,这一步提取逗号后面的部分。
  • .split('.')[0]:然后再以句号分割,通常称谓与名字之间有句号,这一步提取句号前的称谓部分。
  • .strip():最后去掉提取出的称谓前后的空格。

头衔数据提取后,我们可以看到不同的头衔类型。为了减少类别的数量,我们将相似的头衔进行合并,比如将“Miss”和“Mlle”合并为“Miss”,将“Don”、“Sir”等头衔归为“Royalty”。

# 将Title信息进行整合
TitleDict = {
    'Mr': 'Mr',
    'Mlle': 'Miss',
    'Miss': 'Miss',
    'Master': 'Master',
    'Jonkheer': 'Master',
    'Mme': 'Mrs',
    'Ms': 'Mrs',
    'Mrs': 'Mrs',
    'Don': 'Royalty',
    'Sir': 'Royalty',
    'the Countess': 'Royalty',
    'Dona': 'Royalty',
    'Lady': 'Royalty',
    'Capt': 'Officer',
    'Col': 'Officer',
    'Major': 'Officer',
    'Dr': 'Officer',
    'Rev': 'Officer'
}

full['Title'] = full['Title'].map(TitleDict)
full['Title'].value_counts()

在整合头衔后,我们可以通过可视化来分析不同头衔乘客的生存率:

# 可视化Title与Survived之间的关系
sns.barplot(data=full, x='Title', y='Survived')

二. 构造家庭成员数量特征 familyNum

接下来,我们构造了家庭成员数量(familyNum)这一特征。familyNum等于乘客的Parch(父母或子女数量)与SibSp(兄弟姐妹或配偶数量)之和再加上乘客自己。

# 计算家庭成员数量
full['familyNum'] = full['Parch'] + full['SibSp'] + 1

# 查看familyNum与Survived的关系
sns.barplot(data=full, x='familyNum', y='Survived')

分析显示,家庭成员数量在2到4人时,乘客的生存率较高,而没有家庭成员或家庭成员数量过多时生存率较低。基于此,我们将家庭规模分为小(0)、中(1)、大(2)三类。

# 将家庭规模分为小(0), 中(1), 大(2)三类
def familysize(familyNum):
    if familyNum == 1:
        return 0
    elif 2 <= familyNum <= 4:
        return 1
    else:
        return 2

full['familysize'] = full['familyNum'].map(familysize)
full['familysize'].value_counts()

# 查看familysize与Survived的关系
sns.barplot(data=full, x='familysize', y='Survived')

注意:

.map(familysize):对familyNum列的每一个值应用familysize函数,并根据返回值创建一个新的列familysize,表示家庭规模的分类。 

三. 提取船舱类型特征 Deck

船舱类型(Deck)的首字母也可以作为一个有价值的特征。通过提取Cabin字段的首字母,我们可以构造出Deck特征。

full['Cabin'].unique()

.unique(): 这是一个Pandas函数,用于返回一个包含Cabin列中所有唯一值的数组。唯一值是指在该列中不重复出现的值。 

# 提取Cabin字段首字母作为Deck
full['Deck'] = full['Cabin'].map(lambda x: x[0])

# 查看不同Deck类型乘客的生存率
sns.barplot(data=full, x='Deck', y='Survived')
  • full['Cabin']: 从数据集full中提取Cabin列,该列通常表示乘客的舱位编号。

  • .map(lambda x: x[0]):

    • .map(...)函数对Cabin列中的每个值(即每个舱位编号)应用一个函数。
    • lambda x: x[0] 是一个匿名函数(lambda函数),它接收每个舱位编号字符串x,并返回这个字符串的第一个字符x[0]
    • 这个第一个字符通常表示乘客所处的甲板(Deck),如"A", "B", "C"等。
  • full['Deck'] = ...: 这部分将提取出的首字母(甲板编号)存储在新的Deck列中。

 

四. 共票号乘客数量特征 TickComTickGroup

最后,我们通过统计相同票号的乘客数量,构造了共票号乘客数量(TickCom)特征,并进一步将其分为三类(TickGroup)。

# 提取各票号的乘客数量
TickCountDict = full['Ticket'].value_counts()
TickCountDict.head(20)

 

# 将同票号乘客数量数据并入数据集中
full['TickCom'] = full['Ticket'].map(TickCountDict)
# 查看TickCom与Survived的关系
sns.barplot(data=full, x='TickCom', y='Survived')

# 将TickCom分为三类
def TickCountGroup(num):
    if 2 <= num <= 4:
        return 0
    elif num == 1 or 5 <= num <= 8:
        return 1
    else:
        return 2

full['TickGroup'] = full['TickCom'].map(TickCountGroup)

# 查看TickGroup与Survived的关系
sns.barplot(data=full, x='TickGroup', y='Survived')

 

五.总结与鼓励

通过特征工程,我们构造了多个新的特征,并分析了它们与乘客生存率之间的关系。这些特征可以帮助提升机器学习模型的预测能力,从而更准确地预测乘客的生存情况。特征工程是一项重要且复杂的工作,它需要不断的尝试和调整,以便找到对模型最有帮助的特征。再坚持坚持,咱就要了解到模型啦!!!也许一下子接受很难,但可以将这一系列作为了解,了解整个数据科学竞赛和数据分析处理预测的整个过程,为以后系统学习相关知识打下基础,提前对整个流程有关全局了解,降维打击。加油加油!!!

六.最近更的不勤的原因

噗嗤,马上要开学了,所有要陪提前回校的好兄弟们疯狂几天哈哈哈!!!还要因为上学期没有好好学数据库,但又感觉数据库还是很有趣的知识,于是也在抽空自学,预告一下,后面应该会做数据库相关课程哈!

展示一下这段时间哈哈哈哈,吃吃吃,玩玩玩,逛逛逛......好好享受最好几天啦!开学好好学习啦!

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值