这是一个很经典的案例,很多博主都写过,对,就是它:泰坦尼克号生存率的分析,它是kaggle上的一道题,通过船上乘客的信息分析和建模,预测哪些乘客得以生还。 我们就非常粗暴地拿这个数据集做一个简单的分析好了。 使用工具:Excel 数据源的获取可后台回复:泰坦尼克 一、明确目的1912年泰坦尼克号撞上冰山沉没,船上2224名乘客和机组人员中有1502人遇难,幸存下来的人是出于运气还是存在一定的规律?这是我们比较关心的,所以就要提出问题:
其次了解数据,数据集总共有以下的字段,其中name、sex、cabin、embarked、ticket是字符串类型,pclass和survived虽然是数值型,但其含义是标签,我们分别从舱位、乘客、船票和地域的维度出发来分析。 二、数据处理通过查看,发现Age、fare、embarked、cabin字段都是有缺失的,下面我们一个一个来看。 1、age缺失值处理筛选age一列为空的有263条数据,缺失率为20%,可以全部填充为年龄的均值或众数,也可以进一步地分析,发现年龄缺失的数据里三等舱的最多,占总缺失值的79%,而三等舱里的未生还的男性占比最多,因此也可以用三等舱年龄的平均值来填充。 这里为了保持数据的真实性,就不做填充处理了。 2、fare缺失值处理筛选发现fare(票价)只缺失了一个值,我们把它找出来,发现可以用同类型的均值填充掉。 因此我们筛选三等舱、年龄大于60岁的,登船港口为S的男性的均值票价7来填充这个缺失值。 3、embarked缺失值处理embarked登船港口字段也有2个缺失值,筛选出来看下。 进一步观察到,这两个旅客都是单独出行,没有家人(从sibsp和parch列均为0得知),延续对fare缺失值处理的思路,寻找同类型的进行填充。对第一个旅客,筛选出头等舱的年龄在35~40岁的女性中,港口最多的值填充进去,结果是S。 同样的方法,对第二个旅客,筛选头等舱年龄在60~65岁的女性中,登陆港口最多的值,结果也为S。 4、cabin缺失值处理对于cabin(客舱)字段缺失值达到了77%,缺失太多了,就不做填充处理了,直接保留或删除,这里先保留着吧。 三、数据分析1、舱位维度pclass 生还的人里,头等舱的占比达到了40%。 对每个舱位的生存死亡情况做百分比堆积柱形图,可以看到,头等舱生还的人数占比最多,达到61.92%,三等舱的生还人数占比最少,仅25.33%,所以还是那句老话,钱虽然不是万能的,但没钱@#%&^… carbin 但是也发现了有1个客舱对应2个人以上的情况,进一步地把舱位拉进去对比一下,发现三等舱的数值很少,说明carbin缺失值大部分是三等舱缺失的,意思是三等舱的人没有客舱?大通铺?这个有待进一步查证。 另外发现三等舱有客舱的都是E/F/G开头的客舱号,而头等舱A/B/C就较多,猜测客舱号是随着舱位的降低按字母升序排列的。 2、乘客维度name sex 生还的人中女性占比67.8%,远高于男性的32.2%。 女性生还人数占女性总数的72.75%,远远大于男性生还人数占男性总数的19.10%。 性别&舱位 但是呢,头等舱女性的生还比例为97%,远高于其他两个舱位,且三等舱女性的生还比例只有49%。 age 首先对年龄做一个简单的描述统计,用【数据分析】里的【描述统计】功能,可以看到年龄最大值为80岁,最小值为0.17岁,平均值为29.88岁,年龄中位数为28岁,众数为24岁。 进一步地,可以观察一下年龄的分布情况,做直方图,5岁为一组,可以看到,乘客的年龄主要集中在15-30岁,其中20-25岁的年轻人最多。 了解了年龄大致的分布后,就要来看特定人群的生还情况了,我们将年龄分为:
先做一个分组的表,用vlookup的模糊匹配实现分组 在age旁新建一列age分组的辅助列,输入公式 =VLOOKUP(E2,Sheet2!$B$18:$C$21,2,1) Sheet2!18:21这个区域就是上图预先设置好的分组区域。 再对age分组和survived进行透视 可以看到生还的人中青年、少年的占比最多,老年占比最少。 对各年龄段分组的死亡、生存情况做百分比堆积柱形图,得到结果,少年获救的人数比例最高。 sibsp 同样因为基数大的缘故,生存下来的人中,亲戚数为0的占比最多达到了61.8%。 对各标签做百分比堆积柱形图,这才是比较有意义的结果,可以看到,有1个亲戚数的人群获救的比例最高。 parch 做百分比堆积柱形图,可以看到有3个父母/小孩的人群获救的比例最大,达到了62.5%。 3、船票维度fare 还记得上面我们用vlookup的模糊匹配分组,还可以直接用数据透视表分组。透视以后组合,选择50步长一组,可以再对票价和舱位透视看看,看到100以上的高票价全都是头等舱,二等舱和三等舱的票价大部分为0~50。 性别&票价 性别&舱位&票价 都写到这儿了,可以再引申出一个问题,票价到底和什么有关?性别?登陆港口?舱位?客舱?有兴趣的小伙伴可以自己再深入探讨一下,这里我们就不探索下去了。 接下来,50一组看一下fare的分布情况,可以看到票价为0~50的占了船上乘客的82%。 同时存活数量最多的还是0~50票价的人群,因为它的基数本身就很大。 从各票价分组的角度来看,做百分比堆积柱形图,可以看到,500-550票价的人群存活比例为100%,而0-50票价的存活比例只有32%。 ticket 4、地域维度embarked 四、生还率同什么有关生还率同什么相关?这个是我们最关心的,这个问题其实就是survived字段同其他字段的相关系数。 sex列是字符型数据,要映射成数值,我们添加一列命名为性别的辅助列,male为1,female为0. 再添加一列f_num字段,是sibsp和parch的和,意思是家庭成员数。 embarked字段分解为3个辅助列,港口-S,港口-C,港口-Q,同时输入公式: =IF(N2="S",1,0) 如果embarked这个字段是S,那么港口-S列为1,港口-C、港口-Q为0,以此类推。 同理对舱位pclass也做同样的处理 用【数据分析】里的【相关系数】功能,可以看到每个字段的相关系数 降序排列一下,就可以看出生还率同什么相关了 所以回到我们最初的问题:
总结一下:
|
|