通过泰坦尼克号生存项目来熟悉机器学习的整个流程,数据来源是kaggle上的titanic数据。该项目从数据获取->数据清洗->特征处理->构建模型->模型评估5个步骤进行分析。
该比赛提供了891名泰坦尼克号的乘客数据,包含乘客的姓名,性别、年龄、客舱等级等信息,数据中还包含一个最重要的信息:乘客是否生还(1:生还,0:遇难)。目的是通过对训练数据集的学习来构建一个分类预测模型,对测试数据集中的418名乘客生存情况进行预测。
数据来源链接:https://www.kaggle.com/c/titanic/data
- train.csv 用于训练,标记了乘客是否生还的信息
- test.csv 用于测试,没有标记乘客是否生还信息,该数据集需要用模型来预测乘客是否生还
数据导入:
导入我们的训练数据和测试数据
# 导入包:
import pandas as pd
import numpy as np
# 读取数据:
train_data = pd.read_csv("/Desktop/泰坦尼克号/train.csv")
test_data = pd.read_csv("/Desktop/泰坦尼克号/test.csv")
# 查看前5行
train_data.head()
数据字段的含义:
数据集中有12 个字段,每一个字段的名称和含义如下
- PassengerId:乘客 ID
- Survived:是否生存
- Pclass:客舱等级
- Name:乘客姓名
- Sex:性别
- Age:年龄
- SibSp:在船兄弟姐妹数/配偶数
- Parch:在船父母数/子女数
- Ticket:船票编号
- Fare:船票价格
- Cabin:客舱号
- Embarked:登船港口
查看数据基本信息:
# 查看数据基本信息
train_data.info()
从上面info()中我们可以看出,Age, Cabin, Embarked这三个变量有缺失值。
删除一些无效的数据列:
有些变量在模型中是没有意义的,所以我们可直接在train_data中删除一些没有意义的变量,通过drop()方法来删除:PassengerId,Name,Ticket
# 删除无效的数据变量
train_data=train_data.drop(['PassengerId','Name','Ticket'],axis=1)
train_data.head()
单变量分析:
单变量数据就是每次只对1个变量进行分析,相对的,多变量数据就是同时对多个变量之间的相关性进行分析。单变量数据分析主要目的是对单个变量的数据分布进行查看,方便后期的数据预处理,常用的单变量分析方法有:频数分析、描述性统计、直方图等。
- 频数分析:分析类别型变量每一个值出现的频数。
- 描述性统计:对数值型变量的常用统计量进行分析:均值,总和,最小值,最大值,分位数。
- 直方图:对数值型变量进行分段处理后进行频数分析并作图。
频数分析:(类别型变量)
数据集中的 Survived(是否生还), Pclass(客舱等级), Sex(性 别), Embarked(登船港口)等变量是类别型变量,所以可对他们进行频数分析。
1、变量Survived(是否生还)的频数分析及可视化:
# 统计频数
Survived_freq=train_data.Survived.value_counts()
print(Survived_freq)
# 统计结果的可视化分析(条形图和饼图)
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.figure(figsize=(12,5))
plt.subplot(121)
sns.countplot(x='Survived',data=train_data)
plt.title('Count')
plt.subplot(122)
plt.pie(Survived_freq,labels=Survived_freq.index,autopct='%1.0f%%')
plt.title('percent')
plt.show
我们从上述的分析中可以看出,训练样本中有38%的乘客生还了。
2、变量Pclass(客舱等级)的频数分析及可视化:
# 统计频数
Pclass_freq=train_data.Pclass.value_counts()
print(Pclass_freq)
# 统计结果的可视化分析(条形图和饼图)
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(12,5))
plt.subplot(121)
sns.countplot(x='Pclass',data=train_data)
plt.title('Count')
plt.subplot(122)
plt.pie(Pclass_freq,labels=Pclass_freq.index,autopct='%1.0f%%')
plt.title('percent')
plt.show()
我们从上述的频数分析中可以看出,训练样本中3等舱的乘客最多占比55%,2等舱最少占比21%,1等舱占比24%。
3、变量Sex(性别)的频数分析及可视化:
# 统计频数
Sex_freq=train_data.Sex.value_counts()
print(Sex_freq)
# 统计结果的可视化分析(条形图和饼图)
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize&