kaggle titannic 数据分析 top7%

2018.12.3 更新

 

 

 

一、问题背景:

此题是关于泰坦尼克号人员存活的预测问题,要求下载训练数据和测试数据,使用Python编程语言、pandas、matplotlib、机器学习等相关库,完成模型的建立、评价、优化,并使用测试数据进行预测。

二、数据概览

题中提供了两份数据,一是测试,一是训练集,数据包含乘客id,存活情况,等级,姓名,性别,年龄,兄妹数,父母数,船票,票价,仓位,登陆港口等信息。

 

 

 

先看看train-data数据情况:[891 rows x 12 columns]

 

     PassengerId  Survived  Pclass    ...         Fare        Cabin  Embarked

0              1         0       3    ...       7.2500          NaN         S

1              2         1       1    ...      71.2833          C85         C

2              3         1       3    ...       7.9250          NaN         S

3              4         1       1    ...      53.1000         C123         S

4              5         0       3    ...       8.0500          NaN         S

5              6         0       3    ...       8.4583          NaN         Q

6              7         0       1    ...      51.8625          E46         S

7              8         0       3    ...      21.0750          NaN         S

8              9         1       3    ...      11.1333          NaN         S

9             10         1       2    ...      30.0708          NaN         C

10            11         1       3    ...      16.7000           G6         S

11            12         1       1    ...      26.5500         C103         S

12            13         0       3    ...       8.0500          NaN         S

13            14         0       3    ...      31.2750          NaN         S

14            15         0       3    ...       7.8542          NaN         S

15            16         1       2    ...      16.0000          NaN         S

 

 

查看空值:

 

PassengerId      0

Survived         0

Pclass           0

Name             0

Sex              0

Age            177

SibSp            0

Parch            0

Ticket           0

Fare             0

Cabin          687

Embarked         2

dtype: int64

 

从显示数据中不难看出列Age ,Cabin, Embarked 中存在空值,其中Cabin,Age中空值较多,空值将在数据处理中得到处理

 

再看看test_data情况:[418 rows x 11 columns]

 

 

     PassengerId  Pclass   ...               Cabin Embarked

0            892       3   ...                 NaN        Q

1            893       3   ...                 NaN        S

2            894       2   ...                 NaN        Q

3            895       3   ...                 NaN        S

4            896       3   ...                 NaN        S

5            897       3   ...                 NaN        S

6            898       3   ...                 NaN        Q

7            899       2   ...                 NaN        S

8            900       3   ...                 NaN        C

9            901       3   ...                 NaN        S

10           902       3   ...                 NaN        S

11           903       1   ...                 NaN        S

12           904       1   ...                 B45        S

13           905       2   ...                 NaN        S

14           906       1   ...                 E31        S

15           907       2   ...                 NaN        C

16           908       2   ...                 NaN        Q

17           909       3   ...                 NaN        C

 

Test_data 空值:

 

PassengerId      0

Pclass           0

Name             0

Sex              0

Age             86

SibSp            0

Parch            0

Ticket           0

Fare             1

Cabin          327

Embarked         0

dtype: int64

 

Test数据集中列 Age,Cabin,Fare中含有空值,将在下一步进行处理。

三、数据处理

由于数据集中含有大量的空值,所以本次数据分析的数据处理主要是对空值的处理.

  1. train_data 补充空值
  1. Age 空值补充

对Age空值进行补充,我首先想到的是简单地用平均值进行填充,但仔细一想,船上人员年龄分布广泛,仅仅使用平均值补充,明显不够严谨,仔细观察数据之后发现在name一列数据中记录了人员称呼,可以根据称呼将人员进行分类,用同类人年龄的平均数进行空值补充,会比整体平均数合理许多。

 

不同称呼下,人员年龄均值:

col_0               Age

Title                  

Capt          70.000000

Col           58.000000

Don           40.000000

Dr            42.000000

Jonkheer      38.000000

Lady          48.000000

Major         48.500000

Master         4.574167

Miss          21.773973

Mlle          24.000000

Mme           24.000000

Mr            32.368090

Mrs           35.898148

Ms            28.000000

Rev           43.166667

Sir           49.000000

the Countes    33.000000

  1.  Cabin空值补充

 

