头歌:电商精准营销—数据预处理概述

第1关 数据预处理-数据清洗

#coding:utf8
import pandas as pd  # 导入pandas库
import numpy as np  # 导入numpy库

def choose_data(data):
    #选择变量'user_id', 'time', 'model_id', 'type', 'cate', 'brand',选取time在2016-02-01及以后的数据(包含2016-02-01)且type=6,数据类型如下:
    #    user_id  sku_id                 time  model_id  type  cate  brand
    # 0   266079  138778  2016-01-31 23:59:02       NaN     1     8    403
    # 1   266079  138778  2016-01-31 23:59:03       0.0     6     8    403
    # 2   200719   61226  2016-01-31 23:59:07       NaN     1     8     30
    # 3   200719   61226  2016-01-31 23:59:08       0.0     6     8     30
    # 4   263587   72348  2016-01-31 23:59:08       NaN     1     5    159
 
    ########## Begin ##########
    data.time=pd.to_datetime(data.time)
    data=data[(data.time.dt.month>=2) & (data.type==6)]
    data=data[['user_id', 'time', 'model_id', 'type', 'cate', 'brand']]
    ########## End  ##########
    return data


def sample_data(data):
    #使用pd.DataFrame.sample函数进行随机抽样,不放回的随机抽取5000个样本,数据结构如下:
    #    user_id  sku_id                 time  model_id  type  cate  brand
    # 0   266079  138778  2016-01-31 23:59:02       NaN     1     8    403
    # 1   266079  138778  2016-01-31 23:59:03       0.0     6     8    403
    # 2   200719   61226  2016-01-31 23:59:07       NaN     1     8     30
    # 3   200719   61226  2016-01-31 23:59:08       0.0     6     8     30
    # 4   263587   72348  2016-01-31 23:59:08       NaN     1     5    159
    
    ########## Begin ##########   
    data = data.sample(5000)


    ########## End  ##########
    return data


def clear_data(df):
    #根据提示补全下列操作,请在已有的代码上添加操作,不要改动原有的变量名,案例数据结构如下:
    #       col1      col2      col3      col4
    # 0 -1.055712 -0.196175 -0.813023 -0.806857
    # 1  0.972878       NaN -1.722135 -0.638893
    # 2  0.444641 -0.189607 -0.199307  3.496211
    # 3  0.273065 -1.970887  0.954170  0.823823
    # 4  0.729248 -1.036644  1.398436       NaN
    # 5 -0.323439  0.208351 -0.429920 -0.175628
    ########## Begin ##########  
    
    #直接删除缺失值样本,直接在下面补全代码实现要求的功能,例如nan_result_pd1 = df.dropna()    
    nan_result_pd1 = df.dropna()
    
    # 用后面的值替换缺失值                             
    nan_result_pd2 = df.fillna(method='bfill')
    
    # 用前面的值替换缺失值         
    nan_result_pd3 = df.fillna(method='ffill')
    
    # 用0替换缺失值                
    nan_result_pd4 = df.fillna(0) 
    
    # 用不同值替换不同列的缺失值,col2的缺失值使用1填充,col4的缺失值使用2来填充                          
    nan_result_pd5 = df.fillna({'col2':1,'col4':2})
    # nan_result_pd5 = df.fillna({'col2':1,'col4':2})
    # 用平均数代替,选择各自列的均值替换缺失值      
    nan_result_pd6 = df.fillna(df.mean())
    
    ########## End ##########     
    return nan_result_pd1,nan_result_pd2,nan_result_pd3,nan_result_pd4,nan_result_pd5,nan_result_pd6




def clear_unnormal_data(df):
    #异常值处理,这里认为当连续的变量值在2.2个标准差外算作异常值,并删除异常值
    ####################数据##########
    #    col1  col2
    # 0     1    12
    # 1   200    17
    # 2     3    31
    # 3     5    53
    # 4     2    22
    # 5    12    32
    # 6    13    43
    ##################################
    ########## Begin ##########
    df=df['col1']-df['col1'].mean()/df['col1'].std() 
    df.drop(df[df.abs()>2.2].index,inplace=True)

    ########## End ##########
    return df


第2关 数据预处理-数据转换

#coding:utf8
import pandas as pd  # 导入pandas库
from sklearn.preprocessing import OneHotEncoder,LabelEncoder  # 导入库
import numpy as np
from sklearn import preprocessing

#df数据框的数据结构如下:
#        id     sex   level  score  mark
#0  3566841    male    high      1     3
#1  6541227  Female     low      2     3
#2  3512441  Female  middle      3     2
#3  3566842    male    high      4     1
#4  3566843  Female     low      5     2
#5  3566844  Female  middle      6     5
#6  3566845    male    high      3     6
#7  3566846  Female     low      5     7
#8  3566847  Female  middle      6     9

#类型变量数据转换
def to_normal(df,cols=['sex','level']):
    """把上面数据中df['sex','level']的类型数据转换成0-1编码,编码数据命名规则要求,"原始变量名"+"_"+类型变量,例如sex_Famle"""
    ########## Begin ##########
    data=df[['sex','level']]
    df=pd.get_dummies(data)

    ########## End ##########
    return df

def cut_bins(df,col='score'):
    ########## Begin ##########
    #对score变量进行等频分箱(每箱的样本量相同),分成3箱,箱从小到大使用1,2,3作为箱标签,在df数据上新增一列'cut_bins_1'来存储数据

    df["cut_bins_1"]=pd.qcut(df["score"],3,# 4等分
    labels=[1,2,3]) 

    #对score变量进行等距分箱(每箱的组距相同),分成3箱,箱从小到大使用1,2,3作为箱标签,在df数据上新增一列'cut_bins_2'来存储数据
    df["cut_bins_2"]=pd.cut(df["score"],3,# 4等分
    labels=[1,2,3]) 
    ########## End ##########
    return df

#数据标准化
def StandardScaler(df,col=['score','mark']):
    ########## Begin ##########  
    #对df['score','mark']进行zscore_scaler标准化后,得到data1

    # df=df[['score','mark']]
    # z_scaler= preprocessing.StandardScaler()
    # data1 = z_scaler.fit_transform(df)
    #对df['score','mark']进行minmax_scaler标准化,得到data2
    # m_scaler = preprocessing.MinMaxScaler()
    # data2 = m_scaler.fit_transform(df)

    df=df[['score','mark']]
    zscore_scaler = preprocessing.StandardScaler()
    data1 = zscore_scaler.fit_transform(df)

    #对df['score','mark']进行minmax_scaler标准化,得到data2
    minmax_scaler = preprocessing.MinMaxScaler()
    data2 = minmax_scaler.fit_transform(df)
    ########## End  ##########
    return data1,data2           #对标准化后的数据输出,例如return data1,data2


if __name__=='__main__':
    print('sucess')

答案仅供参考,时间有些久远,可能题目已经进行的变动,希望是能帮助大家,不要杠精也不要喷作者(本人比较玻璃心),后续会发后面的,不定时哦!相互尊重

你可能感兴趣的:(Educoder,pandas,numpy)