R语言︱SNA-社会关系网络—igraph包(社群划分、画图)(三)

article/2025/9/17 9:29:43



每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————


社群划分跟聚类差不多,参照《R语言与网站分析》第九章,社群结构特点:社群内边密度要高于社群间边密度,社群内部连接相对紧密,各个社群之间连接相对稀疏。


社群发现有五种模型:点连接、随机游走、自旋玻璃、中间中心度、标签发现。

评价社群三个指标:模块化指标Q、网络聚类系数、网络密度。

画图有三种方法:直接plot、书中自编译函数、SVG。


———————————————————————————————————


不同社群划分模型的区别



社群模型概念效果
点连接某点与某社群有关系就是某社群的最差,常常是某一大类超级多
随机游走利用距离相似度,用合并层次聚类方法建立社群运行时间短,但是效果不是特别好,也会出现某类巨多
自旋玻璃关系网络看成是随机网络场,利用能量函数来进行层次聚类耗时长,适用较为复杂的情况
中间中心度找到中间中心度最弱的删除,并以此分裂至到划分不同的大群落耗时长,参数设置很重要
标签传播通过相邻点给自己打标签,相同的标签一个雷跟特征向量可以组合应用,适用于话题类


———————————————————————————————————


一、社群发现模型


1、基于点连接的社群发现——clusters


如果一个点与社群有联系则放在一个网络中,简单易懂,耗时短,但是分类效果并不特别好。




clusters(g.dir,mode="weak")

mode是用来选择强关联还是弱关联,weak or strong.


2、随机游走的社群发现



member<-walktrap.community(g.undir,weights=E(g)$weight,step=4)
weight代表线权重,默认就是E(g)$label;step代表游走步长,越大代表分类越粗糙,分类类别越小。默认为4.

3、自旋玻璃社群发现


member<-spinglass.community(g.undir,weights=E(g.undir)$weight,spins=2)
#需要设置参数weights,因为无默认值
weight代表线权重,但是与随机游走不同,其要自己赋上去,weight=E(g)$label不能少;spins代表产生的社群数,默认值为25。
这个社群分类函数有了自己定义分类数量的效果。


4、中间中心度社群发现




member<-edge.betweenness.community(g.undir,weight=E(g)$weight,directed=F)

有默认的线权重,并且默认是无向线的,directed=T时就代表有向线。


5、传播标签社群发现



#社群发现方法五:标签传播社群发现
member<-label.propagation.community(g.undir,weights=V(g.undir)$weight)
V(g.undir)$member
member<-label.propagation.community(g.undir,weights = E(g.undir)$weight,initial = c(1,1,-1,-1,2,-1,1))
V(g.undir)$member
member<-label.propagation.community(g.undir,weights = E(g.undir)$weight,initial = c(1,1,-1,-1,2,-1,1),fixed=c(T,F,F,F,F,F,T))

initial是社群初始化函数,默认为-1(不设置初始值),当然这里你也可以设置;如initial=c(1,1,-1,-1,2)就代表1,2个数为社群1;3、4不设置初始值;5个为社群2
fixed是用来固定函数的,当然如果没有设定初始值,如3.4.6则T,F都无效;如果设定了初始值,T则代表固定在原设定上。


———————————————————————————————————


二、衡量社群的指标


1、模块化指标Q——modularity


相当于是组内误差。

modularity(g.undir,membership=c(1,1,1,2,2,2,2))  #社群总差异,membership设置社群号

membership是每个点的各自分组情况。




2、网络聚类系数——transitivity


按照图形理论,聚集系数是表示一个图形中节点聚集程度的系数,一个网络一个值。

transitivity(g)
可以衡量网络中关联性如何,值越大代表交互关系越大。说明网络越复杂,越能放在一块儿,聚类。
比如c(1,2,2,3,3,1)=1;c(1,2,2,3,3,1,1,4,4,3)=0.75,他是衡量是否有loop,能否找到循环到自己的线,三元组。


