• 泰坦尼克号乘客生存预测 中


    背景描述

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

    数据说明

    数据描述:

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

    数据来源

    Titanic Competition : How top LB got their score


    二 特征工程

    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

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


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

  • 相关阅读:
    如何在 Python 中运行无头浏览器?
    2022-12-04一周学习
    STM32外部Flash移植FATFS笔记
    HZOJ-271: 滑动窗口
    Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)
    ansible的安装和相关操作
    跨域的几种解决方案
    【论文阅读】YOLO-World | 开集目标检测
    Xcode自定义快捷键
    人工智能学习:NMIST数据分类识别-CNN网络(3)
  • 原文地址:https://blog.csdn.net/2401_84032998/article/details/138048070