zoukankan      html  css  js  c++  java
  • 【Sklearn系列】使用Sklearn进行数据预处理

    这篇文章主要讲解使用Sklearn进行数据预处理,我们使用Kaggle中泰坦尼克号事件的数据作为样本。

    读取数据并创建数据表格,查看数据相关信息

    import pandas as pd
    import numpy as np
    from pandas import Series,DataFrame
    data = pd.read_csv('tanic_train.csv')#导入进来的是dataframe格式
    #data 可以打开data的具体信息,是dataframe的格式
    #data.info()  #显示了基本信息的总和,包括有多少行,多少列,每列包含多少的数据,可以看出是否具有缺失值
    #data.describe() #可以得到一些方差均值等统计信息,当然这是针对于数据,对于文本信息这里是没有显示的
    #data['Sex'].unique()#可以判断出函数值取值范围
    
    
    data.head(5) #显示数据集合前五行的内容
    

    表格内容如下所示

    填充缺失值(数据预处理的第一步就是处理缺失值)

    • 对于缺失值不多不少的数据特征,我们可以使用机器学习模型进行缺失值得填充,例如随机森林,逻辑回归,线性回归
    # 把已有的数值型特征取出来形成一个新的数据框
    from sklearn.ensemble import RandomForestRegressor
    age_df = data[['Age','Fare','Parch','SibSp','Pclass']]
    # 乘客分成已知年龄和未知年龄两部分
    known_age = age_df[age_df.Age.notnull()].as_matrix()# as_matrix()是为了将dataframe格式转为数组的格式,方便用于机器学习模型
    #known_age
    unknown_age = age_df[age_df.Age.isnull()].as_matrix()
    #unknown_age
    
    #y 即目标年龄
    y = known_age[:,0]
    
    # x即特征属性值
    x = known_age[:,1:]##
    
    #fit到随机森林回归算法中去
    rfr =  RandomForestRegressor(random_state = 0,n_estimators = 2000, n_jobs = -1)
    rfr.fit(x,y)
    
    # 用得到的模型进行位置年龄的结果预测
    predictedAges = rfr.predict(unknown_age[:,1:]) #看一下里面是啥
    
    #用得到的预测结果填补原缺失数据
    data.loc[data.Age.isnull(),'Age'] = predictedAges  ##去掉括号试试
    
    • 对于缺失值太多的特征,我们可以直接删去,或者采取让不是缺失值的为1,缺失值为0
    data.loc[data_train.Cabin.notnull(),'Cabin'] = 0
    data.loc[data_train.Cabin.isnull(),'Cabin'] = 1
    
    • 对于数据缺失值很少的我们可以采用均值或者中位数替代的方法
    data["Age"] = data["Age"].fillna(data["Age"].median()/mean())
    

    处理类目型数据

    data['Embarked'].unique()
    data['Embarked'] = data['Embarked'].fillna('S')
    data.loc[data["Embarked"] == "S", "Embarked"] = 0
    data.loc[data["Embarked"] == "C", "Embarked"] = 1
    data.loc[data["Embarked"] == "Q", "Embarked"] =2
    
    data.loc[data.Cabin.notnull(),'Cabin'] = 0
    data.loc[data.Cabin.isnull(),'Cabin'] = 1
    
    data.loc[data['Sex']=='male','Sex'] = 1
    data.loc[data['Sex']=='female','Sex'] = 0
    
    

    从dataframe中挑选我们需要的特征值

    data=data[['Age','Survived','Fare','Pclass','Parch','Sex','SibSp','Cabin','Embarked']]
    

    数据标准化(标准差标准化,经过处理的数据符合均值为0,标准差为1的标准正态分布)

    st=np.array(X[['Age']])
    scaler = preprocessing.StandardScaler().fit(st)
    #在fit函数中,如果特征值只是一列的话,一定要注意在从数据集合挑选这一列特征的时候要使用X[['someting']],这样在使用np.array()之后才是可以被使用的
    
    X['Age']=scaler.transform(st)
    
    st2=np.array(X[['Fare']])
    scaler = preprocessing.StandardScaler().fit(st2)
    X['Fare']=scaler.transform(st2)
    
  • 相关阅读:
    2019牛客暑期多校训练营(第五场)
    2019 Multi-University Training Contest 4
    Sublime主题安装
    CF-311B Cats Transport(斜率优化DP)
    CF-559C Gerald and Giant Chess(计数DP)
    [AHOI2009] [BZOJ1799] 月之迷 (数位DP)
    BZOJ_3270_博物馆_(高斯消元+期望动态规划+矩阵)
    BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)
    BZOJ_1013_[JSOI2008]_球形空间产生器_(高斯消元)
    BZOJ_1012_[JSOI2008]_最大数maxnumber_(线段树/树状数组+RMQ)
  • 原文地址:https://www.cnblogs.com/lzida9223/p/8372513.html
Copyright © 2011-2022 走看看