Kaggle案例泰坦尼克号问题

泰坦里克号预测生还人口问题

泰坦尼克号问题背景

- 就是那个大家都熟悉的『Jack and Rose』的故事,豪华游艇倒了,大家都惊恐逃生,可是救生艇的数量有限,无法人人都有,副船长发话了lady and kid first!,所以是否获救其实并非随机,而是基于一些背景有rank先后的。

- 训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况。

一.数据预处理

1.初探数据

import pandas as pd #数据分析
import numpy as np #科学计算
from pandas import Series,DataFrame
data_train = pd.read_csv("Train.csv")
data_train

训练集

测试集

我们看到,总共有12列,其中Survived字段表示的是该乘客是否获救,其余都是乘客的个人信息,包括:

  • PassengerId => 乘客ID
  • Pclass => 乘客等级(1/2/3等舱位)
  • Name => 乘客姓名
  • Sex => 性别
  • Age => 年龄
  • SibSp => 堂兄弟/妹个数
  • Parch => 父母与小孩个数
  • Ticket => 船票信息
  • Fare => 票价
  • Cabin => 客舱
  • Embarked => 登船港口

弄清楚数据集的数据条数和各列信息的完整性:

上面的数据告诉我们,训练数据中总共有891名乘客,但是很不幸,我们有些属性的数据不全,比如说:Age(年龄)属性只有714名乘客有记录Cabin(客舱)更是只有204名乘客是已知的

了解数据集各列的统计信息(针对数值型数据):

mean字段告诉我们,大概0.383838的人最后获救了,2/3等舱的人数比1等舱要多,平均乘客年龄大概是29.7岁(计算这个时候会略掉无记录的)等等…

import matplotlib.pyplot as plt
fig = plt.figure()

from pylab import mpl
mpl.rcParams[‘font.sans-serif‘] = [‘SimHei‘]   # 雅黑字体
mpl.rcParams[‘axes.unicode_minus‘] = False
fig.set(alpha=0.5)  # 设定图表颜色alpha参数
plt.subplot2grid((2,3),(0,0))             # 在一张大图里分列几个小图
data_train.Survived.value_counts().plot(kind=‘bar‘)# plots a bar graph of those who surived vs those who did not.
plt.title(u"获救情况 (1为获救)") # puts a title on our graph
plt.ylabel(u"人数")  

plt.subplot2grid((2,3),(0,1))
data_train.Pclass.value_counts().plot(kind="bar")
plt.ylabel(u"人数")
plt.title(u"乘客等级分布")

plt.subplot2grid((2,3),(0,2))
plt.scatter(data_train.Survived, data_train.Age)
plt.ylabel(u"年龄")                         # sets the y axis lable
plt.grid(b=True, which=‘major‘, axis=‘y‘) # formats the grid line style of our graphs
plt.title(u"按年龄看获救分布 (1为获救)")

plt.subplot2grid((2,3),(1,0), colspan=2)
data_train.Age[data_train.Pclass == 1].plot(kind=‘kde‘)   # plots a kernel desnsity estimate of the subset of the 1st class passanges‘s age
data_train.Age[data_train.Pclass == 2].plot(kind=‘kde‘)#(核密度估计)
data_train.Age[data_train.Pclass == 3].plot(kind=‘kde‘)
plt.xlabel(u"年龄")# plots an axis lable
plt.ylabel(u"密度")
plt.title(u"各等级的乘客年龄分布")
plt.legend((u‘头等舱‘, u‘2等舱‘,u‘3等舱‘),loc=‘best‘) # sets our legend for our graph.

plt.subplot2grid((2,3),(1,2))
data_train.Embarked.value_counts().plot(kind=‘bar‘)
plt.title(u"各登船口岸上船人数")
plt.ylabel(u"人数")
plt.show()

我们在图上可以看出来:被救的人300多点,不到半数;

3等舱乘客灰常多;遇难和获救的人年龄似乎跨度都很广;

3个不同的舱年龄总体趋势似乎也一致,2/3等舱乘客20岁多点的人最多,1等舱40岁左右的最多(→_→似乎符合财富和年龄的分配哈,咳咳,别理我,我瞎扯的);

登船港口人数按照S、C、Q递减,而且S远多于另外俩港口。

这个时候我们可能会有一些想法了:

不同舱位/乘客等级可能和财富/地位有关系,最后获救概率可能会不一样

年龄对获救概率也一定是有影响的,毕竟前面说了,副船长还说『小孩和女士先走』呢

和登船港口是不是有关系呢?也许登船港口不同,人的出身地位不同?

口说无凭,空想无益。老老实实再来统计统计,看看这些属性值的统计分布吧。

