使用 R 编程进行社交网络分析
社会网络分析(SNA)是利用图论探索或检验社会结构的过程。它用于测量和分析网络的结构特性。它有助于衡量团体、组织和其他相关实体之间的关系和流动。
在开始之前,让我们看一些网络分析术语
- 网络被表示为一个图,它显示了每个顶点(或节点)与其邻居之间的链接(如果有的话)。
- 表示顶点之间链接的线称为边。
- 通过图上的边可以相互到达的一组顶点称为一个组件。
- 从一个顶点到另一个顶点的边称为路径。
执行网络分析需要以下软件
- 软件
- 套餐:
- 图形
- sna(社交网络分析)
社交网络分析中使用的函数
- 库()函数
library()
函数加载和附加附加包。句法:
library(package, help, logical.return = FALSE....)
- make_full_graph()函数
此函数用于创建完整图形。句法:
make_full_graph(n, loops = FALSE, directed = FALSE)
- make_ring()函数
环是一维晶格,它可以创建任意维度的晶格,周期性的或非周期性的。句法:
make_ring(n, directed = FALSE, circular = TRUE, mutual = FALSE)
- make_star()函数
此函数创建一个星图,其中每个顶点都连接到中心顶点,没有其他顶点。句法:
make_star(n, center = 1, mode = c("in", "out", "mutual", "undirected"))
- sample_gnp()函数
这是一个简单的模型,其中每个可能的边都是以相同的恒定概率创建的。句法:
sample_gnp(n, p, loops = FALSE, directed = FALSE)
- 绘图()函数
此函数用于在活动图形窗口中绘制给定图形。句法:
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 是否创建有向图。
- 相互 =TRUE/FALSE 有向边是否相互。在无向图中被忽略。
- circular =TRUE/FALSE 是否创建圆环。
例子:
library(igraph)
Ring_Graph <- make_ring(12, directed = FALSE, mutual = FALSE, circular = TRUE)
plot(Ring_Graph)
输出:
星图
星形图是每个顶点都连接到中心顶点而没有其他顶点的地方。
句法:
make_star()
参数:
- 顶点数
- center = 中心顶点的 ID
- 模式=它定义边缘的方向进/出/相互/无向。
- in – 边缘指向中心。
- out – 边缘指向中心。
- 相互的——一个有向星图是用相互的边创建的。
- 无向的——边是无向的。
例子:
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)
输出:
图的介数
在社交网络中,介数被定义为网络成员群体之间的桥梁。计算介数的一种方法是计算每个顶点的介数。一般来说,与顶点相关的介数分数越高,对网络的控制就越多。
句法:
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)
输出:
查找图的组件
一组连接的网络顶点称为一个组件。因此,a 可能有多个未互连的组件。
句法:
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)
设置工作目录函数允许您设置所需的工作目录。
Note: While setting the path all the back-slashes should be changed to forward-slashes.
getwd()
此函数返回您正在使用的当前目录路径。
write_graph(graph, format)
此函数允许您以特定格式导出图形,例如edgelist/pajek/ncol/lgl/graphml/dimacs/gml等。