3、网络密度——graph.density


跟网路聚类系数差不多,也是用来形容网络的结构复杂程度。越大,说明网络越复杂,说明网络越能够放在一块。

graph.density(g.zn)
graph.density(group1)
graph.density(group2)
#从中可以看到不同社群与整体之间的网络密度情况(关联程度)


———————————————————————————————————


三、画 图


由于关系网络图很复杂,而且数据量一大,小的图片形式网路图基本就是一坨浆糊。所以这里JPEG一定要足够大,最好的就是SVG格式。SVG格式的好处就是矢量图,你可以自己放大缩小,而且还可以用工具进行修改。但是最不好就是,一般的工具还打开不了,要用一些特有的工具,打开之后也会出现一些问题。

当然你是可以直接plot的。


1、直接plot


plot(g.test,layout=layout.fruchterman.reingold,edge.arrow.size=0.1,vertex.color=rainbow(7,alpha=0.3),edge.arrow.mode = "-")

代码解读:edge.arrow.size=0.1箭头大小;

vertex.color=rainbow(7,alpha=0.3)颜色,七种;

edge.arrow.mode = "-"连接方式用-。

其中还有很多参数类型:

#vertex.size=1表示节点的大小
#layout表示布局方式(发散性)
#vertex.label=NA,不显示任何点信息,默认显示idx号
#vertex.color=V(g)$color 点的颜色设置
#mark.groups表示设置分组
#vertex.shape='none'不带边框 
#vertex.label.cex=1.5, #节点字体大小
#vertex.label.color='red'
#edge.arrow.size=0.7 #连线的箭头的大小
#edge.color = grey(0.5)#线的颜色
#edge.arrow.mode = "-" 箭头换成线
#vertex.label.dist=5  点标签和节点之间的距离一般0.1,便于错开重叠


2、简易画图自编译函数


R语言与网站分析中还专门写了一个画图函数。

plot.membership<-function(graph,membership,main=""){V(graph)$member<-membershipmem.col<-rainbow(length(unique(membership)),alpha=0.3)V(graph)$color<-mem.col[membership]plot(graph,edge.width=E(graph)$weight,vertex.color=V(graph)$color,main=main)
}

函数需要输入三样东西(关系网络,分组情况,标题)。这里借助上面的社群分类都是可以得到的。用点连接来举个例子:

plot.membership(g.undir,clusters(g.undir)$membership,"无向图的社群发现")


3、SVG如何画高质量图


画一个好看的图你需要考虑这么几个问题:

不同重要性的点是否需要不同的大小?——V(g)$size

重要的点是否要加入其名字标签?——V(g)$label

不同社群的点,是否需要不同的颜色?——V(g)$member


(1)设置点大小


V(gg)$size = 5
V(gg)[degree(g)>=3000]$size = 15

其他节点尺寸都是5,而点度数大于3000的节点尺寸是15;


(2)设置不同社群颜色


mem.col<-rainbow(length(unique(V(g)$member)),alpha = 0.3)
V(g)$color<-mem.col[V(g)$member]
rainbow是生成颜色的参数,比如"#FF00004D" "#00FFFF4D"
第二句话是将每个点附上颜色。


(3)设置重点词标签

V(g)$label=NA
V(g)[degree(g)>=3000]$label=V(gg)[degree(g)>=3000]$name

非重点词不给标签,重点词点度大于3000的给标签名字。

 

最后的SVG画图函数就是:

svg(filename=paste("C:/Users/long/Desktop","/1.svg",sep = ""),width = 40,height = 40)
plot(data.g,layout=layout.fruchterman.reingold,vertex.color=V(g)$color,vertex.label=V(g)$label,<span style="font-family: Arial, Helvetica, sans-serif;">vertex.size=V(g)$size</span>)
dev.off()

其中layout.fruchterman.reingold是发散式的布局方式。


