基于网络图进行分析
大数据分析,即“样本=总体”的一种数据分析,大数据分析需要突破传统强调因果关系的范式,强调相关关系。 有鉴于此,我重点挖掘数据集中变量间的关系,并通过网络图的形式可视化展现出来: |
#1、安装rJava程序包
install.packages("rJava")
#2、下载MINE.r和MINE.jar到工作目录,然后再加载:
#将JAVA虚拟机分配给程序的较大使用内存(-Xmx)设置大一些;
options(java.parameters = "-Xmx1024m")
#另一种方法是:在MINE.r的第二行.jinit()中添加parameters=参数,
#改成.jinit(classpath="MINE.jar",parameters="-Xms1024m")
source("MINE.r")
WHO<-read.csv("WHO.csv",header=T) #读取WHO数据
#也可直接从网页中调取数据:
#WHO<-read.csv("http://www.exploredata.net/ftp/WHO.csv",header=T)
str(WHO)
#WHO的原始数据集共有202个观测值,358个变量。
#1、安装rJava程序包
install.packages("rJava")
#2、下载MINE.r和MINE.jar到工作目录,然后再加载:
#将JAVA虚拟机分配给程序的较大使用内存(-Xmx)设置大一些;
options(java.parameters = "-Xmx1024m")
#另一种方法是:在MINE.r的第二行.jinit()中添加parameters=参数,
#改成.jinit(classpath="MINE.jar",parameters="-Xms1024m")
source("MINE.r")
WHO<-read.csv("WHO.csv",header=T) #读取WHO数据
#也可直接从网页中调取数据:
#WHO<-read.csv("http://www.exploredata.net/ftp/WHO.csv",header=T)
str(WHO)
#WHO的原始数据集共有202个观测值,358个变量。

#通过table(colSums(x))的结果和缺失值情况分布图,可见: #a、纵向上看,除两个变量(国家代码、所在大洲)以外,其余变量都存在至少存在9个缺失值,平均存在64个缺失值。甚至于个别变量完全没有数据,通过which(colSums(x)==202)可查的是v321,即Present_value_of_debt(债务现值); #b、横向上看,所有国家或地区都存在至少存在21个缺失值,平均存在113个缺失值;其中,缺失数据更为严重的国家或地区居然有332个变量没有数据。 #总之,数据集的数据缺失情况较为严重,有必要剔除掉数据缺失特别严重的变量和记录,再进行分析; |
#(2)设定阀值剔除数据缺失严重的变量及记录:
dc<-which(colSums(x)>202*0.6) #按数据缺失率不得高于60%为标准,删除92个变量,length(dc);
dr<-which(rowSums(x)>358*0.6) #按数据缺失率不得高于60%为标准,删除22条记录,length(dr);
WHO2<-WHO[,-1][-dr,-dc]
names(WHO2)<-names(x)[-dc]
dim(WHO2) #精简后的数据集有180条记录,265个变量,数据量仅约为原来的65.96%,减少了近35%。
#而纳入MINE()中的计算量精简率则超过265^2/357^2,即55.10%。
write.csv(WHO2,"WHO2.csv",row.names=F)
MINE("WHO2.csv","all.pairs")
#4、基于MIC值绘制变量关系网络图
library(igraph);
Result<-read.csv("WHO2.csv,allpairs,cv=0.0,B=n^0.6,Results.csv",header=T)
Result2<-Result[which(Result[,3]>=0.9),1:3] #MIC取阀值为0.9
names(Result2)<c("from","to","weight")
g = graph.data.frame(x, directed = FALSE);
#结果
IGRAPH UNW- 118 179 --
+ attr: name (v/c), weight (e/n)
#可见,MIT值不低于0.9的变量关系网络中共有118个节点,179条边。
## 画网络图
pdf("变量强关系网络图kk.pdf",family="GB1")
plot(g, main="kamada.kawai算法布局的变量强关系网络",
edge.width = E(g)$weight*2,
edge.color="black",
vertex.size=10,
vertex.label=V(g)$name,
vertex.label.cex=0.6,
vertex.label.font=2,
layout=layout.kamada.kawai) #layout.kamada.kawai,layout.fruchterman.reingold
dev.off()



