Kaggle上面有一个经典的入门题目,泰坦尼克号乘客的生存预测。此文针对这个题目,演示数据挖掘的一些基本方法。
题目描述
灾难发生的时候,由于救生艇有限,所以2224位乘客中只有722位获救。虽然有运气成分,但是某些群体的人获救的概率更大,比如女士,小孩等。题目要求研究哪类人群更容易获救,并且对乘客是否获救做出预测。
数据预处理
数据不可能是完美的,在分析之前,我们需要进行一些预处理。
总共有两份数据,分别是是训练集train.csv和测试集test.csv。
首先导入数据,看一下数据的结构。
训练集
测试集
可以看到,总共有11个属性字段,和一个预测字段Survived。
11个属性字段和对应的意义如下:
PassengerId => 乘客ID
Pclass => 舱位等级
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱编号
Embarked => 登船港口
根据常识推断,乘客ID,乘客姓名,船票信息没有太大作用,所以不加考虑,直接删掉。
所以还剩下8个字段。我们再来看下这8个字段的基本信息。
Survived 891 non-null int64
Pclass 891 non-null int64
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
发现Cabin(客舱编号)属性只有204个值,剩下的大量是空值,所以此字段意义有限,也删掉。
另外,SibSp(堂兄弟/妹个数)和Parch(父母与小孩个数)这两个字段,意义非常相近,都可以看作是亲属。我们可以添加一个新字段Family,代表是否有亲属。SibSp和Parch属性删掉。
之所以不用亲属个数作为属性值,是因为1个亲属和6个亲属差别可能没有那么大,所以直接使用是否有亲属,误差可能会小一些。
单属性分析
现在只剩6个属性了。下面我们要对这6个属性分别进行分析。
这六个属性为
Pclass => 舱位等级
Sex => 性别
Age => 年龄
Family => 是否有亲属
Ticket => 船票信息
Fare => 票价
Embarked => 登船港口
客舱等级
可以猜测,舱位等级高的,条件好一些,生存概率应该高一些。我们看下是否如此。
从图上可以看到,1级客舱的获救概率明显更大,3级客舱获救的概率很小,说明舱位等级是有影响的。
性别
再次猜测,由于女士优先,女性的生还概率更高。看下具体分析。
可以看到,女性的获救比例远大于男性。证明了确实有“女士优先”的情况存在。
年龄
再来看一下年龄。年龄和前面的属性不一样,有很多年龄,不能用条形图,需要用直方图。也就是绘制每个年龄区间的数量。
可以看到,获救概率呈现两边高,中间低的态势,说明小孩和年纪较大的人受到照顾,更容易获救。