kaggle Titanic 数据可视化

参考文章https://zhuanlan.zhihu.com/p/27550334

在20世纪初,由英国白星轮船公司耗资7500万英镑打造的当时世界上最大的豪华客轮“泰坦尼克”号,曾被称作为“永不沉没的船”和“梦幻之船”这艘豪轮在她的处女之航中,就因撞上冰山而在大西洋沉没。百年来,关于“泰坦尼克”号沉没的原因,一直是人们争论不休的话题。

究竟什么样的人获救几率更大一些呢?这就是本次kaggle的主题,预测每个人的生还几率。

首先在开始建模之前,最好对于数据做一个简单的了解。这会对于建模时候特征的选择有很大的帮助。

数据一共包括,乘客id,是否生还,姓名,性别,年龄,兄弟姐妹陪同的数量,父母陪同的数量,票号,船票的价格,仓位号,上船的码头位置,这些数据中有部分有缺失值,可以先看下哪些有缺失。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
train=pd.read_csv('C:/kaggle/Titanic/train.csv')
test=pd.read_csv('C:/kaggle/Titanic/test.csv')
print train.head(3)             #打印数据
print train.info()              #查看数据训练数据缺失情况和数据类型,其中age和cabin确实较严重
print train.describe()          #数据描述,包括数量,平均数,标准差,4分位数,中位数,3/4分位数,最大值

kaggle Titanic 数据可视化_第1张图片

年龄有714个数据,缺失200个,仓位号只有200多个,缺了700多个数据,那我们就应该考虑仓位号对于能否生还的影响大不大,如果不大的话应该把这个数据删掉,毕竟缺失太严重。

接下来考虑下变量间的相关系数,这些数据的相关系数如下

kaggle Titanic 数据可视化_第2张图片

kaggle Titanic 数据可视化_第3张图片

data=train[['Survived','Pclass','Age','SibSp','Parch','Fare','Sex']]
data=data.corr()
print data
sns.heatmap(data)
plt.title('train corr')
plt.show()                       #相关系数图

一。对于年龄的分析

上面那张图是去掉缺失数据的年龄分布,下面那张图是活着和死亡的人数分布,感觉每个年龄都是有人生存有人死亡。

kaggle Titanic 数据可视化_第4张图片

age=data['Age'].dropna(axis = 0)      #除去NaN值
plt.subplot(211)
sns.distplot(age)
plt.subplot(212)
sns.distplot(data[data.Survived==1].Age.dropna(axis=0),hist=False,color='r',label='live')
sns.distplot(data[data.Survived==0].Age.dropna(axis=0),hist=False,color='g',label='dead')
sns.plt.show()
plt.subplot(211)
sns.distplot(data[data.Sex=='male'].Age.dropna(axis=0),hist=False,color='r',label='male')
sns.distplot(data[data.Sex=='female'].Age.dropna(axis=0),hist=False,color='g',label='female')
sns.plt.show()

二。对于仓位等级的分析

class1就是一等舱,class2是二等舱,class3是三等舱,可以看出一等舱生存几率还是很高的,三等舱的话生存几率低很多。

kaggle Titanic 数据可视化_第5张图片

data=train[['Pclass','Survived']]
y_live=data[data.Survived==1].groupby('Pclass')['Survived'].count()
y_dead=data[data.Survived==0].groupby('Pclass')['Survived'].count()
pos=range(1,4)
defination=['class%d'%(i) for i in range(1,4)]
plt.bar(pos,y_live,label='live')
plt.bar(pos,y_dead,bottom=y_live,label='dead')
plt.legend()
plt.xticks(pos,defination)
plt.title('Pclass Surveved count')
plt.show()

三。对于性别的分析

这次换了个思路,死亡的人中男性占绝大比例,而生存的人中女性比例更高,所以其实和性别相关性挺强的。

kaggle Titanic 数据可视化_第6张图片

data=train[['Sex','Survived']]
y_male=[0,0]
y_female=[0,0]
for i in range(len(data.Sex)):
    if data.Sex[i]=='male':
        if data.Survived[i]==0:
            y_male[0]+=1
        else:
            y_male[1]+=1
    else:
        if data.Survived[i]==0:
            y_female[0]+=1
        else:
            y_female[1]+=1