#看看各乘客等级的获救情况
fig = plt.figure()
fig.set(alpha=0.2)  #设定图表颜色alpha参数

Survived_0 = data_train.Pclass[data_train.Survived == 0].value_counts()
Survived_1 = data_train.Pclass[data_train.Survived == 1].value_counts()
df=pd.DataFrame({u‘获救‘:Survived_1, u‘未获救‘:Survived_0})
df.plot(kind=‘bar‘, stacked=True)#多分类累积柱状图 Stacked Bar
plt.title(u"各乘客等级的获救情况")
plt.xlabel(u"乘客等级")
plt.ylabel(u"人数") 

plt.show()

fig = plt.figure()
fig.set(alpha=0.5)

un_survived = data_train.Pclass[data_train.Survived == 0].value_counts()#未获救人的等级分布
# print(type(un_survived))#<class ‘pandas.core.series.Series‘>
survived = data_train.Pclass[data_train.Survived == 1].value_counts()#获救人的等级分布
df = pd.DataFrame({‘未获救‘:un_survived,‘获救‘:survived})
df.plot(kind = ‘bar‘,stacked = True)
plt.show()

明显等级为1的乘客,获救的概率高很多。恩,这个一定是影响最后获救结果的一个特征。

#看看各登录港口的获救情况
fig = plt.figure()
fig.set(alpha=0.2)  #设定图表颜色alpha参数

Survived_0 = data_train.Embarked[data_train.Survived == 0].value_counts()
Survived_1 = data_train.Embarked[data_train.Survived == 1].value_counts()
df=pd.DataFrame({u‘获救‘:Survived_1, u‘未获救‘:Survived_0})
df.plot(kind=‘bar‘, stacked=True)
plt.title(u"各登录港口乘客的获救情况")
plt.xlabel(u"登录港口")
plt.ylabel(u"人数")
plt.show()

# 看看各性别的获救情况
fig = plt.figure()
fig.set(alpha=0.2)  #设定图表颜色alpha参数

Survived_m = data_train.Survived[data_train.Sex == ‘male‘].value_counts()
Survived_f = data_train.Survived[data_train.Sex == ‘female‘].value_counts()
df=pd.DataFrame({u‘男性‘:Survived_m, u‘女性‘:Survived_f})
df.plot(kind=‘bar‘, stacked=True)
plt.title(u"按性别看获救情况")
plt.xlabel(u"性别")
plt.ylabel(u"人数")
plt.show()

#然后我们再来看看各种舱级别情况下各性别的获救情况
fig=plt.figure()
fig.set(alpha=0.65) # 设置图像透明度,无所谓
plt.title(u"根据舱等级和性别的获救情况")

