R语言 社会网络分析
社会网络分析(SNA)是通过使用图论来探索或检查社会结构的过程。它用于测量和分析网络的结构属性。它有助于测量团体、组织和其他连接实体之间的关系和流动。
在我们开始之前,让我们看看一些网络分析的术语
- 网络被表示为一个图形,它显示了每个顶点(或节点)和其邻居之间的链接(如果有的话)。
- 表示顶点之间联系的线被称为边。
- 一组顶点,如果通过图上的边可以相互到达,则称为一个组件。
- 从一个顶点到另一个顶点的沿线被称为路径。
为了进行网络分析,需要使用以下软件
- R软件
- 软件包。
- igraph
- sna (社会网络分析)
社会网络分析中使用的函数
- library() function
library()函数加载和附加附加包。
语法:
library(package, help, logical.return = FALSE....)
- make_full_graph() function
该函数用于创建一个完整的图形。
语法:
make_full_graph(n, loops = FALSE, directed = FALSE)
- make_ring() function
环是一个一维的格子,它可以创建任意维度的格子,周期性或非周期性的格子。
语法:
make_ring(n, directed = FALSE, circular = TRUE, mutual = FALSE)
- make_star() function
这个函数创建了一个星形图,其中每个顶点都与中心顶点相连,而没有其他顶点。
语法:
make_star(n, center = 1, mode = c("in", "out", "mutual", "undirected"))
- sample_gnp() function
这是一个简单的模型,每个可能的边都是以相同的恒定概率创建的。
语法:
sample_gnp(n, p, loops = FALSE, directed = FALSE)
- plot() function
该函数用于在活动图形窗口中绘制给定的图形。
语法:
plot(defined_graph_name)
创建图表样本
完整的图表
语法
make_full_graph ()
参数
- 顶点的数量。
- directed = TRUE/FALSE 是否创建一个有向图。
- loops = TRUE/FALSE 是否在图中添加自循环。
例子
library(igraph)
Full_Graph <- make_full_graph(8, directed = FALSE)
plot(Full_Graph)
输出:

环形图
环形图是一个一维网格,是make_lattice函数的一个特例。
语法
make_ring ()
参数
- 顶点的数量。
- directed =TRUE/FALSE 是否创建一个有向图。
- mutual =TRUE/FALSE 有向的边是否是相互的。在无向图中,它被忽略。
- circular =TRUE/FALSE 是否创建圆形环。
例子
library(igraph)
Ring_Graph <- make_ring(12, directed = FALSE, mutual = FALSE, circular = TRUE)
plot(Ring_Graph)
输出:


星形图
星形图是指每一个顶点都与中心顶点相连,而没有其他顶点。
语法
make_star()
参数
- 顶点的数量
- center = 中心顶点的标识
- 模式 = 它定义了边的方向,即进/出/互换/不定向。
- in – 边缘指向中心。
- out – 边缘从中心指向。
- mutual – 用相互的边创建一个有向星形图。
- undirected – 边缘是不定向的。
例子
library(igraph)
Star_Graph <- make_star(10, center = 1)
plot(Star_Graph)
输出:

生成随机图(gnp)
下面的图形是以给定的常数概率随机生成的,可以创建一条边。
语法
sample_gnp()
参数
- 图中顶点的数量
- 在随机顶点之间画一条边的概率
- 有向 = FALSE/TRUE
- 循环 = FALSE/TRUE
例子
library(igraph)
gnp_Graph <- sample_gnp(20, 0.3, directed = FALSE, loops = FALSE)
plot(gnp_Graph)
同样地,你可以通过改变参数来尝试不同的图形,如下所示。
输出:




分析图形
图的连接性
图中顶点的基本衡量标准之一是它们与其他顶点有多少联系。这个衡量标准可以是连接数占总的可能连接数的比例,也叫密度。
现在让我们来找出随机图中每个节点/顶点的程度。
语法
degree(graph)
程度函数是用来找出每个顶点所连接的顶点数量。
例子
library(igraph)
gnp_Graph <- sample_gnp(7, 0.4, directed = FALSE, loops = FALSE)
plot(gnp_Graph)
degree(gnp_Graph)
输出

图的间隙度
在社会网络中,interness被定义为网络成员群体之间的桥梁。计算间性的一种方法是计算每个顶点的间性。一般来说,与一个顶点相关的间性得分越高,对网络的控制就越强。
语法
betweenness(graph)
betweenness()函数的定义是经过一个顶点或一条边的最短路径的数量。
例子
library(igraph)
gnp_Graph <- sample_gnp(7, 0.4, directed = FALSE, loops = FALSE)
plot(gnp_Graph)
betweenness(gnp_Graph)
输出

网络密度
网络的密度被定义为连接数与可能连接数的总和。一个完整的图的密度=1,而其他网络可以有一个十进制的值。
语法
edge_density(graph)
它是边的数量与可能的边的总数的比率。
例子
library(igraph)
sample_graph <- sample_gnp(10, 0.3, directed = FALSE)
plot(sample_graph)
sample_density <- edge_density(sample_graph, loops = FALSE)
sample_density
输出

识别网络中的悬崖
悬崖可以被定义为一组顶点,其中所有可能的链接都存在。
语法
cliques(graph, min=NULL,max=NULL)
这个函数可以找到无定向图中所有最大或最大的悬崖。
例子
library(igraph)
sample_graph <- sample_gnp(20, 0.3, directed = FALSE, loops = FALSE)
plot(sample_graph)
clique_num(sample_graph, min=4)
输出

寻找图的组成部分
一组相连的网络顶点被称为一个组件。因此,一个有可能有多个不相互连接的组件。
语法
components(graph)
这将计算出一个图的强连接或弱连接部分。
例子
library(igraph)
sample_graph <- sample_gnp(30, 0.07, directed = FALSE, loops = FALSE)
plot(sample_graph)
components(sample_graph)
输出

图上的随机行走
现在让我们使用random_walk函数生成一个随机图并在其中行走。
语法
random_walk(
graph,
start_node,
Number_of_steps,
stuck = "return"/"error"
)
这个函数允许我们从start_node开始做随机行走,直到Number_of_steps,如果卡住或不能前进,则返回或给出错误。
例子
library(igraph)
sample_graph <- sample_gnp(30, 0.07, directed = FALSE, loops = FALSE)
plot(sample_graph)
random_walk(sample_graph, 8, 10, stuck = "return")
输出

网络的可视化
改变边和顶的颜色
现在我们将尝试学习如何修改顶点和边的颜色,使图形更加丰富多彩。


set_vertex_attr(graph, name_attr, value)
我们将尝试用这个函数来设置顶点的一个特定属性值。
set_edge_attr(graph, name, value)
这将是一个类似的函数,但不同的是它设置了边缘的属性。
写出一个图形
使用下面的函数,你可以将图形的边缘列表保存到你的计算机上,并指定路径。
write.graphs()


setwd(dir)
设置工作目录功能允许你设置你想要的工作目录。
注意: 在设置路径时,所有的反斜线应改为正斜线。
getwd()
这个函数返回你当前使用的dir路径。
write_graph(graph, format)
这个功能允许你以特定的格式导出图形,如 edgelist/pajek/ncol/lgl/graphml/dimacs/gml 等。
极客教程