小白的机器学习之路(1)---Kaggle竞赛:泰坦尼克之灾(Titanic Machine Learning from Disaster)

前言

本文以kaggle竞赛中经典的入门案例–泰坦尼克之灾(Titanic Machine Learning from Disaster )为例,直接上手实战。
推荐一篇路易斯安那州立大学的作业报告,其文中对数据特征的分析归纳还是挺有参考价值的。

数据导入

第一步当然是要先获取到我们需要的数据啦,网址如下:
kaggle网址
进入页面后将下图中的training set和test set两个csv文件保存到本地工程文件夹内。
在这里插入图片描述
本文代码的运行环境是Anaconda 的 jupyter notebook。个人感觉其无论是下载、管理各类三方库还是做笔记都十分方便好用,强烈推荐!

首先导入数据分析常用的库。

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt
import seaborn as sns

还需要以下代码在notebook中显示图像以及在图表中做到正常的中文显示。

#图像显示
%matplotlib inline
#中文显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#图像尺寸大小
plt.rcParams['figure.figsize'] = (15,8)

导入数据集

data_train = pd.read_csv('D:/WDforJupyter/titanic/train.csv')
data_test = pd.read_csv('D:/WDforJupyter/titanic/test.csv')

下面看一下我们的训练集数据:
在这里插入图片描述
也可以使用head(n)来只显示训练集的前n行数据:
在这里插入图片描述
我们可以初步了解到可供挖掘分析的数据属性有:

  1. PassengerId(乘客id,目测没啥用)
  2. Survived (是否存活,本案例中需要预测的对象)
  3. Pclass (船票等级,可能会影响到结果)
  4. Name (姓名,有深入挖掘的潜力)
  5. Sex (性别,应该女士优先)
  6. Age (年龄,老幼存活概率应该较大)
  7. SibSp (船上兄弟姐妹以及配偶的数目,可能会有用)
  8. Parch (船上父母以及子女的数目,或许有影响)
  9. Ticket (票号,可能没用)
  10. Fare (票价,可能有关)
  11. Cabin (船舱编号,或许有影响)
  12. Embarked (登船的港口,应该和结果关系不大)

接着看一下数据的概况:
在这里插入图片描述
如上,可以看到一共有891位乘客,部分数据特征有缺损。其中年龄这项有714个条目,而客舱这项更是只有204条记录。这些缺失项肯定会需要一些手段来处理补足,目前暂时不表。
在这里插入图片描述
上表可以看到特征数据更详细的一些信息。其中值得关注的是年龄与票价这两项的标准差较大,分别达到了14.5264与49.69。针对这样分布范围比较广、波动较大的数据,可以像吴恩达老师建议的那样做归一化(Normalization)处理。

可视化分析

Pclass

首先来看一下乘客的船舱等级会不会影响到获救的概率。

plt.subplot2grid((2,1),(0,0))
data_train.Pclass.value_counts().plot(kind='bar')
plt.xticks(rotation=0)
plt.ylabel('乘客数',{
   'size':15}) 
plt.xlabel('船舱等级',{
   'size':15})
plt.subplot2grid((2,1),(1,0))
sns.barplot(x='Pclass', y='Survived', data=data_train,order=[3,1,2],ci=0)
plt.ylabel('存活率',{
   'size':15}) 
plt.xlabel('船舱等级',{
   'size':15})

在这里插入图片描述咳咳,貌似一二等舱的乘客的获救概率确实高了不少。

Sex

盲猜女性获救比例更高一些。

plt.subplot2grid((2,1),(0,0))
data_train.Sex.value_counts().plot(kind='bar')
plt.xticks(rotation=0)
plt.ylabel('乘客数',{
   'size':15}) 
plt.xlabel('性别',{
   'size':15})
plt.subplot2grid((2,1),(1,0))
sns.barplot(x='Sex', y='Survived', data=data_train,ci=0)
plt.ylabel('存活率',{
   'size':15}) 
plt.xlabel('性别',{
   'size':15})

在这里插入图片描述可以看到性别因素对生还率有着极为显著的影响。都说在直面生死存亡的关头才能看出一个人的品性。。。这里不得不赞一句:泰坦尼克号上的男同胞们太man了啊!!!

Age

下面一起来看看对老幼的保护怎么样

data_train.Age[data_train.Survived==1].plot(kind='kde')
data_train.Age[data_train.Survived==0].plot(kind='kde')
plt.legend(['Survived==1','Survived==0'])
plt.xlim((0,80))
plt.ylabel('密度',{
   'size':15}) 
plt.xlabel('年龄',{
   'size':15})

在这里插入图片描述
年龄在15岁以下的乘客其生还的密度曲线还是远高于不幸的密度曲线的,但是长者的获救概率似乎就没有这么高了。可能他们自愿将生存的机会留给了下一代;也可能其本身较差的体质加上受到的关注没有孩童来的多导致总体获救概率与青壮一带堪堪齐平;当然一定还有其他没考虑进来的因素导致了这个现象,后续我们可以再深入挖掘。

SibSp

Sibling and Spouses(我为什么要用s?) 属性代表该名乘客有多少兄弟姐妹以及配偶一同登上了这艘不幸的邮轮。理论上来说人多力量大,多几个同行的人互相照应可以在灾难中提升生还几率,下面来看一下到底是不是这样。

plt.subplot2grid((2,1),(0,0))
data_train.SibSp.value_counts().plot(kind='bar')
plt.xticks(rota
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值