打开SVG可以用adobe illustrator,而且也可以修改,就是笔者遇到的问题是,图中会出现很多问题。盗图一张,来自博客:社会网络分析:探索人人网好友推荐系统




每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————


http://chatgpt.dhexx.cn/article/DeLy43I7.shtml

相关文章

R语言 NetCoMi包 Co-occurrence网络图 微生物16S 网络比较 核心物种

#自己一些问题&#xff1a;里面有sparcc&#xff1f; #学习网站 https://github.com/stefpeschel/NetCoMi #Github本地安装 在上面网站找到下载 #devtools::install_local("C:/Users/xxx/Documents/NetCoMi-1.0.2.tar.gz") #加载包 安装在了R-3.6版本 librar…

windows 下载 R 和 R studio,以及R语言基本使用

目录 一. 安装与入门介绍 1. windows 下载 R 和 R studio 2. 常见问题的对应包查询 3. 解决RStudio 打开文件中文乱码 4. 相关包 5. 获取帮助、工作目录、保存 R 文件 二. R常用数据类型和数据结构 1. 数值型、字符型、逻辑型 2. 判断和转换 3. 特殊值及其判断 4. 数…

【R语言实例】igraph — 网络分析与可视化包(1)

作者简介&#xff1a; 本文作者系大学统计学专业教师&#xff0c;多年从事统计学的教学科研工作&#xff0c;在随机过程、统计推断、机器学习领域有深厚的理论积累与应用实践。 igraph是一套用于网络分析与可视化的r包&#xff0c;它以高效、便捷、使用简单的特点在网络分析研究…

社交网络分析的 R 基础:(一)初探 R 语言

写在前面 3 年的硕士生涯一转眼就过去了&#xff0c;和社交网络也打了很长时间交道。最近突然想给自己挖个坑&#xff0c;想给这 3 年写个总结&#xff0c;画上一个句号。回想当时学习 R 语言时也是非常戏剧性的&#xff0c;开始科研生活时到处发邮件要源代码&#xff0c;发完最…

使用R包networkD3绘制炫酷的动态关系网络

引言 在数据可视化领域&#xff0c;关系网络数据的可视化一直是一个受到广泛关注的话题。 我们经常会看到这样的复杂网络关系图。 也会经常看到一些影视作品的人物关系图&#xff0c;例如&#xff1a; 我们可以从图中清晰地了解到不同人物之间的关系&#xff0c;但是这样静态…

复杂网络笔记-R语言

最近学习了下复杂网络相关的东西&#xff0c;总结了部分基础的理论&#xff0c;与使用R语言igraph包&#xff0c;总结如下&#xff0c;还需要继续深入&#xff0c;目前只学了皮毛。 复杂网络的复杂性 1、结构复杂性 网络连接结构看上去错综复杂&#xff0c;网络连接结构可能…

R语言神经网络

R语言中已经有许多用于神经网络的package。例如nnet、AMORE以及neuralnet&#xff0c;nnet提供了最常见的前馈反向传播神经网络算法。 AMORE包则更进一步提供了更为丰富的控制参数&#xff0c;并可以增加多个隐藏层。 neuralnet包的改进在于提供了弹性反向传播算法和更多的激…

如何用 R 绘制交互式社会网络图?

挖掘社会关系网络&#xff0c;助你洞若观火。 需求 最近有个学生问我&#xff0c;如何绘制交互式社会网络图&#xff08;Interactive Social Network Graph&#xff09;&#xff1f; 之所以一定要交互式&#xff0c;是因为他的应用场景&#xff0c;是演示给客户。 他解释说&…

R语言如何绘制相互作用网络图(27)

1.什么是相互作用网络图&#xff1f; 生物网络是复杂网络&#xff0c;也是以系统科学的思想研究生命科学的桥梁。网络中的节点可以是蛋白质&#xff0c;基因&#xff0c;RNA或DNA等&#xff0c;网络的边对应节点之间的物理、生化或功能上的相互作用。生物分子之间的相互作用并…

R语言网络分析2:graph函数和应用