由于Cabin缺失值超过整体的80%,故决定不对其进行进一步处理,仅将有Cabin数据的表示为1,无cabin数据的表示为0。

 

  1.  Embarked空值补充

 

登陆口岸数据确实较少,统计登陆口岸的众数,得知众数为S

故用S对空值进行填充

至此,train数据集中无空值!

 

  1. Test_data空值补充
  1. Age空值补充

 

与训练集空值补充相同

不同称呼下,人员年龄均值:

col_0         Age

Title            

Col     50.000000

Dona    39.000000

Dr      53.000000

Master   7.406471

Miss    21.774844

Mr      32.000000

Mrs     38.903226

Ms            NaN

Rev     35.500000

但可见Ms 年龄均值为Nan,是由于数据中Ms的年龄都为空,此处选则用训练集Ms下均值42,进行填充。

 

  1. Fare空值补充

 

空值仅有一个,使用均值进行填充

 

  1. Cabin空值补充

 

同训练集操作

 

 

至此,训练集,测试集都无空值,进行下一步,特征工程构建

构建特征工程:

 

  1. 分析不同特征值对存活的影响
  1. Sex

根据性别绘制存活条形图

 

途中可见女性存活率远大于男性,存活率与性别有着很大的关系。

 

  1. Pclass

根据仓位等级绘制生存率条形图

 

由图不难看出仓位等级与存活率成正比

  1. Age

根据年龄绘制关系图

 

仔细观察图片可以发现 青壮年的存活率还是相对较高,在逃生过程中,老人小孩不占优势

  1. Name

称呼与生存率也有一定关系,图中countess,Lady,mlle,Mme,Ms,Sir存活率较高。

 

  1. SilbSp

 

在没有兄弟姐妹的人存活率较低,有兄妹的人群生存死亡几率大致相等

  1. Parch

 

 

 

没有父母的人群死亡率较高。

结合两图看出,若独自一人,那么其存活率比较低;但是如果亲友太多的话,存活率也会很低。

  1. Fare

 

由上图可知,票价与是否生还有一定的相关性,生还者的平均票价要大于未生还者的平均票价。

  1. Cabin

含有仓位信息的成活率高于无仓位信息的,可作为特征值

 

  1. Embarked

 

 

 

由上可以看出,在不同的港口上船,生还率不同,C最高,Q次之,S最低。

以上为所给出的数据特征与生还与否的分析。

 

  1. 确定特征值

 

  1. 特征值处理

之前在补充年龄空值时添加了特征title,title下有:

['Capt' ,'Col' ,'Don' ,'Dr', 'Jonkheer' ,'Lady', 'Major', 'Master', 'Miss' ,'Mlle', 'Mme', 'Mr' ,'Mrs', 'Ms', 'Rev', 'Sir', 'the Countess'],

由于部分称呼下人数较少,故将以下部分:

['Capt' ,'Col' ,'Don' ,'Dr', 'Jonkheer' ,'Lady', 'Major', 'Master','Rev', 'Sir', 'the Countess']划分为Others

再将Parch和silbsp 合并为familysize 即家庭人数

新增特征值New_age

由于青壮年成活率较高,故将18-45岁的人设置为1,其余为0.

2.确定特征值

Features=['Age', 'Cabin', 'Child', 'Embarked=C', 'Embarked=Q', 'Embarked=S', 'Fare', 'Old', 'Pclass', 'Sex=female', 'Sex=male', 'Title=Miss', 'Title=Mr', 'Title=Mrs', 'Title=Others', 'fimalysize']

模型建立

  1. 选取模型

 

本次选择的是随机森林。

 

  1. 调参

 

 

最终建立的模型为:

 

 

训练

 

 

结果

交叉验证得分:

 

 

上传

 

最终成绩

 

模型改进:

  1. 数据使用不够充分,,没有将cabin ticket 充分利用,ticket中含有座位信息,靠窗或者靠经逃生通道的座位存活率会高些。
  2. 模型选择单一,在进行年龄空值补充的时候也只时简单的分类插值,如果能应用机器学习算法进行年龄预测,准确率会更高。

3.变量Age只是简单划分为青壮年其他,根据数据分布进行更精确的划分可能减小误差,改进预测结果。

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值