在数据预处理之前,我们首先看一下数据的大致轮廓。
import pandas as pd
train = pd.read_csv('C:/Users\qzm\Desktop/titanic.csv')
#pd.read_csv()用于读取csv文件
train.head()
各个列标签的含义:
PassengerId :乘客Id
Survived:是否存活,存活为1,死亡为0
Pclass: 客舱等级
Name:乘客姓名
Sex:性别
Age:年龄
Sibsp:是否有兄弟姐妹
Parch: 是否有父母子女
Ticket:票编号
Fare:费用
Cabin:船舱类型
Embarked:上船地点
train.info()
#看一下每一列有多少数据
可以看出Age和Cabin缺失的比较严重
train.describe()
对各列的统计描述
train.Embarked[train.Embarked.isnull()] =
train.Embarked.dropna().mode().values
#Embarked是上船地点,其实和预测存活率关系不大,可以用众数填充
#isnull()用来提取空值
#dropna()用于舍弃空值
#values()用于提取所有值
train.info()
再看一下,Embarked的列确实已经被填充完了
#Cabin特征缺失的太多,并未找到是否和存活率有关,暂时不考虑,赋给U0做个标记
train["Cabin"]=train["Cabin"].fillna("U0")
#fillna()用于填补空值函数
#Age的特征比较重要,预测的准确率很大程度上跟年龄有关
#初步的想法是通过随机森林方法填充Age缺失值
from sklearn.ensemble import RandomForestRegressor as RFR
#先选取数值特征进行预测
age_df = train[["Age","Survived","Fare","Parch","SibSp","Pclass"]]
#只提取这六个特征的数据,因为其它特征根年龄关系不大
age_df_notnull = age_df.loc[(train["Age"].notnull())]
#提出Age不为空的数据
#loc()通过每一列的数据来索引对应每一行的数据
age_df_isnull = age_df.loc[(train["Age"].isnull()