泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第1张图片

一.提出问题与分析思路

什么样的人在泰坦尼克号中更容易存活?

分析思路:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第2张图片

二.理解数据

2.1采集数据

这里的样本数据来源于Kaggle泰坦尼克号项目页面,即

Titanic: Machine Learning from Disaster​www.kaggle.com

下载下图中的这3个数据集。

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第3张图片

2.2 导入数据

# 忽略警告提示

运行结果:

6c32736525a6cddf2a207da5b0cd9784.png

由以上运行结果可知,训练数据集有891行数据,12个变量。而测试数据集有418行数据,11个变量。值得注意的是,训练数据比测试数据多一个变量,这是因为训练数据里面有一个独有的变量Survived,用0与1表示是否存活。有了这1列才能训练模型。

rowNum_train

运行结果:

b9f22ded26ba7d82432f89f74234a5eb.png
#合并数据集,方便同时对两个数据集进行清洗

运行结果:

a36a80c0ef735acc796d460769eda3a7.png

2.3 查看数据信息

#查看数据

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第4张图片

由以上运行结果可以看出,全体数据总共有1309行数据,12个变量。

每个变量的含义如下图所示:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第5张图片
#获取数据类型列的描述统计信息

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第6张图片

从以上运行结果可以看出,该数据集总共有1309行数据。Age(年龄)这一列总共有1046个数据,缺失了1309-1046=263个数据。Fare(船票价格)这一列总共有1308个数据,确实了1个数据。Fare的最小值为0,这显然不符合实际情况。因此需要对这两个数据类型列进行数据清洗。

# 查看每一列的数据类型,和数据总数

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第7张图片

由以上运行结果可以看出,我们发现数据总共有1309行。 Embarked(登船港口)有1307个数据,缺失了2条数据。Cabin(船舱号)有295个数据,缺失了1309-295=1014个数据,缺失=1014/1309=77.5%,缺失比较大。因此需要对这两个字符串列进行数据清洗。

通过以上分析,Age(年龄),Fare(船票价格),Embarked(登船港口),Cabin(船舱号)这4列存在缺失数据。因此需要在数据清洗时进行缺失数据处理。Fare(船票价格)的最小值为0,这显然不符合实际情况,属于异常值,需要在数据清洗时进行异常值处理。

三.数据清洗

3.1 数据预处理

数据预处理的步骤有:选择子集;列名重命名;缺失数据处理;数据类型转换;数据排序;异常值处理。这里我们只需要进行缺失数据处理与异常值处理。

很多机器学习算法为了训练模型,要求所传入的特征中不能有空值。

如果是数值类型,用平均值填充
如果是分类数据,用最常见的类别填充
使用模型预测缺失值,例如:K-NN

(1)对数字类型的列的缺失数据进行填充

# 1.对年龄(Age)与船票价格(Fare)的缺失数据进行填充

(2)对字符串的列的缺失数据进行填充

首先对Embarked进行填充。

# 2.对登船港口(Embarked)进行填充:用最常见的类别填充

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第8张图片
# 统计各类别的个数

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第9张图片
# S类别最常见,因此用S填充缺失值

接下来对Cabin进行填充。

# 3.按照同样的方法对船舱号(Cabin)进行填充

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第10张图片
# 统计各类别的个数

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第11张图片
# 缺失数据比较多,船舱号(Cabin)缺失值填充为U,表示未知(Uknow) 

(3)检查数据处理是否正常

full

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第12张图片
#查看最终缺失值处理情况

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第13张图片

3.2 特征提取

特征工程就是最大限度地从原始数据中提取特征,以供机器学习算法和模型使用。

特征工程处理方法包括:特征提取;特征选择和特征降维。

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第14张图片

3.2.1数据分类

#查看数据类型

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第15张图片

由以上运行结果可知,我们可以将数据分为3类,如下图所示。

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第16张图片

(1)有直接类别的

