大连seo整站优化,酷播wordpress视频插件,南昌媒体网站建设口碑推荐,wordpress+widget+开发处理思路
在数据预处理过程中#xff0c;难免会有数据的确实情况#xff0c;无论是自己爬虫获取的还是从公开数据源上获取的数据集#xff0c;都不能保证数据集是完全准确的#xff0c;难免会有一些缺失值。而以这样数据集为基础进行建模或者数据分析时#xff0c;缺失值…处理思路
在数据预处理过程中难免会有数据的确实情况无论是自己爬虫获取的还是从公开数据源上获取的数据集都不能保证数据集是完全准确的难免会有一些缺失值。而以这样数据集为基础进行建模或者数据分析时缺失值会对结果产生一定的影响所以提前处理缺失值是十分必要的。
常用的处理思路主要有
填充处理数值变量、类别变量、时间序列删除处理按行删除、按列删除不做处理
一、填充处理
常用的填充方法有
统计量填充如均值、中位数、众数、最值等KNN填充预测填充
pandas中用于填充缺失值的方法 df.fillna()参数解释
对于数值型变量
1 统计量填充
**均值填充**
缺点容易受到异常值的影响
df[col].fillna(valuedf[col].mean(),inplaceTrue)**中位数填充**
df[col].fillna(valuedf[col].median(),inplaceTrue)**众数填充**
缺点众数结果可能有多个需要取第一个df.mode(numeric_onlyFalse)[0]
df[col].fillna(valuedf[col].mode()[0],inplaceTrue)**最大值填充**
df[col].fillna(valuedf[col].max(),inplaceTrue)**最小值填充**
python
df[col].fillna(valuedf[col].min(),inplaceTrue)2 填充KNN数据 pip install fancyimpute 填充近邻的数据先利用knn计算临近的k个数据然后填充他们的均值。安装fancyimpute除了knn填充fancyimpute还提供了其他填充方法
缺点基于欧式距离找找最相邻的K个点的均值做填充不能填充类别变量并且进入KNN模型的数据也不能有非数值变量。
import pandas as pd
import numpy as np
from fancyimpute import KNN
data pd.DataFrame([[3, 2, 4, 0],[3, np.nan, 3, 1],[5, np.nan, np.nan, 1],[5, 5, 3, 4]],columnslist(ABCD))
print(data)
# fancyimpute填补缺失值时会自动删除列
data pd.DataFrame(KNN(k6).fit_transform(data),columnsdata.columns)名
print(data)3 预测填充
from sklearn.ensemble import RandomForestRegressordef set_missing_ages(df):#把数值型特征都放到随机森林里面去除了Age其他四个特征均无缺失值age_dfdf[[Age,Fare,Parch,SibSp,Pclass]]known_age age_df[age_df.Age.notnull()].as_matrix()unknown_age age_df[age_df.Age.isnull()].as_matrix()yknown_age[:,0]#y是年龄第一列数据xknown_age[:,1:]#x是特征属性值后面几列rfrRandomForestRegressor(random_state0,n_estimators2000,n_jobs-1)#根据已有数据去拟合随机森林模型rfr.fit(x,y)#预测缺失值predictedAges rfr.predict(unknown_age[:,1:])#填补缺失值df.loc[(df.Age.isnull()),Age] predictedAgesreturn df,rfr对于类别型变量
1 出现频率最高的变量填充相当于众数
data[D] data[D].fillna(data[D].value_counts().index[0])2 将缺失作为一个特定的类别 把缺失当作一种特定的状态 比如对于账户信息的收集其中有些是选填项这些特征肯定会存在缺失我们可以把它当作一个”保密“的类别。
3 预测填充
对于时间序列
由于时间序列的特殊性相邻的点相关性比较大。所以对于时间序列的缺失值的处理方式会与数值型缺失值处理方式不同往往会用相邻的点填充。 前一个值填充
df[col] df[col].fillna(df[col].fillna(methodffill))后一个值填充
df[col] df[col].fillna(df[col].fillna(methodbfill))线性插值
df[col] df[col].fillna(df[col].interpolate())二、删除处理
按列删除
某一列缺失数据较多比如缺失率高达80%以上时往往会删除整列特征
按行删除
对于重要的唯一标识ID特征存在缺失比如我的建模目标是预测每个用户的消费能力。每个用户ID唯一标识一个特定的用户若用户ID存在缺失直接删除缺失所在行。
三、不处理
其实对于树模型来说是支持缺失值的但是建模效果可能会差于处理后建模。