参照“在沉默”同学的作业:http://f.dataguru.cn/thread-86232-1-1.html相关程序及数据.zip (149.3 KB)

1、实验准备

(1)下载数据集WHO.csv

(2)下载MINE.jar程序包

(3)下载MINE.r文件

2、开始做数据挖掘实验

(1)安装rJava软件包

1.>install.packages(“rJava”) 复制代码

(2)设置JVM分配的内存空间

1.>options(java.parameters=”-Xmx1024m”)

(3)将MINE.R文件放到工作空间目录下,并执行 1.>source(“MINE.R”)

(4)读取数据集WHO.csv到数据框who

1.>who=read.csv(“WHO.csv”,T)

(5)把数据框里的数据转成字符串类型

1.>str(who) 复制代码

3、处理缺失值

(1)获取缺失值判定矩阵,1表示缺失值 1.>x=as.data.frame(abs(is.na(who[,-1])))

(2)v1:v357分别替换who[,2:358]的变量名 1.>names(x)=paste(“v”,1:357,sep=””)

(3)计算数据总缺失率 1.>sum(x)/(357*202)

(4)创建一个pdf空文件

1.>pdf(“缺失值情况.pdf”,family=”GB1″)

(5)绘制各变量的数据缺失分布情况 1.>opar=par(no.readonly=T)

2.par(mfrow=c(2,1))

3.plot(table(colSums(x)),col=”red”,main=”各变量的数据缺失分布情况”,ylab=”缺失量”)

4.mtext(paste(“(较大值=”,max(colSums(x)),”; “,”均值=”,round(mean(colSums(x)),3),”; “,”标准差=”,round(sd(colSums(x)),3),”)”),3)

5.plot(table(rowSums(x)),col=”red”,main=”各记录的数据缺失分布情况”,ylab=”缺失量”)

6.mtext(paste(“(较大值=”,max(rowSums(x)),”; “,”均值=”,round(mean(rowSums(x)),3),”; “,”标准差=”,round(sd(rowSums(x)),3),”)”),3)

7.par(opar)

8.dev.off()

  上一步处理完成之后,在工作空间目录下生成who2.csv文件,精简后的数据集有180条记录,265个变量,数据量仅约为原来的65.96%,减少了近35%

(6)设定阀值剔除数据缺失严重的变量及记录1.>dc=which(colSums(x)>202*0.6)

2.dr=which(rowSums(x)>358*0.6)

3.who2=who[,-1][-dr,-dc]

4.names(who2)=names(x)[-dc]

5.dim(who2)  

6.write.csv(who2,”who2.csv”,row.names=F)

4、用MINE来分析

(1)把MINE.jar拷贝到F:Rworkspace目录下

(2)用cmd命令进到F:Rworkspace目录

(3)执行java命令(确保当前操作系统安装及配置好的JAVA环境):java -jar MINE.jar

(4)再次执行:source(“MINE.R”),将MINE.R加载到R工作环境

(5)用MINE函数来分析 1.>MINE(“who2.csv”,”all.pairs”)复制代码此命令大概执行5-10分钟后产生结果如下

5、基于MIC值绘制变量关系网络图

1.library(igraph);

2.Result<-read.csv(“who2.csv,allpairs,cv=0.0,B=n^0.6,Results.csv”,header=T)

3.Result2<-Result[which(Result[,3]>=0.9),1:3]

4.names(Result2)

发表评论