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

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

任务描述

本关任务:对指定样本数据进行预处理,掌握数据预处理的技巧。

相关知识

为了完成本关任务,你需要掌握: 1.数据样本抽取的方法; 2、数据清洗的技巧。

#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'] >= pd.to_datetime('2016-02-01')) & (data['type'] == 6)]
    selected_columns = ['user_id', 'time', 'model_id', 'type', 'cate', 'brand']
    data = data[selected_columns]

    ########## 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(n=5000, replace=False)

    ########## 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='backfill')
    
    # 用前面的值替换缺失值         
    nan_result_pd3 = df.fillna(method='pad')
    
    # 用0替换缺失值                
    nan_result_pd4 = df.fillna(0)
    
    # 用不同值替换不同列的缺失值,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 ##########
    std_dev = df.std()
    mean = df.mean()
    lower_threshold = mean - 2.2 * std_dev
    upper_threshold = mean + 2.2 * std_dev
    df = df[(df >= lower_threshold) & (df <= upper_threshold)].dropna()
    ########## 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

def to_normal(df,cols=['sex','level']):
    data=df[['sex','level']]
    df=pd.get_dummies(data)
    return df
 
def cut_bins(df,col='score'):
    df["cut_bins_1"]=pd.qcut(df["score"],3,# 4等分
    labels=[1,2,3]) 
    df["cut_bins_2"]=pd.cut(df["score"],3,# 4等分
    labels=[1,2,3]) 
    return df
 
def StandardScaler(df,col=['score','mark']):
    df=df[['score','mark']]
    zscore_scaler = preprocessing.StandardScaler()
    data1 = zscore_scaler.fit_transform(df)
    minmax_scaler = preprocessing.MinMaxScaler()
    data2 = minmax_scaler.fit_transform(df)
    return data1,data2          

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值