PowerBI分析Titanic数据

2017-08-03  本文已影响0人  痞圈圈

本文参照《Kaggle赛题解析:逻辑回归预测模型实现》,使用PowerBI替换原文用Python对Titanic数据集进行分析,故本文不包括模型、预测等内容。

Kaggle是一个数据分析建模的应用竞赛平台,有点类似KDD-CUP(国际知识发现和数据挖掘竞赛),企业或者研究者可以将问题背景、数据、期望指标等发布到Kaggle上,以竞赛的形式向广大的数据科学家征集解决方案。而热爱数(dong)据(shou)挖(zhe)掘(teng)的小伙伴们可以下载/分析数据,使用统计/机器学习/数据挖掘等知识,建立算法模型,得出结果并提交,排名top的可能会有奖金哦!

关于泰坦尼克号之灾

带大家去该问题页面溜达一圈吧

下面是问题背景页

泰坦尼克号问题之背景

就是那个大家都熟悉的『Jack and Rose』的故事,豪华游艇倒了,大家都惊恐逃生,可是救生艇的数量有限,无法人人都有,副船长发话了『lady and kid first!』,所以是否获救其实并非随机,而是基于一些背景有rank先后的。

训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况。

通过PowerBI工具认识数据。

加载分析数据

1、打开PowerBI客户端,点击获取数据

选择Excel文件类型

选择Titanic训练文件打开即可。

我们看到,总共有12列,其中Survived字段表示的是该乘客是否获救,其余都是乘客的个人信息,包括:

PassengerId => 乘客ID

Pclass => 乘客等级(1/2/3等舱位)

Name => 乘客姓名

Sex => 性别

Age => 年龄

SibSp => 堂兄弟/妹个数

Parch => 父母与小孩个数

Ticket => 船票信息

Fare => 票价

Cabin => 客舱

Embarked => 登船港口

分析数据

每个乘客都这么多属性,那我们咋知道哪些属性更有用,而又应该怎么用它们啊?仅仅最上面的对数据了解,依旧无法给我们提供想法和思路。我们再深入一点来看看我们的数据,看看每个/多个 属性和最后的Survived之间有着什么样的关系呢。

乘客各属性分布

看看属性和结果之间的关系

被救的人300多点,不到半数;3等舱乘客灰常多;遇难和获救的人年龄似乎跨度都很广;3个不同的舱年龄总体趋势似乎也一致,2/3等舱乘客20岁多点的人最多,1等舱40岁左右的最多(→_→似乎符合财富和年龄的分配哈,咳咳,别理我,我瞎扯的);登船港口人数按照S、C、Q递减,而且S远多于另外俩港口。

这个时候我们可能会有一些想法了:

不同舱位/乘客等级可能和财富/地位有关系,最后获救概率可能会不一样

年龄对获救概率也一定是有影响的,毕竟前面说了,副船长还说『小孩和女士先走』呢

和登船港口是不是有关系呢?也许登船港口不同,人的出身地位不同?

获救情况分析

口说无凭,空想无益。老老实实再来统计统计,看看这些属性值的统计分布吧。

啧啧,果然,钱和地位对舱位有影响,进而对获救的可能性也有影响啊←_←

咳咳,跑题了,我想说的是,明显等级为1的乘客,获救的概率高很多。恩,这个一定是影响最后获救结果的一个特征。

歪果盆友果然很尊重lady,lady first践行得不错。性别无疑也要作为重要特征加入最后的模型之中

恩,坚定了之前的判断。

我们看看各登船港口的获救情况。

下面我们来看看 堂兄弟/妹,孩子/父母有几人,对是否获救的影响。

好吧,没看出特别特别明显的规律(为自己的智商感到捉急…),先作为备选特征,放一放。

Cabin属性分析


上图来自weka分析

这三三两两的…如此不集中…我们猜一下,也许,前面的ABCDE是指的甲板位置、然后编号是房间号?…好吧,我瞎说的,别当真…

关键是Cabin这鬼属性,应该算作类目型的,本来缺失值就多,还如此不集中,注定是个棘手货…第一感觉,这玩意儿如果直接按照类目特征处理的话,太散了,估计每个因子化后的特征都拿不到什么权重。加上有那么多缺失值,要不我们先把Cabin缺失与否作为条件(虽然这部分信息缺失可能并非未登记,maybe只是丢失了而已,所以这样做未必妥当),先在有无Cabin信息这个粗粒度上看看Survived的情况好了。

简单数据预处理

数据预处理包括数据清理、数据集成、数据变换、数据归约四个环节,这四个环节并非完全独立,相互之间会有重叠。

大体数据的情况看了一遍,对感兴趣的属性也有个大概的了解了。

下一步干啥?咱们该处理处理这些数据,为机器学习建模做点准备了。

对了,我这里说的数据预处理,其实就包括了很多Kaggler津津乐道的feature engineering过程,灰常灰常有必要!

先从最突出的数据属性开始吧,对,Cabin和Age,有丢失数据实在是对下一步工作影响太大。

先说Cabin,暂时我们就按照刚才说的,按Cabin有无数据,将这个属性处理成Yes和No两种类型吧。这属于数据转换,通过Excel公式简单的做变换。

【通过Weka如何将数据集处理成两个字段,这还需要仔细研究一下】

再说Age:

通常遇到缺值的情况,我们会有几种常见的处理方式

如果缺值的样本占总数比例极高,我们可能就直接舍弃了,作为特征加入的话,可能反倒带入noise,影响最后的结果了。通过Weka可以看到Age属性的缺失比例为20%【缺失比例为什么值时算高?】

如果缺值的样本适中,而该属性非连续值特征属性(比如说类目属性),那就把NaN作为一个新类别,加到类别特征中。可以通过前文所说的weka.filters.unsupervised.attribute.ReplaceMissingWithUserConstant

如果缺值的样本适中,而该属性为连续值特征属性,有时候我们会考虑给定一个step(比如这里的age,我们可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把NaN作为一个type加到属性类目中。

Weka 离散化命令【weka.filters.unsupervised.attribute.Discretize -B 4 -M -1.0 -R 6】

缺失值以NaN填充:

有些情况下,缺失的值个数并不是特别多,那我们也可以试着根据已有的值,拟合一下数据,补充上。

本例中,后两种处理方式应该都是可行的,我们先试试拟合补全吧(虽然说没有特别多的背景可供我们拟合,这不一定是一个多么好的选择)

我们这里用scikit-learn中的RandomForest来拟合一下缺失的年龄数据(注:RandomForest是一个用在原始数据中做不同采样,建立多颗DecisionTree,再进行average等等来降低过拟合现象,提高结果的机器学习算法,我们之后会介绍到)

上一篇下一篇

猜你喜欢

热点阅读