x_number=range(1,3)
x_word=['dead','live']
plt.bar(x_number,y_male,label='male')
plt.bar(x_number,y_female,bottom=y_male,label='female')
plt.legend()
plt.xticks(x_number,x_word)
plt.show()

四。对于票价的分析

每个仓位的价格并不是一定的,这就好比是飞机票一样,同样是经济舱,可能价格也是千差万别。

首先来看一下所有人的价格分布,果然票价低的人还是占大部分。

kaggle Titanic 数据可视化_第7张图片

接下来看一下生存和死亡的人分别的价格分布情况,可以看出来,总价在300美元以上的人没有死亡的……所以其实有钱人还是生存几率高很多的……

kaggle Titanic 数据可视化_第8张图片

data=train[['Fare','Survived']]
sns.distplot(data.Fare,hist=False)
plt.title('Fare distribution')
plt.show()
sns.distplot(data[data.Survived==1].Fare,hist=False,label='Survived')
sns.distplot(data[data.Survived==0].Fare,hist=False,label='Dead')
plt.title('Fare and Survived distribution')
plt.show()

五。对于兄弟姐妹和父母子女的陪同数量的分析

对于整体数据进行分析,发现大部分人其实都没有兄弟姐妹和父母子女陪同,看来大家都喜欢独立出行啊

kaggle Titanic 数据可视化_第9张图片

对于兄弟姐妹的生存死亡数量进行分析,兄弟姐妹太多可能会致死,太少也会致死,有一个兄弟姐妹的生还几率稍大些。

kaggle Titanic 数据可视化_第10张图片

对于父母子女的生存死亡数量进行分析,得到差不多同样的结论,父母子女太多可能会致死,太少也会致死,有一个父母子女生还几率稍大些。

kaggle Titanic 数据可视化_第11张图片

data=train[['SibSp','Parch','Survived']]
plt.subplot(211)
sns.countplot(train.SibSp)
plt.subplot(212)
sns.countplot(train.Parch)
plt.suptitle('SibSp and Parch distribution')
plt.show()
plt.subplot(211)
sns.countplot(train[train.Survived==1].SibSp)
plt.xlabel('live')
plt.subplot(212)
sns.countplot(train[train.Survived==0].SibSp)
plt.xlabel('dead')
plt.suptitle('SibSp live and dead')
plt.show()
plt.subplot(211)
sns.countplot(train[train.Survived==1].Parch)
plt.xlabel('live')
plt.subplot(212)
sns.countplot(train[train.Survived==0].Parch)
plt.xlabel('dead')
plt.suptitle('Parch live and dead')
plt.show()

六。对于上船地点的分析

C地的人生存几率更大,S地的人生存几率更小。

kaggle Titanic 数据可视化_第12张图片

data=train[['Embarked','Survived']]
y_dead=[0,0,0]
y_live=[0,0,0]
pos=[1,2,3]
for i in range(len(data)):
    if data.Survived[i]==1:
        if data.Embarked[i]=='C':
            y_live[0]+=1
        elif data.Embarked[i]=='Q':
            y_live[1]+=1
        else:
            y_live[2]+=1
    else:
        if data.Embarked[i]=='C':
            y_dead[0]+=1
        elif data.Embarked[i]=='Q':
            y_dead[1]+=1
        else:
            y_dead[2]+=1
plt.bar(pos,y_live,label='live')
plt.bar(pos,y_dead,bottom=y_live,label='dead')
defination=['C','Q','S']
plt.xticks(pos,defination)
plt.legend()
plt.title('Embarked and Survived')
plt.show()

七。对于船仓位号的分析

船仓位号为空时死亡几率更大,而有船仓位号时死亡生存几率更大。

kaggle Titanic 数据可视化_第13张图片

八。还有姓名和船票号没有分析,但是感觉没有什么太大的用处。

下一步就要开始建立模型啦~

你可能感兴趣的:(python学习)