数据分析入门项目之 :Titanic: Machine Learning from Disaster

1.摘要:

本文详述了新手如何通过数据预览,探索式数据分析,缺失数据填补,删除关联特征以及派生新特征等数据处理方法,完成Kaggle的Titanic幸存预测要求的内容和目标。

2.背景介绍:

Titanic幸存预测是数据分析入门和机器学习入门经典的开源项目之一。它要求我们通过训练数据集分析出具有什么特征的人更可能幸存,并预测出测试数据集中的每一位乘客是否生还。
该项目是一个二元分类问题

3.数据处理完整流程:

3.1:加载数据

在加载数据前,把可能会用到的相关包全部加载。

#基本数据分析
import pandas as pd
import numpy as np
#可视化
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
#模型, 数据处理,模型融合 相关方法。
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
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
from xgboost import XGBClassifier
from sklearn.metrics import precision_score
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import GridSearchCV, cross_val_score, StratifiedKFold, learning_curve
import warnings
warnings.filterwarnings('ignore')

通过如下代码将训练数据和测试数据分别加载到名为train_df和test_df的data.frame中

train_df=pd.read_csv('titanic/train.csv')#训练集
test_df=pd.read_csv('titanic/test.csv')#测试集
#把训练数据和测试数据放一起进行数据处理
combine = pd.concat([train_df,test_df])

3.2 数据预览

先观察数据

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




把训练数据和测试数据放一起进行数据处理

combine = pd.concat([train_df,test_df])
combine.head()

PassengerId :标识乘客的ID
Survived:标识该乘客是否幸存。
Pclass:标识乘客的船舱等级
Name:除包含姓和名以外,还包含Mr. Mrs. Dr.这样的具有西方文化特点的信息
Sex:标识乘客性别
Age:标识乘客年龄,有缺失值
SibSp:代表兄弟姐妹及配偶的个数。
Parch:代表父母或子女的个数
Ticket:代表乘客的船票号
Fare:代表乘客的船票价
Cabin:代表乘客所在的舱位,有缺失值
Embarked 代表乘客登船口岸

在这个问题中:
一共有891个样本
Survived的标签是通过0或1来区分
大概38%的样本是survived
大多数乘客(>75%)没有与父母或是孩子一起旅行
大约30%的乘客有亲属和/或配偶一起登船
票价的差别非常大,少量的乘客(<1%)付了高达$512的费用
很少的乘客(<1%)年纪在64-80之间
上面3个表了解到,Age Cabin Fare Embarked 存在缺失值

3.31 乘客等级越高,幸存率越高

plt.figure(figsize=(12,4))
train_df.pivot_table(index='Pclass',
                 columns='Survived',
                 values='PassengerId',
                 aggfunc='count').plot.bar(stacked=True)

plt.title(u"根据舱等级的获救情况");


根据可视化结果发现:1等舱的人生存率超过了50%,2等舱,3等舱生存率递减。
将Pclass作为特征之一。这里我们把船舱位置离散化。

df=pd.get_dummies(combine['Pclass'],prefix='Pclass')
combine=pd.concat([combine,df],axis=1)

3.32 不同Title的乘客幸存率不同

乘客姓名重复度太低,不适合直接使用。而姓名中包含Mr. Mrs. Dr.等具有文化特征的信息,可将之抽取出来。
我们在丢弃Name与PassengerId这两个特征之前,希望从Name特征里提取出Titles的特征,并测试Titles与survival之间的关系。
在下面的代码中,我们通过正则提取了Title特征,正则表达式为(\w+.),它会在Name特征里匹配第一个以“.”号为结束的单词。

同时,指定expand=False的参数会返回一个DataFrame。

combine['Title'] = combine.Name.str.extract('([A-Za-z]+)\.', expand=False)
pd.crosstab(combine['Title'], combine['Sex'])

表中最多的四个称谓是MISS Mr Mrs Master

所以把所有的male全部称呼为Mr

但是女人分为Miss 和Mrs 两类,查阅资料,把剩下的称呼归到Miss或者Mrs里来。

Mme:称呼非英语民族的”上层社会”已婚妇女,及有职业的妇女

Lady:贵族夫人

the Countess:女伯爵

Ms:美国用来称呼婚姻状态不明的妇女

Mlle:小姐

Dona:家庭主妇

combine['Title'] = combine['Title'].replace(['Lady', 'Countess', 
'Dr','Mme', 'Dona'], 'Mrs')
combine['Title'] = combine['Title'].replace(['Don','Dona',
 'Major', 'Capt', 'Jonkheer', 'Rev', 'Col','Sir','Dr'],'Mr')
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值