加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

RapidMiner缺失数据处理——去掉数据大量缺失的变量

发布时间:2021-01-02 23:34:10 所属栏目:大数据 来源:网络整理
导读:最近做数据发掘,发明RapidMiner是一款数据洗濯、处理赏罚和转换的好器材,尤其在数据量不大的环境下。和R说话对比,RapidMiner在数据处理赏罚方面要简朴直观得多。固然RapidMiner的成果也许不如R强盛。其它,我们也可以在RapidMiner中可以直接操作Java/Groovy来编写

最近做数据发掘,发明RapidMiner是一款数据洗濯、处理赏罚和转换的好器材,尤其在数据量不大的环境下。和R说话对比,RapidMiner在数据处理赏罚方面要简朴直观得多。固然RapidMiner的成果也许不如R强盛。其它,我们也可以在RapidMiner中可以直接操作Java/Groovy来编写措施,对数据举办处理赏罚和转换。

此刻以 RapidMiner6.0为例,来声名一下怎样写一段小措施,去掉那些数据缺失量大于80%的变量。由于数据缺失量高出80%,我们很难补全它们。?

我们可以打开RapidMiner中的Execute Script算子并点击Edit Text属性输入下列Java措施段:

/**
 * Carl Wu 吴文旷
 * The code will remove these attributes whose missing values are more than 80% of 
 * the total examples
 *  
 */
ExampleSet exampleSet = operator.getInput(ExampleSet.class);
Attributes attributes = exampleSet.getAttributes();
List cols_with_missing_values = new ArrayList();
//轮回全部列
for (Attribute attribute : exampleSet.getAttributes()) {
   String name = attribute.getName();
    Attribute sourceAttribute = attributes.get(name);
  
    int totalRecords=0;
    int missingRecords=0;
    //循序一个变量的全部行,统计缺失值的数目
    for (Example example : exampleSet) {
    		totalRecords=totalRecords+1;
        if(example[name]==null || example[name].equals("?")){
        	missingRecords=missingRecords+1;
        }
    }

	//假如缺失数据量高出80%,将该变量名生涯到LIst中
	if(missingRecords*1.0/totalRecords>=0.8){
	 cols_with_missing_values.add(sourceAttribute);
	}
  
}

//从原数据齐集移除数据大量缺失的列
for(Attribute name:cols_with_missing_values){
	attributes.remove(name);
}

return exampleSet;

这段小措施的运行结果如下图所示。在没有处理赏罚之前,我们一共有90个样本,536个属性字段:

RapidMiner缺失数据处理赏罚——去掉数据大量缺失的变量


运行小措施处理赏罚后,数据字段数镌汰到234个,缺失值较多的字段都被移除了。

RapidMiner缺失数据处理赏罚——去掉数据大量缺失的变量


虽然,我们也可以用险些无所不能的数据说明器材R说话来完成这项使命。详细代码如下:

##### 该函数将移除原始数据(odf)中数据缺失量大于给定比例(missingPercent)的列
##### Author: Carl Wu(吴文旷)
removeMissingCols <- function (odf,missingPercent){
  cols <- ncol(odf)
  rows <- nrow(odf) 
  newMaxtrix <- NULL
  names_new <- NULL
  
  noMissVals <- 0
  for(col in 1:cols){
    noMissVals <- 0
    for(row in 1:rows){
      if(!is.na(odf[row,col])){
        noMissVals <- noMissVals +1
      }
    }
    #假如这一列缺失值的比例小于给定的比例,则留下该列
    if((rows-noMissVals)/rows <= missingPercent){
      newMaxtrix <- cbind(newMaxtrix,odf[,col])
      names_new <- c(names_new,names(odf)[col])
      
    }
  }
  
  new_data <- as.data.frame(newMaxtrix)
  names(new_data) <- names_new
  new_data
}

其它,在R说话的DMwR包中有一个函数叫manyNAs,可以移除缺失值大于必然比例的样本。留意这里是样本,而不是数据列。示例代码如下:

#读取原始数据
data_original <- read.table("original_data.csv",header = TRUE,sep = ",")
#下面代码打印出原始数据有123行,41个变量
dim(data_original)
#加载DMwR
library(DMwR)
#列出全部缺失值大于40%(0.4)的样本号
manyNAs(data_original,0.4)
#去掉缺失值大于40%(0.4)的样本,将新的数据实习集赋值到一个新的数据框new_data中
new_data <- data_original[-manyNAs(data_original,0.4),]
#下面代码打印出新数据的维数,新的数据有112行,41个变量。原始数据中的12个样本因为缺失值大于40%而被移除。
dim(new_data)

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读