R语言原始代码如下,能正确执行:

install.packages(“rJava”)

options(java.parameters = “-Xmx1024m”)
library(“rJava”)
source(“MINE.r”)
MINE(“WHO.csv”,”all.pairs” )

如果不能执行可以参考以下进行修改。

空值处理问题参考了论坛里的代码。
1)安装jdk不说了,装了然后配置环境变量
再下载数据,MINE.jar MINE.r 丢到R的工作目录里
然后将MINE.r第二行改为
.jinit(classpath=”MINE.jar”,parameters=”-Xmx1024m”)
防止待会跑数据的内存溢出。不改肯定溢出的。
2)对数据进行清洗,处理,就是删掉缺失值太多的行,将其他缺失值换成NA,否则跑plot命令会因为空行出错的。
还有个rJava包引用的JAVA_HOME跟一般JAVA开发者配的变量不一样,是个JRE路径,要在程序里显式指定下,不然会报错
Sys.setenv(JAVA_HOME=’C:\Program Files\Java\jdk1.6.0_45\jre’)
setwd(‘E:\workspace\myeclipsWorkSpace\RTest\week8’)
Sys.setenv(CLASS_PATH=’.’)
source(“MINE.r”)
who = read.csv(“WHO.csv”);

删除所有值都缺失的变量

which(!apply(!is.na(who),2,any))

第322个变量全部是缺失值,删除

names(who)[322]
who=who[,-322]

统计每一行有多少缺失值

x=NULL
for(i in1:length(airquality[,1]))
{ x=c(x,sum(!complete.cases(t(who[i,]))))
}

删去缺失值太多的记录,缺失值>=150,可以自由设置

who1=who[-c(which(x>=150)),]

用最近邻方法进行插补

library(cluster)
who2=who1[,3:length(who[1,])]
dist.mtx <- as.matrix(daisy(who2,stand=T)) #计算欧式距离的矩阵
for(r inwhich(!complete.cases(who2)))
for(c in which(!complete.cases(t(who2[r,]))))
who2[r,c]=median(who2[as.integer(names(sort(dist.mtx[r,]))),c][2:11],na.rm=T)
who.final=merge(who[,1:2],who2)
write.csv(who, file = “WHO2.csv”);
MINE(“WHO2.csv”,”all.pairs”)
3)对感兴趣的数据进行挖掘
Sys.setenv(JAVA_HOME=’C:\Program Files\Java\jdk1.6.0_45\jre’)
setwd(‘E:\workspace\myeclipsWorkSpace\RTest\week8’)
Sys.setenv(CLASS_PATH=’.’)
who = read.csv(“WHO2.csv”);
plot(who$Under.5.mortality.rate..Probability.of.dying.aged..lt..5.years.per.1.000.live.births..rural~who$Children_per_woman,xlab=”每名妇女的儿童”,ylab=”5岁以下儿童死亡率(每1000个活产儿5岁死亡的概率)男女”);
plot(who$Literacy_rate_youth_male~who$Literacy_rate_adult_male,xlab=”青年男子识字率”,ylab=”成年男子识字率”);

plot(who$Energy_use~who$Income_per_person,xlab=”人均收入”,ylab=”能源使用”);

孩子生的越多,孩子死亡率越高

发表评论