产生网络 自定义 BioC 中用得最多的网络类型可能是 graphNEL 类。使用 graphNEL 类的同名函数可以产生自定义网络&#xff1a; library(graph)str(graphNEL) #> function (nodes character(), edgeL list(), edgemode "undirected") nds <- letters[1:3]…

在R语言中轻松创建关联网络

数据 ## Ozone Solar.R Wind Temp Month Day ## 1 41 190 7.4 67 5 1 ## 2 36 118 8.0 72 5 2 ## 3 12 149 12.6 74 5 3 ## 4 18 313 11.5 62 5 4 ## 5 NA NA 14.3 56 5 5 ## 6 28 …

(转载)攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow)

堆栈溢出 堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的。了解堆栈溢出之前&#xff0c;先了解以下几个概念&#xff1a; 缓冲区 简单说来是一块连续的计算机内存区域&#xff0c;可以保存相同数据类型的多个实例。 堆栈 堆 栈是一个在计算机科学中经常使用的抽象数据类型…

关于内核堆溢出漏洞的分析

一、漏洞背景 CVE-2021-22555是一个存在了15年之久的内核堆溢出漏洞&#xff0c;它位于内核的Netfilter组件中&#xff0c;这个组件可以被用来实现防火墙、NAT等功能。 该漏洞在2006年由commit 9fa492cdc160cd27ce1046cb36f47d3b2b1efa21引入&#xff0c;并在2021年由commit …

Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞

漏洞名称&#xff1a;Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞CNNVD编号&#xff1a;CNNVD-201311-423发布时间&#xff1a;2013-11-29更新时间&#xff1a;2013-11-29危害等级&#xff1a;中危 漏洞类型&#xff1a;缓冲区溢出威胁类型&#xff1a;本地CVE编号…

hackthebox-buff(gym渗透 端口转发 cloudme 缓冲区溢出 )

1、扫描 masscan快速全局扫&#xff0c;nmap具体扫。7680不知道&#xff0c;8080是web进去搜集信息。 C:\root> masscan -p1-65535,U:1-65535 10.10.10.198 --rate1000 -e tun0Starting masscan 1.0.5 (http://bit.ly/14GZzcT) at 2021-01-17 09:36:41 GMT-- forced optio…

20181018栈溢出

所有内容参考书籍《0day安全&#xff1a;软件漏洞分析技术&#xff08;第二版&#xff09;》 缓冲区溢出 简单来说&#xff0c;缓冲区艺术就是在大缓冲区中的数据向小缓冲区复制的过程中&#xff0c;由于没注意小缓冲区的边界&#xff0c;“撑爆”了较小的缓冲区&#xff0c;…

再谈关于缓冲器溢出

废话少说(说一句废话,这是入门级的) C/C的代码: // buffer overflow code by ctorenshenguo.com #include <windows.h>#include <stdio.h>void fnHack() //the host never expect to run this{ printf("Your computer has been hacked!\n"); //ex…

Go内存溢出与内存泄露

https://www.cnblogs.com/sunsky303/p/11077030.html 一、内存泄露与内存溢出的区别 内存溢出(out of memory&#xff0c;简称OOM) 内存溢出是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;简单点说就是你要求分配的内存超出了系统能给你的&#…

(原创)攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow)

堆栈溢出 堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的。了解堆栈溢出之前&#xff0c;先了解以下几个概念&#xff1a; 缓冲区 简单说来是一块连续的计算机内存区域&#xff0c;可以保存相同数据类型的多个实例。堆栈 堆 栈是一个在计算机科学中经常使用的抽象数据类型。…

攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow) [zt]

堆栈溢出 堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的。了解堆栈溢出之前&#xff0c;先了解以下几个概念&#xff1a; 缓冲区 简单说来是一块连续的计算机内存区域&#xff0c;可以保存相同数据类型的多个实例。 堆栈 堆 栈是一个在计算机科学中经常使用的抽象数据类型…