泰坦尼克号(RMS Titanic),又译作铁达尼号,是英国白星航运公司下辖的一艘奥林匹克级邮轮,于1909年3月31日在爱尔兰贝尔法斯特港的哈兰德与沃尔夫造船厂动工建造,1911年5月31日下水,1912年4月2日完工试航。
泰坦尼克号是当时世界上体积最庞大、内部设施最豪华的客运轮船,有“永不沉没”的美誉。然而讽刺的是,在她的处女航中,泰坦尼克号便遭厄运——她从英国南安普敦出发,途经法国瑟堡-奥克特维尔以及爱尔兰昆士敦,驶向美国纽约,船上时间1912年4月14日23时40分左右,泰坦尼克号与一座冰山相撞,造成右舷船艏至船中部破裂,五座水密舱进水。次日凌晨2时20分左右,泰坦尼克船体断裂成两截后沉入大西洋底3700米处。2224名船员及乘客中,逾1500人丧生,其中仅333具罹难者遗体被寻回。泰坦尼克号沉没事故为和平时期死伤人数最惨重的海难之一,其残骸直至1985年才被再度发现。
“泰坦尼克号”共载运2207人,其中乘客1316人,船员891人。船难发生后,究竟有多少人葬身海底呢?各方面的统计不一。某些消息来源说是1635人,美国调查庭说是1517人,英国调查庭说时1490人,而英国贸易局则说是1503人,后者的数字似乎最为可信。
赛题的内容是:现在假设你是船上的一员,根据你的地位,登陆港口,性别等属性我们可以大致预测存活几率。
本篇分析的源码来自:
https://github.com/HanXiaoyang/Kaggle_Titanic/blob/master/Titanic.ipynb
我尽量用通俗的话来讲解作者的思路,和其中的算法知识。另外代码中的一些地方为了便于理解我做了部分改进,首先声明一下几点:
1.本文代码是在python的编辑器jupyter notebook上运行的,我们将用python做数据分析
2.运行代码除了python基本库之外还需要安装一些第三方python库:pandas,numpy,matplotlib,sklearn。我们通常使用pip命令安装它们,命令格式请自行百度。(pandas是常用的Python数据处理包,把csv文件读入成dataframe格式,numpy是一个用python实现的科学计算包,Matplotlib是一个 Python 的 2D绘图库,sklearn是机器学习中一个常用的python第三方模块,里面对一些常用的机器学习方法进行了封装,在进行机器学习任务时,并不需要每个人都实现所有的算法,只需要简单的调用sklearn里的模块就可以实现大多数机器学习任务。)
3.同时你需要去去竞赛官网或者刚才的源码网址中下载训练和测试数据,它们都是csv格式的,可以通过Excel打开。当然打开后密密麻麻的数据绝对让你无从下手,所以第一步要先用pandas导入数据。
图中代码用函数导入了csv文件数据,得到了dataframe格式的数据,最上面一行是乘客的各项属性
PassengerId: 乘客ID
Pclass : 乘客等级(1/2/3等舱位)
Name : 乘客姓名
Sex : 性别
Age : 年龄
SibSp :堂兄弟/妹个数
Parch :父母与小孩个数
Ticket :船票信息
Fare : 票价
Cabin :客舱
Embarked :登船港口
我们可以输入下面命令来提取有用信息:
由此可知,Age(年龄)有714人有记录,Cabin(客舱)有204人有记录,Embarked(登陆港口)有少量缺失。这些缺失数据会对后期处理造成很大影响,我们还可以用下面命令进行数据的总体统计:
从输出结果可以看出:乘客的平均年龄约为29.7,最大年龄为80.0,最小年龄为0.42。获救人数为总体的0.383838,等等。
进行完总体的初步分析,我们接下来进行数据相关性的分析,为了便于观察,我们利用图表展示。这就需要用到Matplotlib库进行画图代码如下:
结果如下:
我们可以从这五张图中形象的了解到乘客的信息,获救人数少于未获救人数(之前我们以得到此结论),三等乘客人数最多,获救人员各年龄段分布(第一列第三张图,左边竖列标签为0,右边竖列标签为1),S口岸上船的乘客最多。等等。
这时,我们就要尝试将乘客各属性与其是否获救联系起来:
获救情况和乘客等级是否有关?
获救情况和乘客性别、年龄是否有关?(毕竟我们都知道,妇女、小孩和老人优先搭乘救生艇)
登船口岸是否是获救因素呢?
1.看乘客等级的获救情况
明显可以看出等级越高的舱室获救率越高(一等舱最好),有时候钱可以买命啊,所以乘客等级与获救情况有关联。
2.各性别的获救情况
1代表获救,由此可以看出电影的经典台词ladyfirst是对的女性获救人数明显多于男性。
2.根据舱等级和性别的获救情况(第一、二等级为高级舱,第三等级为低级舱)
很明显高级舱女性的生还率高于低级舱,低级舱男性的死亡率高于高级舱。在四种情况中,高级舱女性的生还率最高,低级舱男性的死亡率最高。
将与获救情况相关联的两种属性结合后,所得到的结果可以更明显知晓他们的相关性。
在前面我们就已经知道Cabin(客舱)只有204个原因可能就是剩下的人是没有位置的(类似于今天的站票)我们可以先看看他们在乘客中的分布:
我们把没有cabin值的乘客设为无其余为有,看看他们的获救情况,
明显有Cabin记录的似乎获救概率稍高一些,但情况复杂,比如生还者上岸后进行信息统计的话,就会影响信息有无对获救情况的关系,这里我们就处理为有无两种情况吧。上面部分是对已有的数据借助python生成的图表进行简单的分析。
领取专属 10元无门槛券
私享最新 技术干货