Kaggle练习赛---Titanic的分析与整理

本文详细记录了Kaggle Titanic比赛的数据分析过程,包括数据获取、特征描述、数据清洗、特征工程和初步建模。通过探索发现,社会地位、性别、年龄、票价和出发地等因素对生存率有显著影响。文章还讨论了如何处理缺失值和无效特征,以及如何转换和组合特征以提高模型预测效果。
摘要由CSDN通过智能技术生成

前言

开始Kaggle练习,最先进行的当然是Kaggle的“Hello World”---“Titanic: Machine Learning from Disaster",即预测哪些泰坦尼克的旅客幸存。自己最开始写的很乱,包括数据处理、分析、建模等。参考了Kaggle的一篇[1]再整理一遍,清晰很多。实验并没有得到一个很好的结果,但是规范了整个流程,因此写下笔记 。

本文约6.2k字,预计阅读15分钟

主要流程

竞赛解决方案的流程主要分为以下7个步骤:

  1. 问题的定义;

  2. 获取训练集和测试集;

  3. 整理、准备、清洗数据;

  4. 分析、探索数据;

  5. 建模、预测和解决问题;

  6. 可视化、报告和呈现问题解决步骤和最终解决方案;

  7. 提交结果;

当然这个只是一般的步骤,3、4可以进行交叉交换,可视化也可以应用到多个阶段。

问题定义

泰坦尼克数据集的机器学习研究可以说是Kaggle的“Hello world”。问题的直观定义很简单:使用机器学习创建一个模型,预测哪些乘客在泰坦尼克号沉船中幸存。

其他的信息条件:

1912年4月15日,被广泛认为“永不沉没”的皇家邮轮“泰坦尼克号”在处女航中撞上一座冰山后沉没。不幸的是,船上没有足够的救生艇,导致2224名乘客和船员中有1502人死亡。(存活率为:32.46%)

虽然在生存中有一些运气因素,但似乎有些群体的人比其他人更有可能生存下来。

获取数据集

数据集的获取很简单,使用pandas包即可。

import pandas as pd

train_df = pd.read_csv('../input/titanic/train.csv')
test_df = pd.read_csv('../input/titanic/test.csv')

分析数据

数据的描述(即特征)

赛题中Data部分给出了数据特征,也可以通过pandas进行查看:

train_df.columns.values

Out:
  array(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype=object)

结合赛题描述,我们可以对上述特征进行归类:

  1. 分类特征:这里指的是可以对数据集按照该特征可以明确的划分为一系列相似的样本。上述属于分类特征的有:

  • Pclass(阶级)、Survived(是否存活)、Sex(性别)、Embarked(出发地);

  • 数值型特征:值会随着样本的变化而变化,可以是连续的、离散的或基于时间序列的,这里有:

    • Age(年龄)、Fare(票价)、SibSp(船上兄弟姐妹数量)、Parch(船上父母孩子数量)【注:后两者属于数值型特征是因为当不知道数据集时无法确定特征的取值范围,是随着样本而变化】

  • 其他特征:很难找到有效的的规律,这里还剩下:

    • Name(姓名)、Ticket(船票号)、Cabin(船舱号);

    具体数据

    在对训练集的首尾数据进行查看:

    train_df.head()
    
    train_df.tail()
    

    通过数据中的信息,可以进行得到以下结论:

    1. Name特征中,虽然是字符串类型,但包含了一些性别特征,如(Mr、Mrs、Miss);

    2. Ticket特征,包含了数字和字母的组合,我们很难从中找出一些规律;

    3. 我们发现,Cabin特征中存在缺失值,我们需要进一步进行判断,并查看其他特征是否也有缺失;

    4. Passengerld特征为序号,对模型建立应该并无影响;

    数据结构

    首先最为关键的是数据缺失问题,Pandas可以通过很多种方式进行判断每个特征是否存在缺失值。最简单的是直接查看数据集的全局信息。

    train_df.info()
    print('-' * 40)
    test_df.info()
    
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 891 entries, 0 to 890
    Data columns (total 12 columns):
     #   Column       Non-Null Count  Dtype  
    ---  ------       --------------  -----  
     0   PassengerId  891 non-null    int64  
     1   Survived     891 non-null    int64  
     2   Pclass       891 non-null    int64  
     3   Name         891 non-null    object 
     4   Sex          891 non-null    object 
     5   Age          714 non-null    float64
     6   SibSp        891 non-null    int64  
     7   Parch        891 non-null    int64  
     8   Ticket       891 non-null    object 
     9   Fare         891 non-null    float64
     10  Cabin        204 non-null    object 
     11  Embarked     889 non-null    object 
    dtypes: float64(2), int64(5), object(5)
    memory usage: 83.7+ KB
    ________________________________________
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 418 entries, 0 to 417
    Data columns (total 11 columns):
     #   Column       Non-Null Count  Dtype  
    ---  ------       --------------  -----  
     0   PassengerId  418 non-null    int64  
     1   Pclass       418 non-null    int64  
     2   Name         418 non-null    object 
     3   Sex          418 non-null    object 
     4   Age          332 non-null    float64
     5   SibSp        418 non-null    int64  
     6   Parch        418 non-null    int64  
     7   Ticket       418 non-null    object 
     8   Fare         417 non-null    float64
     9   Cabin        91 non-null     object 
     10  Embarked     418 non-null    object 
    dtypes: float64(2), int64(4), object(5)
    memory usage: 36.0+ KB
    

    通过上述数据集的信息我们可以分析:

    1. 数据集中有7个为数值型,5个为object类型;

    2. 训练集共891个样本,Age特征缺失177(即19.87%),Cabin特征缺失687(即77.10%),Embarked特征缺失2(即0.22%);

    3. 测试集共418个样本,Ag

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值