ax1=fig.add_subplot(141)
data_train.Survived[data_train.Sex == ‘female‘][data_train.Pclass != 3].value_counts().plot(kind=‘bar‘, label="female highclass", color=‘#FA2479‘)
ax1.set_xticklabels([u"获救", u"未获救"], rotation=0)
ax1.legend([u"女性/高级舱"], loc=‘best‘)

ax2=fig.add_subplot(142, sharey=ax1)
data_train.Survived[data_train.Sex == ‘female‘][data_train.Pclass == 3].value_counts().plot(kind=‘bar‘, label=‘female, low class‘, color=‘pink‘)
ax2.set_xticklabels([u"未获救", u"获救"], rotation=0)
plt.legend([u"女性/低级舱"], loc=‘best‘)

ax3=fig.add_subplot(143, sharey=ax1)
data_train.Survived[data_train.Sex == ‘male‘][data_train.Pclass != 3].value_counts().plot(kind=‘bar‘, label=‘male, high class‘,color=‘lightblue‘)
ax3.set_xticklabels([u"未获救", u"获救"], rotation=0)
plt.legend([u"男性/高级舱"], loc=‘best‘)

ax4=fig.add_subplot(144, sharey=ax1)
data_train.Survived[data_train.Sex == ‘male‘][data_train.Pclass == 3].value_counts().plot(kind=‘bar‘, label=‘male low class‘, color=‘steelblue‘)
ax4.set_xticklabels([u"未获救", u"获救"], rotation=0)
plt.legend([u"男性/低级舱"], loc=‘best‘)

plt.show()

原文地址:https://www.cnblogs.com/nxf-rabbit75/p/9680878.html

时间: 2024-10-31 03:58:44

Kaggle案例泰坦尼克号问题的相关文章

Kaggle项目泰坦尼克号预测生存情况(上)-------数据预处理

假期闲着无聊,做了一下Kaggle练手的项目--预测泰坦尼克号乘客的存活情况.对于一些函数和算法,刚开始也是懵懵懂懂的,但通过自己查资料,还是明白了许多,我会把参考资料的网址放在需要查看的地方. ------------------------------------ 我们的整个流程如下: ①数据预处理:数据清洗.可视化.标签化 ②分割训练数据 ③随机森林分类器及其参数调节 数据预处理:数据清洗.可视化.标签化 首先,先导入需要的模块并读取数据 #导入包,读取数据 import numpy as

数据挖掘竞赛kaggle初战——泰坦尼克号生还预测

1.题目 这道题目的地址在https://www.kaggle.com/c/titanic,题目要求大致是给出一部分泰坦尼克号乘船人员的信息与最后生还情况,利用这些数据,使用机器学习的算法,来分析预测另一部分人员最后是否生还.题目练习的要点是语言和数据分析的基础内容(比如python.numpy.pandas等)以及二分类算法. 数据集包含3个文件:train.csv(训练数据).test.csv(测试数据).gender_submission.csv(最后提交结果的示例,告诉大家提交的文件长什

Kaggle案例(一)Titanic: Machine Learning from Disaste

1. 案例简介 Titanic 案例是Kaggle 入门案例,链接地址https://www.kaggle.com/c/titanic .以下是摘自官网上的描述信息: 2. 分析数据 2.1 读取数据 加载训练数据 data_train = pd.read_csv("./input/train.csv") 预览数据 data_train.head() 训练集数据说明: 查看数据集信息 data_train.info() 查看有缺失值的列 ata_train.columns[data_t

【第四课】kaggle案例分析四

Evernote Export body,td { font-family: 微软雅黑; font-size: 10pt } 比赛题目介绍 facebook想要准确的知道用户登录的地点,从而可以为用户提供更准确的服务 为了比赛,facebook创建了一个虚拟世界地图,地图面积为100km2,其中包含了超过1000000个地点 通过给定的坐标,以及坐标准确性,判断用户登录地点 训练集和测试集是根据时间划分的,而在公共排行榜和私人排行榜上的测试集数据是随机划分的 row_id 登录事件的id,作为标

《Python机器学习kaggle案例》-- 网易云课堂

https://study.163.com/course/courseMain.htm?courseId=1003551009 LinearRegression # -*- coding: utf-8 -*- """ Created on Sat Dec 1 09:24:27 2018 @author: zh """ import pandas as pd import numpy as np titanic = pd.read_csv('tra

泰坦尼克号问题

学习了机器学习这么久,第一次真正用机器学习中的方法解决一个实际问题,一步步探索,虽然最后结果不是很准确,仅仅达到了0.78647,但是真是收获很多,为了防止以后我的记忆虫上脑,我决定还是记录下来好了. 1,看到样本是,查看样本的分布和统计情况 #查看数据的统计信息print(data_train.info())#查看数据关于数值的统计信息print(data_train.describe()) 通常遇到缺值的情况,我们会有几种常见的处理方式 如果缺值的样本占总数比例极高,我们可能就直接舍弃了,作

Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛

Kaggle-So Easy!百行代码实现排名Top 5%的图像分类比赛 作者:七月在线彭老师说明:本文最初由彭老师授权翟惠良发布在公众号"七月在线实验室"上,现再由July重新编辑发布到本blog上.Github: https://github.com/pengpaiSH/Kaggle_NCFM 前言 根据我个人的经验,学好AI,有五个必修:数学.数据结构.Python数据分析.ML.DL,必修之外,有五个选修可供选择:NLP.CV.DM.量化.Spark,然后配套七月在线的这些必修

模型融合之blending和stacking

1. blending 需要得到各个模型结果集的权重,然后再线性组合. """Kaggle competition: Predicting a Biological Response. Blending {RandomForests, ExtraTrees, GradientBoosting} + stretching to [0,1]. The blending scheme is related to the idea Jose H. Solorzano presente

文本情感分析(一):基于词袋模型(VSM、LSA、n-gram)的文本表示

现在自然语言处理用深度学习做的比较多,我还没试过用传统的监督学习方法做分类器,比如SVM.Xgboost.随机森林,来训练模型.因此,用Kaggle上经典的电影评论情感分析题,来学习如何用传统机器学习方法解决分类问题. 通过这个情感分析的题目,我会整理做特征工程.参数调优和模型融合的方法,这一系列会有四篇文章.这篇文章整理文本特征工程的内容. 文本的特征工程主要包括数据清洗.特征构造.降维和特征选择等. 首先是数据清洗,比如去停用词.去非字母汉字的特殊字符.大写转小写.去掉html标签等. 然后