数据分析处理阶段
# -*- 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了 接下来可以放到网络里面进行训练