注意:创建虚拟变量和虚拟变量编码(dummy encoding)是不同的概念,前者如上所述,如果一个离散变量有N个取值,就会衍生出N个真值变量,而后者——虚拟变量编码,则是衍生出N-1个变量,它认为这个N-1个变量都为0时即表示原始数据取第N个值。
4. 离散化
离散化就是将一份数据从细粒度转化为粗粒度,实质就是数据的集中化。主要包括两方面:将连续型数据转化成离散型数据、将离散型数据进行类别合并,具体又分为以下几点:
4.1 针对时间数据的离散化
针对时间数据的离散化主要是指对时间数据进行粒度上的上卷(反之是下钻):
时间戳——>小时——>上午\下午
日期型——>星期——>周数——>季度——>年份
## 离散化
### 针对时间数据的离散化
colList = list(dataset.columns)
colList.extend(['weekday_col5','week_col5','year_col5','month_col5','day_col5','hour_col5'])
dataset = dataset.reindex(columns = colList)
for index,value in enumerate(dataset['col5']):
newValue = pd.to_datetime(value)
dataset['weekday_col5'][index] = newValue.weekday()
dataset['week_col5'][index] = newValue.week
dataset['year_col5'][index] = newValue.year
dataset['month_col5'][index] = newValue.month
dataset['day_col5'][index] = newValue.day
dataset['hour_col5'][index] = newValue.hour
4.2 针对类别数据的离散化
针对类别数据的离散化主要是指将多个类别进行合并而产生新的类别划分。
比如将年龄区间(小于18,18-35,35-50,50-70,70以上)合并为年龄区间(小于18,18-35,35-50,50以上)。
### 针对类别数据的离散化
mapDf = pd.DataFrame([['0-10','0-20'],['10-20','0-20'],['20-30','20-30'],['30-40','30-50'],['40-50','30-50']],columns=['col6','new_col6'])
dataset = dataset.merge(mapDf, left_on = 'col6', right_on = 'col6', how = 'inner')
4.3 针对连续数据的离散化