当前位置:   article > 正文

kaggle练习-泰坦尼克数据_kaggle赛题”泰坦尼克号“中的数据

kaggle赛题”泰坦尼克号“中的数据

数据分析项目小试牛刀——kaggle经典案例

过去的一学期中,上了一门叫做《非参数统计》的课程,老师的要求是用latex或者Rmarkdown写作业,编程语言必须用R。课程结束发现自己成绩还不错,回顾这一学期,每次的作业书写对我的帮助很大:将零零散散的知识框架和代码整理成册,是一种复习也是学习的好方法。kaggle的这个泰坦尼克号的案例在最开始接触python数据分析的时候就做过,现将代码思路整理处理,作为自己参加kaggle比赛的练习案例。其中也有参考过别人的做法,将其做了融合。

数据基本结构了解

进行数据分析前,首先要明确目的,然后拿到的数据集做大致的了解。

载入数据

1、数据集:
训练集:乘客ID(passengerID)、是否被救(Survivd)、船舱等级(Pclass)、Name(姓名)、性别(Sex)、年龄(Age)、兄弟姐妹和配偶数(SibSp)、父母和孩子数(Parch)、票号、船价(Fare)、客舱号码(Cabin)、登船港口(Embarked)
测试集: 缺少是否被救(Survived)一列。
2、载入数据集并查看数据规模

from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier 
from sklearn import cross_validation
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#读取数据
train=pd.read_csv('train.csv')
test=pd.read_csv('test.csv')
train.info()
test.info()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

从图中我们可以看到:年龄(Age)、cabin、embarked都有缺失值
从图中我们可以看到:年龄(Age)、cabin、embarked(只训练集)、Fare(只测试集)都有缺失值。

缺失值的处理

缺失值处理一般有以下几种方法:

  1. 对于缺失数据很多,并且不重要的性质,可以直接把某一列去掉;对于缺失数据相对于数据总体量比较小的情况,可以考虑直接把有缺失值的样本去掉。
  2. 缺失样本不多的,可以用众数补充,比如本项目中的Embark属性只有两个缺失值,我们就直接用其众数补充缺失值。
    missing_embarked=train.Embarked.dropna().mode().values train.Embarked=train.Embarked.fillna(str(missing_embarked))
  3. 对于缺失值比较多并且是定性的属性,可以附一个代表缺失值的数,因为缺失本身就包含着一些信息。比如本项目中的Cabin属性,缺失值较多,我们用m表示缺失数据,
    train.Cabin=train.Cabin.fillna('m')
  4. 回归预测:使用一些回归模型来预测缺失属性的值。因为Age在数据集里是一个相当重要的特征,缺失值也比较多,所以可以用已知数据去预测缺失的数据。在这里我们选择的模型是随机森林。
age_df=train[['Age','Survived','Fare','Parch','SibSp','Pclass']]
age_df_notnull=age_df.loc[(train.Age.notnull())]
age_df_isnull=age_df.loc[(train.Age.isnull())]
X=age_df_notnull.loc[:,['Survived','Fare','Parch','SibSp','Pclass']]
Y=age_df_notnull.loc[:,'Survived']
#使用随机森林预测
model1=RandomForestClassifier(n_estimators=1000, n_jobs=-1)
model1.fit(X,Y)
predict_age=model1.predict(age_df_isnull.loc[:,['Survived','Fare','Parch','SibSp','Pclass']])
train.loc[train['Age'].isnull(),'Age']=predict_age
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

缺失值填充后的数据集如下:train.info()
在这里插入图片描述

描述性统计分析

在这一部分,采用直观的图方式,大致了解一下相关属性与死亡之间的关系。

(1) 性别与是否生存的关系

我们按照性别将训练集分类,得到的结果如下:

group1=train['Survived'].groupby(train['Sex'])
group1.count()
group1.mean().plot.bar()
group1.mean().plot(kind='bar')
plt.title('Survived probabality of different sex')
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述在这里插入图片描述
female一共有314人,male一共有577人。在女性中的存活率是0.74,在男性中的是0.18889,所以在这一数据集中体现了“女士优先”的原则:女性的存活率远远高于男性。

(2)船舱等级与生存与否的关系(Pclass)

group2=train['Survived'].groupby(train['Pclass'])
group2.count()
group2.mean()
group2.mean().plot(kind='bar')
plt.title('Survived probabality of different Pclass')
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述在这里插入图片描述运行结果显示:在一等船舱共有216人,存活率为0.63;二等船舱共有184人,存活率为0.47;二等船舱共有491人,存活率为0.24;通过条形图也能够很清楚的看出:船舱等级越高(1>2>3),存活机率越高。
将性别和船舱等级综合来看:

group3=train.groupby(['Sex','Pclass'])['Survived']
group3.count()
group3.mean()
group3.mean().
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号