目录
NO.1 ---Pandas数据处理
NO.2 ---数值型数据的处理
NO.3 ---离散化、分箱、分桶
NO.4 ---分类特征的处理
NO.5 ---处理样本分布不均衡
NO.6 ---数据抽样
NO.1 ---Pandas数据处理
一 .缺失值的处理
API

1.直接删
如果缺失值比例比较大 30% ~40% 以上可以考虑删除
2.填充
统计值 均值、加权均值、中位数等方填充
统计法
模型法: 对缺失数据进行预测
分类 众数
算法 LR 随机森林
3. 数据缺失 有些时候也是一种特征,不见得一定要处理
以用户性别字段为例,男 女 未知
二. 异常值
判断异常值方法:Z-Score : 一个值 距离平均数多少个标准差
Z-Score = X-μ/σ 其中μ为总体平均值,X-μ为离均差,σ表示标准差
如果是业务产生的异常值,根据具体的情况决定
删除/替换
保留
异常值由运营活动导致,正常反映了业务运营结果
异常检测模型
如异常客户(羊毛党)识别,作弊流量检测,信用卡诈骗识别等
对异常值不敏感的数据模型
如决策树
三. 重复值处理
dataframe.duplicated() # 判断重复数据记录
dataframe.drop_duplicates() # 删除数据记录中所有列值相同的记录
样本不均衡情况下
分类模型,某个分类训练数据过少,可以采取简单复制样本的方法来增加样本数量
需要故意重复值
其它情况下 去重
NO.2 ---数值型数据的处理
一. 归一化
= (x-min)/(max-min)
取值范围 [0,1]
容易受到极值(异常值)影响
**归一化Max-Min : 建立MinMaxScaler模型对象---->minmax_scaler**

二. 标准化: x'=(x-mean)/std
std是方差的算术平方根。离mean的实际距离,
标准化之后的数据是以0为均值,方差为1的正态分布。但是Z-Score方法是一种中心化方法
中心化: 所有(X-mean)的和相加等于0.
5人的工资,分别为12000、5000、8000、3000、4000元,这5个数据作为一个独立的数据集,平均值为6400元,每个人的工资依次减去平均水平6400,得到5600、-1400、1600、-3400、-2400,新的5个数据其平均值等于0,这个过程就是数据的中心化
标准化: StandardScaler对象--->zscore_scaler

三. 什么时候用 标准化 归一化
knn或者树模型 不需要标准化 归一化
线性回归,逻辑回归 如果不同特征数据,数量级不一样 需要 就需要做标准化 归一化
a0x0 + a1x1+a2x2+....=Y
NO.3 ---离散化、分箱、分桶
对本来是连续的(数值型的)数据,分组,落在一组之内的数据,忽略差异
离散化/分箱需要注意
尽量不要让每个箱中的样本差距过大
常见现针对连续数据化离散化的方法
分位数法:使用四分位、五分位、十分位等分位数
距离区间法:可使用等距区间或自定义区间的方式进行离散化
频率区间法:将数据按照不同数据的频率分布进行排序,然后按照等频率或指定频率离散化,这种方法会把数据变换成均匀分布
聚类法:例如使用K均值将样本集分为多个离散化的簇。
pandas.cut 自己制定分箱的边界pandas.qcut 等频分箱 尽量让每个箱的样本量一致
API
1.针对时间数据的离散化

2.针对连续数据的离散化:自定义分箱区间实现离散化

3.针对连续数据的离散化:使用聚类法实现离散化

5. 针对连续数据的二值化

NO.4 ---分类特征的处理
one-hot编码
分类的特征中有一些字符串的数据,需要把字符串转换成数值型
使用one-hot 来表示分类特征,而不是用0,1,2来表示分类,避免算法把分类特征当做连续特征处理
onehot处理
sklearn model_enc = OneHotEncoder()
fit_transform # 标志转换
只要丢进去的数据都会做onehot处理
get_dummies (哑变量)处理非数值型的变量
get_dummies 只处理非数值型的特征
时间类型数据处理
转换成pandas datetime类型
pd.to_datetime(car_sales['date_t'])
利用datetime可以方便取出各种维度的时间信息
取出几月份: car_sales['date'].dt.month
取出来是几号: car_sales['date'].dt.day
取出一年当中的第几天: car_sales['date'].dt.dayofyear
取出星期几: car_sales['date'].dt.dayofweek
NO.5 ---处理样本分布不均衡
样本分布不均衡易出现场景
异常检测
客户流失
偶发事件
过采样: 使用imblearn中的SMOTE
其通过增加分类中少数类样本的数量来实现样本均衡
model_smote.fit_sample(x, y) # 输入数据并作过抽样处理
返回特征和目标过采样之后的结果
处理之后需要把x,y拼成新的dataframe
欠采样: 使用imblearn中RandomUnderSampler做
通过减少分类中多数类样本的数量来实现样本均衡
NO.6 ---数据抽样
(1)简单随机抽样
(2)等距抽样
numpy.random.choice(a, size=None, replace=True, p=None)
(3)分层抽样
思维导图

网友评论