1、研究问题:什么样的人在泰坦尼克号中更容易存活?
2、
import numpy as np
import pandas as pd
train=pd.read_csv("./train.csv")
test=pd.read_csv("./test.csv")
print('训练数据集:',train.shape,'测试数据集:',test.shape)
full=train.append(test,ignore_index=True)
print('合并后的数据集:',full.shape)
full.head
full.describe()
full.info()
3、数据预处理
很多机器学习算法为了训练模型要求传入的数据特征不能有空值
其中,年龄和船票价格有缺失数据,这两列里存放的数据类型是数值,用平均数来填充缺失值
full['Age']=full['Age'].fillna(full['Age'].mean())
full['Fare']=full['Fare'].fillna(full['Fare'].mean())
登船港口只缺少了几条数据,将缺失值填充为最频繁出现的值
full['Embarked']=full['Embarked'].fillna('S')
船舱号数据缺失的很多,缺失值填充为U(Uknow)
full['Cabin']=full['Cabin'].fillna('U')
特征提取
将性别的值映射为数值,malesu对应1,female对应0
sex_mapDict={'male':1,
'female':0}
map函数,对Series每个数据应用自定义函数的计算
sex=full['Sex'].map(sex_mapDict)
sex.head()
使用get_dummies函数对登录港口数据进行one-hot编码,列名前缀是Embarked
embarkedDf=pd.get_dummies(full['Embarked'],prefix='Embarked')
embarkedDf.head()
使用get_dummies函数对客舱等级数据进行one-hot编码,列名前缀是Pclass
pclassDf=pd.get_dummies(full['Pclass'],prefix='Pclass')
pclassDf.head()
定义函数:从姓名中获取头衔
def getTitle(name):
str1=name.split(',')[1]
str2=str1.split('.')[0]
str3=str2.strip()
return str3
map函数,对Series每个数据应用自定义函数的计算
titleDf=pd.DataFrame()
titleDf['Title']=full['Name'].map(getTitle)
titleDf.head()
姓名中头衔字符串与定义头衔类别的映射关系
title_mapDict={
"Capt":"Officer",
"Col":"Officer",
"Major":"Office",
"Jonkheer":"Royalty",
"Don":"Royalty",
"Sir":"Royalty",
"Dr":"Officer",
"Rev":"Officer",
"the Countess":"Royalty",
"Dona":"Royalty",
"Mme":"Mrs",
"Mlle":"Miss",
"Ms":"Mrs",
"Mr":"Mr",
"Mrs":"Mrs",
"Miss":"Miss",
"Master":"Master",
"Lady":"Royalty"
}
map函数,对Series每个数据应用自定义函数的计算
titleDf['Title']=titleDf['Title'].map(title_mapDict)
使用get_dummies函数对客舱等级数据进行one-hot编码
titleDf=pd.get_dummies(titleDf['Title'])
titleDf.head()
客舱号的类别值是用匿名函数lambda定义为首字母——重命名,简洁化
full['Cabin']=full['Cabin'].map(lambda s:s[0])
cabinDf=pd.get_dummies(full['Cabin'],prefix='Cabin')
cabinDf.head()