第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')