R语言网络社团划分可视化及可信度

一、社团划分

1.1 使用的包

这里使用R语言中的igraph进行社团划分和可视化

1.2 包安装

install.packages("igraph")

 随便选择一个CRAN mirror,我这里选择的是China Beijing,安装好后会提示安装成功

引用igraph包

library(igraph)

1.3社团划分

以上准备过程结束后就可以开始进行社团划分了。

1.3.1读取数据

我在这里使用的邻接表,以csv格式存储,读取数据将格式转为图,这里g就是转换过来的图。

setwd("C:/")
data <- read.csv("example2.csv")
edges <- data.frame(from=data[,1],to=data[,2])
g <- graph.data.frame(edges, directed = FALSE)

1.3.2社团划分及可视化

这里使用了fast unfolding、标签传播方法和GN算法进行划分。

#Fast unfolding
system.time(mc <- mu1ltilevel.community(g, weights=NA))
print(modularity(mc))
plot(mc, g,vertex.size=5,vertex.label=NA)  
#标签传播
system.time(lc <- label.propagation.community(g))
print(modularity(lc))
plot(lc , g,vertex.size=5,vertex.label=NA)  
#GN算法
> ec <- edge.betweenness.community(g)
V(g)$size = 1  #我将大部分顶点的大小设置为1
V(g)[degree(g)>=300]$size = 5 #但度很大的顶点更大
plot(ec, g,vertex.size=5,vertex.label=NA)  

1.3.3最大社团划分结果保存

首先要找到最大的社团,我这又引用了sqldf包

#加载sql相关模块
install.packages("gsubfn")
install.packages("proto")
install.packages("RSQLite")
install.packages("sqldf")
library(gsubfn)    
library(proto)
library(RSQLite)
library(sqldf)   
#查询图中的点
resultmc <- sqldf("select * from data where x in a and y in a") 
gmc <- graph.data.frame(resultmc,directed = FALSE)
#画出子图
plot(gmc,vertex.size=5,vertex.label=NA)
#标签传播最大社团图
a <- data.frame(lc[2])
resultlc <- sqldf("select * from data where x in a and y in a")
glc <-  graph.data.frame(resultlc,directed = FALSE)
plot(glc,vertex.size=5,vertex.label=NA)
#GN算法最大社团图
a <- data.frame(ec[3])
resultec <- sqldf("select * from data where x in a and y in a")
gec <-  graph.data.frame(resultec,directed = FALSE)
plot(gec,vertex.size=5,vertex.label=NA)
#绘制度的图
degreemc<- degree(gmc,mode="all",normalized=T)
plot(degreemc)
degreelc <- degree(glc,mode="all",normalized=T)
plot(table(degreelc))
degreeec<- degree(gec,mode="all",normalized=T)
plot(degreeec)
#计算度的最大值、聚类系数、平均最短路径
max(degreemc)
transitivity(gmc)
mean_distance(gmc)
max(degreelc)
transitivity(glc)
mean_distance(glc)
max(degreeec)
transitivity(gec)
mean_distance(gec)

到此,就完成了社团划分,和最大社团的可视化,现在对最大社团进行可信度分析。

二、可信度

2.1方法

      生成1000个和最大社团相同节点数和密度的随机网络,计算这1000个随机网络的聚类系数的概率密度分布,拟合整正态分布,并计算其95%的置信区间,检验我们划分的社团的聚类系数落在哪个区间,来确认是否划分结果是否可靠。

2.2安装包

> install.packages("survival")
> install.packages("MASS")
> install.packages("fitdistrplus")
> library(fitdistrplus)

2.2生成随机网络

for(i in 1:1000){
+ g<-erdos.renyi.game(121, 0.5)
+ julei <- transitivity(g)
+ result <- c(result,julei)}
fit <- fitdist(result,"norm")
plot(fit)

2.3置信区间

mean和sd值,输入fit即可获取。

left<-mean-1.96*sd
right<-mean+1.96*sd

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Newman的网络社团分类算法是一种基于网络结构的社团发现算法,它通过计算网络中节点之间的相似性来将节点分组,从而实现社团分类的目的。 下面是使用R语言实现Newman算法的基本步骤: 1. 导入网络数据 在R语言中,可以使用igraph包来导入网络数据。可以将网络数据存储在一个.csv或.txt文件中,然后使用read.csv或read.table函数将数据读入R环境中。接下来,使用igraph::graph_from_data_frame函数将数据转换为igraph对象。 2. 计算节点相似性 Newman算法使用节点相似性来将节点分组。节点相似性可以使用各种方法计算,例如余弦相似度、欧氏距离等。在R语言中,可以使用igraph包中的各种函数来计算节点相似性。 3. 运行Newman算法 在R语言中,可以使用igraph包中的cluster_louvain函数来运行Newman算法。该函数需要输入一个igraph对象和一些参数,例如分辨率参数等。运行该函数后,将会得到每个节点所属的社团。 4. 可结果 最后,可以使用igraph包中的plot函数将结果可。可以将每个社团用不同的颜色表示,并在图中标注每个节点所属的社团。 下面是一个使用R语言实现Newman算法的简单示例: ```R library(igraph) # 导入网络数据 data <- read.csv("network.csv") g <- graph_from_data_frame(data) # 计算节点相似性 similarity <- similarity_jaccard(g) # 运行Newman算法 membership <- cluster_louvain(g, weights = E(g)$weight, resolution = 1.0) # 可结果 plot(g, vertex.color = membership$membership, vertex.label = NA) ``` 在上面的代码中,我们首先使用read.csv函数将网络数据读入R环境中,然后使用graph_from_data_frame函数将数据转换为igraph对象。接下来,使用similarity_jaccard函数计算节点相似性。然后,使用cluster_louvain函数运行Newman算法,并将结果存储在membership变量中。最后,使用plot函数将结果可
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值