在数据处理中,除了前面文章介绍过的非数值数据外,可能还有一些连续数值需要处理。比如年龄这个特性,如果按未成年和成年来划分,就是二值化,如果按少年、青年、中年、老年来划分,就是分箱。下面我们依然用泰坦尼克号的数据,来演示二值化和分箱。

import pandas as pd
import numpy as np

data = pd.read_csv('./datas/titanic.csv')
data.dropna(subset=['Age'], inplace=True)

data_1 = data.copy()
data_2 = data.copy()

二值化

preprocessing.Binarizer:根据阈值将数据二值化,大于阈值的值映射为1,小于等于阈值的映射为0。默认阈值为0。

from sklearn.preprocessing import Binarizer

Age = Binarizer(threshold=17.9).fit_transform(data_1['Age'].values.reshape(-1, 1))
print(np.unique(Age.flatten()))

data_1['Age'] = Age
print(data_1.head())

分箱

preprocessing.KBinsDiscretizer:将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码。

from sklearn.preprocessing import KBinsDiscretizer

# ordinal-编码为整数,uniform-等宽分箱
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
Age = est.fit_transform(data_2['Age'].values.reshape(-1,1))
print(np.unique(Age.flatten()))

# onehot为分箱后为哑变量
est = KBinsDiscretizer(n_bins=3, encode='onehot', strategy='uniform')
Age = est.fit_transform(data_2['Age'].values.reshape(-1,1))
print(Age.toarray())

本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/266