乘客性别(Sex): 男性male,女性female
登船港口(Embarked):出发地点S=英国南安普顿Southampton,
途径地点1:C=法国 瑟堡市Cherbourg,
出发地点2:Q=爱尔兰 昆士敦
Queenstown 客舱等级(Pclass):1=1等舱,2=2等舱,3=3等舱
# 1.性别

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第17张图片
# 将性别的值映射为数值:男(male)对应数值1,女(female)对应数值0

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第18张图片
# 2.登船港口(Embarked)

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第19张图片
#存放提取后的特征

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第20张图片
# 添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第21张图片
# 3.客舱等级(Pclass):1=1等舱,2=2等舱,3=3等舱

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第22张图片
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第23张图片

(2)字符串类型的分类

字符串类型:可能从这里面提取出特征来,也归到分类数据中,这里数据有:

乘客姓名(Name)
客舱号(Cabin)
船票编号(Ticket)
# 1.姓名

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第24张图片

从以上结果可以看出,在乘客名字(Name)中,有一个非常显著的特点,即乘客头衔每个名字当中都包含了具体的称谓或者说是头衔,将这部分信息提取出来后可以作为非常有用的一个新变量,可以帮助我们进行预测。 例如: Braund, Mr. Owen Harris Heikkinen, Miss. Laina Oliva y Ocana, Dona. Fermina Peter, Master. Michael J ,因此接下来我们从姓名中提取头衔或者称谓。

# 定义函数:从姓名中获取头衔

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第25张图片
'''

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第26张图片
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第27张图片
# 2.从客舱号中提取客舱类别:客舱号的首字母是客舱的类别

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第28张图片
#存放客舱号信息

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第29张图片
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第30张图片
# 3.建立家庭人数和家庭类别

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第31张图片
#添加one-hot编码产生的虚拟变量(dummy variables)到泰坦尼克号数据集full

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第32张图片

3.3 特征选择

# 1.相关系数法:计算各个特征的相关系数

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第33张图片
# 查看各个特征与生成情况(Survived)的相关系数

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第34张图片
#根据各个特征与生成情况(Survived)的相关系数大小,我们选择了这几个特征作为模型的输入:

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第35张图片

四.构建模型

用训练数据和某个机器学习算法得到机器学习模型,用测试数据评估模型

4.1 建立训练数据集和测试数据集

将Kaggle泰坦尼克号项目给的训练数据集作为原始数据集,记为source。从这个原始数据集中拆分出训练数据集,记为train,用于模型训练;测试数据集,记为test,用于模型评估。坦尼克号项目给的测试数据集没有生存情况的值,所以不能用于评估模型。 这里将这个测试数据叫做预测数据集,记为pred。 我们将基于机器学习模型对其生存情况进行预测。

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第36张图片
# 1.前面将原始数据与预测数据合并了再进行的数据清洗

运行结果:

8991e412ef5ce92b4f5641b6f8a480c5.png
# 2.从原始数据集(source)中拆分出训练数据集与测试数据集

运行结果:

2a8903e3cc8b89805a37ef64f724c89e.png
# 3. 查看测试数据集

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第37张图片

4.2 建模

# 4.选择逻辑回归算法,用于模型的训练。 

运行结果:

ddbe8c671e4e5d994afe9e7f6848e5bb.png

五.模型评估

# 6.模型评估:分类问题,模型的正确率

运行结果:

29c46672ffd1f918c4a797d0e09e145f.png

六. 方案实施

对预测数据的生存情况进行预测,并保存到csv文件中,上传到Kaggle中,就可以看到排名。

# 7.对预测数据的生存情况进行预测

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第38张图片
# 生成的预测值是浮点数(0.0,1,0),但是Kaggle要求提交的结果是整型(0,1)

运行结果:

532e0fc751e795fcab4be274ae0cb2f9.png
predDf

运行结果:

泰坦尼克号数据集_基于Python的泰坦尼克号生存率预测_第39张图片
#保存结果

你可能感兴趣的:(泰坦尼克号数据集)