码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 泰坦尼克号乘客生存预测 中


    背景描述

    泰坦尼克号轮船的沉没是历史上最为人熟知的海难事件之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会,从而促进了船舶安全规定的完善。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。

    数据说明

    数据描述:

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

    数据来源

    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. 保存特征处理后的数据

    二 特征工程

    1. 合并训练集与测试集

    import pandas as pd
    
    train = 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 缺失值处理

    2.1 填充Embarked字段

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

    在这里插入图片描述

    2.2 填充船票Fare字段

    train_and_test['Fare'].mean()
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

    2.3 填充年龄Age字段

    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()
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    3.2 票价分级处理

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.3 名字处理

    提取称呼

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

    在这里插入图片描述

    将各式称呼进行统一化处理
    头衔映射表

    在这里插入图片描述

    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()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    提取长度特征

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

    在这里插入图片描述

    3.4 Cabin处理

    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']
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    3.5 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']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

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

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

    在这里插入图片描述

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

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

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


    更多详细内容可看
    在这里插入图片描述

  • 相关阅读:
    算力调度和云计算有何区别
    首发Yolov8优化:Adam该换了!斯坦福最新Sophia优化器,比Adam快2倍 | 2023.5月斯坦福最新成果
    Toronto Research Chemicals BTK甜味剂配方丨D-Abequose
    ifort + mkl + impi (全套intel)编译安装量子化学软件GAMESS 2022 R1版本
    技术管理者的管理框架
    外卖项目02---员工管理业务开发
    让你的博客实现负载均衡
    怎么把Epub转换成PDF格式?分享两种简单好用的转换方法
    visual-studio-code通过跳板机连接远程服务器的配置操作
    Unity直接调用java代码(不打jar包)
  • 原文地址:https://blog.csdn.net/2401_84032998/article/details/138048070
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号