Taianic 数据预处理

数据分析处理阶段

# -*- coding: utf-8 -*-  #
#采用utf-8解码 
import urllib.request#下载地址 及相关
import os#判断数据文件是否存在

url="http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls" #数据文件下载路径
filepath="data/titanic3.xls" #本地数据文件路径
url="http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls" #数据文件下载路径
filepath="data/titanic3.xls" #本地数据文件路径
if not os.path.isfile(filepath): #判断本地是否有数据文件 没有 进行在线下载 
    result=urllib.request.urlretrieve(url,filepath)
    print('downloaded:',result)



输出

downloaded: ('data/titanic3.xls', <http.client.HTTPMessage object at 0x7f40f695bda0>)

import numpy #用于科学计算
import pandas as pd #用于数据分析

all_df = pd.read_excel(filepath) #读取数据到all_df中
all_df[:2]#查看前两条数据 选取有用的数据列 其余的列 无意义 如 票号ticket 对要预测的结果没有影响

输出


cols=['survived','name','pclass' ,'sex', 'age', 'sibsp',
      'parch', 'fare', 'embarked']
all_df=all_df[cols]

 
 
all_df[:2]

输出


all_df.isnull().sum() #总体来看有多少条数据缺失 

输出


 
 
age_mean = df['age'].mean()#使用平均值填充缺失的age(age 为数值类型)
df['age'] = df['age'].fillna(age_mean)

fare_mean = df['fare'].mean()#使用平均值填充缺失的fare (fare 为数值类型)
df['fare'] = df['fare'].fillna(fare_mean)

df['sex']= df['sex'].map({'female':0, 'male': 1}).astype(int)#(sex 性别 为类型数据 有两类  用 0  1 分别代表两类 )

df[:2]

输出

x_OneHot_df = pd.get_dummies(data=df,columns=["embarked" ]) #embarked 为多类型数据 进行one-hot 编码


x_OneHot_df[:2]

将Data Frame 转换成 Array

ndarray = x_OneHot_df.values #需要把数据转成Array 格式才能放到网络中进行训练

 
 
ndarray.shape

输出
    (1309, 10)

ndarray[:2]

输出

Label = ndarray[:,0] #标签是数据的最后一列
Features = ndarray[:,1:] #特征是数据 除去最后一列

Features.shape

输出

(1309, 9)
Features[:2]

输出


Label.shape

输出

(1309,)

Label[:2]

输出

array([1., 1.])

对数据进行标准化处理


#标准化处理可以提高模型的预测准确度和训练的数据
from sklearn import preprocessing
minmax_scale = preprocessing.MinMaxScaler(feature_range=(0, 1))#把数据的数值都映射到0,1之间
scaledFeatures=minmax_scale.fit_transform(Features)
scaledFeatures[:2]

划分训练集 和 测试集

 
 
msk = numpy.random.rand(len(all_df)) < 0.8 #把数据用0.8的比例进行划分 80%用于训练 20%用于测试
train_df = all_df[msk]
test_df = all_df[~msk]


print('total:',len(all_df),
      'train:',len(train_df),
      'test:',len(test_df))

输出
total: 1309 train: 1069 test: 240
#这个函数把之前处理数据的过程集合到一起

def PreprocessData(raw_df):
    df=raw_df.drop(['name'], axis=1)
    age_mean = df['age'].mean()
    df['age'] = df['age'].fillna(age_mean)
    fare_mean = df['fare'].mean()
    df['fare'] = df['fare'].fillna(fare_mean)
    df['sex']= df['sex'].map({'female':0, 'male': 1}).astype(int)
    x_OneHot_df = pd.get_dummies(data=df,columns=["embarked" ])

    ndarray = x_OneHot_df.values
    Features = ndarray[:,1:]
    Label = ndarray[:,0]

    minmax_scale = preprocessing.MinMaxScaler(feature_range=(0, 1))
    scaledFeatures=minmax_scale.fit_transform(Features)    
    
    return scaledFeatures,Label


 
 
train_Features,train_Label=PreprocessData(train_df)
test_Features,test_Label=PreprocessData(test_df)



train_Features[:2]

输出

train_Label[:2]

array([1., 0.])


到此Taiannic的数据处理就ok了 接下来可以放到网络里面进行训练




猜你喜欢

转载自blog.csdn.net/u013347493/article/details/80817189