背景:泰坦尼克号(RMS Titanic)是英国白星航运公司下辖的一艘奥林匹克级邮轮,于1909年3月31日在爱尔兰贝尔法斯特港的哈兰德与沃尔夫造船厂动工建造。她是当时世界上体积最庞大、内部设施最豪华的客运轮船,有“永不沉没”的美誉 。1912年4月10日开始了她的第一次航行——从英国南安普敦出发,途经法国瑟堡-奥克特维尔以及爱尔兰昆士敦,驶向美国纽约。然而4天后,她撞上冰山沉入大西洋。2224名船员和旅客中,仅705人生还。泰坦尼克号沉没事故为和平时期死伤人数最为惨重的一次海难。
一、提出问题
在泰坦尼克号的海难中,仅有32%的人员存活下来,是什么因素影响船上的人在泰坦尼克号中生还率呢?生还率更高的人有什么共同特征?
二、理解数据
以下是数据变量的内容和含义
其中在船兄妹姐妹数/配偶数是指同辈分的关系条数,在船父母数/子女数是指跨一辈分的关系条数
三、数据清洗
数据源是两份分别为训练数据和测试数据的CSV格式的表格,其中测试数据比训练数据少1列生存情况
1、先把数据导入并查看数据
#准备工具包
#忽略警告提示
import warnings
warnings.filterwarnings('ignore')
#导入处理数据包
import numpy as np
import pandas as pd
#导入数据
#训练数据集
train=pd.read_csv(r'******\train.csv',engine = 'python')
#测试数据集
test=pd.read_csv(r'******\test.csv',engine = 'python')
print('训练数据集:',train.shape,'测试数据集:',test.shape)
#上面打印输出结果:训练数据集: (891, 12) 测试数据集: (418, 11)
#合并数据集,方便同时对两个数据集进行清洗
full = train.append( test , ignore_index = True )
print ('合并后的数据集:',full.shape)
#上面打印输出结果:合并后的数据集: (1309, 12)
#查看数据前五行
full.head()
#获取数据类型列的描述统计信息
full.describe()
#查看每一列的数据类型和数据总数
full.info()数据前5行统计描述数据类型和数据总数
从数据查看的结果了解到:
训练数据有891行,测试数据有418行;总数据一共1309行
Age列有1046个数据,缺失率为:(1309-1046)/1309=20%
Cabin列有295个数据,缺失率为77.5%,缺失率较大
Embarked列缺失2条数据
Fare列缺失1条数据
通过查看数据后,了解到的信息为下一步数据清洗提供了一些方向
2、数据预处理(此处不需要选择列和更列名)
1)缺失值处理
很多机器学习算法为了训练模型,要求所传入的特征中不能有空值。常用的数据缺失值处理方法如下:如果是数值类型,用平均值取代
如果是分类数据,用最常见的类别取代
使用模型预测缺失值,例如:K-NN
#数值型缺失值处理
#年龄(Age)
full['Age']=full['Age'].fillna(full['Age'].mean())
#船票价格(Fare)
full['Fare']=full['Fare'].fillna(full['Fare'].mean())
print('处理后:')
full.info()
#检查数据处理是否正常
full.head()
#分类数据的缺失值处理
#登船港口(Embarked):查看里面数据</