kaggle入门之泰坦尼克幸存预测

kaggle入门之泰坦尼克幸存预测

#

数据集什么的就不介绍了,官网上都有

主要的工作步骤

1.提出和定义问题
2.获取训练和测试数据
3.获取,准备和清洗数据
4.分析,识别,探究数据
5.建模,预测并解决wenti
6.可视化,报告和解决
7.应用和提交结果

数据分析和整理

#数据分析整理
# data analysis and wrangling
import pandas as pd
import numpy as np
import random as rnd

#可视化
# visualization
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

#导入机器学习模型
# machine learning
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC, LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.tree import DecisionTreeClassifier

导入数据

python的pandas包帮助我们处理数据,我们将训练集合测试集导入成pandas的数据形式,联结在一块。

train_df = pd.read_csv('../input/train.csv')
test_df = pd.read_csv('../input/test.csv')
combine = [train_df, test_df]

通过描述数据进行分析

下面的操作都是利用pandas处理的

数据集中有哪些特征是我们可以利用的

首先打印第一列的名称,也就是各个特征的名称

print(train_df.columns.values)

输出

['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch'
 'Ticket' 'Fare' 'Cabin' 'Embarked']

这些特征的具体定义和数据类型范围参考这个网页
https://www.kaggle.com/c/titanic/data

哪些特征可以帮助分类

这些特征可以将样本分为很多类。是基于特征的比例还是具体值还是什么分类呢?我们将一些东西可视化用来研究

可以分类的特征有::Survived, Sex, and Embarked 序号特征: SibSp, Parch

首先我们看看训练数据是什么样子

# preview the data
train_df.head()

输出
img1

哪个特征是混合数据类型?

Ticket是字母和数字的组合,Cabin是数字字母

哪些特征包含错误或者错别字?
我们很难一一查看所有的数据集,但是看一部分数据集会帮助我们确定哪些数据可能有问题。

Name feature很有可能是由问题的

train_df.tail()

img2

哪些特征有空值?
这些空值需要被修正
Cabin > Age > Embarked features 在训练集中包含空值,按空值多少排序
Cabin > Age a包含空值,在测试集中

特征都是什么数据类型?
这帮助我们实现目标
7个特征是浮点数或者整数,测试集里面有65个
5个特征是string类型

查看训练集合测试集信息

train_df.info()
print('_'*40)
test_df.info()

输出

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB
________________________________________
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 418 entries, 0 to 417
Data columns (total 11 columns):
PassengerId    418 non-null int64
Pclass         418 non-null int64
Name           418 non-null object
Sex            418 non-null object
Age            332 non-null float64
SibSp          418 non-null int64
Parch          418 non-null int64
Ticket         418 non-null object
Fare           417 non-null float64
Cabin          91 non-null object
Embarked       418 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 36.0+ KB

样本中特征值的分布是什么样子?
这些帮组我们了解更多信息
1.训练集有891个样本,是总乘客数的40%
2.是否存活是一个可分类特征,0死亡,1存活
3.38%的样本存活
4.大多数乘客没有和父母或者孩子一起旅行
5.乘客的花费差别很大,小于1%的乘客花费512美金以上
6.很少有在65-80之间的乘客很少(1%)

train_df.describe()
# Review survived rate using `percentiles=[.61, .62]` knowing our problem description mentions 38% survival rate.
# Review Parch distribution using `percentiles=[.75, .8]`
# SibSp distribution `[.68, .69]`
# Age and Fare `[.1, .2, .3, .4, .5, .6, .7, .8, .9, .99]`

img3

可分类的数据类型的分布?
1.名称在数据集中是唯一的()
2.性别65%的男性
3.船舱有的乘客有重复值,可能有乘客共用一个船舱
4.Embarked 有三个可能的值,s port是最多的
5.Ticket feature

train_df.describe(include=['O'])

输出结果
img4

基于数据分析的假设?
我们基于数据分析得出了一下假设,我们需要进一步验证在采取下一步行动之前。

补全:
1.我们想要补全年龄因为这和是否存活是最相关的
2.补全Embarked

纠错:
1.票价在我们的分析中被舍弃,有太多重复项,并且看起来和是否存活没什么关系
2.Cabin feature 会被舍弃,有太多空值
3.乘客ID和是否存活没关系,我们舍弃
4.乘客名字也舍弃

分类:
根据之前信息完善假设
1.女人更容易存活
2.孩子更容易存活
3.高等仓更容易存活

通过特征分析

为了验证我们的猜想,我们可以快速分析通过分析他们的关系。我们为没有任何空值的特征进行这个操作,所以我们分析sex,Pclass,sibsp这几个特征
Pclass:我们观察到Pclsaa =1和是否存活相关性大于1,所以我们在模型中加入这个特征
Sex:女性有高达74%的生存率
SibSp and Parch:

train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)

img5

train_df[["Sex", "Survived"]].groupby(['Sex'], as_index=False).mean().sort_values(by='Survived', ascending=False)

img6

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值