由于数据挖掘只要愿意深挖,总有新的东西出来,(变量名V1-代表原始数据第二列的变量,V2代表第三列的变量,以此类推) 所以,这里仅给出部分结论: 数据集中变量间关系的大致情况:变量间的强关系(MIC值>=0.9)可分成33个集群,其中,两两成对的二元组强关系有21对,三元组强关系存在2种模式,每种模式都出现了2组;四元组也存在2中模式,每种模式都出现了1组;此外存在5个、6个甚至于10个变量(见图最下)相互关系紧密的组。基于这些组(成分)再去分析变量间关系具体的含义,就会出现一些有意思的结果噢。O(∩_∩)O~例如,有些变量是网络关系的中心,而有些变量则是桥接点。 |
#1、安装rJava程序包
install.packages("rJava")
#2、下载MINE.r和MINE.jar到工作目录,然后再加载:
#将JAVA虚拟机分配给程序的较大使用内存(-Xmx)设置大一些;
options(java.parameters = "-Xmx1024m")
#另一种方法是:在MINE.r的第二行.jinit()中添加parameters=参数,
#改成.jinit(classpath="MINE.jar",parameters="-Xms1024m")
source("MINE.r")
WHO<-read.csv("WHO.csv",header=T) #读取WHO数据
#也可直接从网页中调取数据:
#WHO<-read.csv("http://www.exploredata.net/ftp/WHO.csv",header=T)
str(WHO)
#WHO的原始数据集共有202个观测值,358个变量。
#3、处理缺失值
#因第一列数据为国家名称,为字符型,分析中排除该列
#(1)分析数据集的缺失情况:
x<-as.data.frame(abs(is.na(WHO[,-1]))) #获取缺失值判定矩阵,1表示缺失值;
names(x)<-paste("v",1:357,sep="") #v1:v357分别替换WHO[,2:358]的变量名;
sum(x)/(357*202); #计算数据总缺失率得0.3169426,即数据缺失率高达31.69%;;
pdf("缺失值情况.pdf",family="GB1")
opar<-par(no.readonly=T)
par(mfrow=c(2,1))
plot(table(colSums(x)),col="red",main="各变量的数据缺失分布情况",ylab="缺失量") #各变量的数据缺失分布情况;
mtext(paste("(较大值=",max(colSums(x)),"; ","均值=",round(mean(colSums(x)),3),"; ","标准差=",round(sd(colSums(x)),3),")"),3)
plot(table(rowSums(x)),col="red",main="各记录的数据缺失分布情况",ylab="缺失量") #各记录的数据缺失分布情况;
mtext(paste("(较大值=",max(rowSums(x)),"; ","均值=",round(mean(rowSums(x)),3),"; ","标准差=",round(sd(rowSums(x)),3),")"),3)
par(opar)
dev.off()
#(2)设定阀值剔除数据缺失严重的变量及记录:
dc<-which(colSums(x)>202*0.6) #按数据缺失率不得高于60%为标准,删除92个变量,length(dc);
dr<-which(rowSums(x)>358*0.6) #按数据缺失率不得高于60%为标准,删除22条记录,length(dr);
WHO2<-WHO[,-1][-dr,-dc]
names(WHO2)<-names(x)[-dc]
dim(WHO2) #精简后的数据集有180条记录,265个变量,数据量仅约为原来的65.96%,减少了近35%。
#而纳入MINE()中的计算量精简率则超过265^2/357^2,即55.10%。
write.csv(WHO2,"WHO2.csv",row.names=F)
MINE("WHO2.csv","all.pairs")
#4、基于MIC值绘制变量关系网络图
library(igraph);
Result<-read.csv("WHO2.csv,allpairs,cv=0.0,B=n^0.6,Results.csv",header=T)
Result2<-Result[which(Result[,3]>=0.9),1:3] #MIC取阀值为0.9
names(Result2)<c("from","to","weight")
g = graph.data.frame(x, directed = FALSE);
#结果
IGRAPH UNW- 118 179 --
+ attr: name (v/c), weight (e/n)
#可见,MIT值不低于0.9的变量关系网络中共有118个节点,179条边。
## 画网络图
pdf("变量强关系网络图kk.pdf",family="GB1")
plot(g, main="kamada.kawai算法布局的变量强关系网络",
edge.width = E(g)$weight*2,
edge.color="black",
vertex.size=10,
vertex.label=V(g)$name,
vertex.label.cex=0.6,
vertex.label.font=2,
layout=layout.kamada.kawai) #layout.kamada.kawai,layout.fruchterman.reingold
dev.off()
tkplot(g, vertex.label=V(g)$name)