📜  使用 R 编程进行社交网络分析

📅  最后修改于: 2022-05-13 01:54:51.881000             🧑  作者: Mango

使用 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)

输出:
ring_graph1

ring_graph2

星图

星形图是每个顶点都连接到中心顶点而没有其他顶点的地方。

句法:

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)

同样,您可以通过更改它们的参数来尝试不同的图表,如下所示。

输出 :
gnp1

gnp2

gnp3

gnp4

分析图表

图的连通性

图中顶点的基本度量之一是它们与其他顶点有多少连接。该度量可以是连接数与可能连接的总数,也称为密度。
现在让我们在随机图中找到每个节点/顶点的度数。

句法:

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")

输出:

随机行走

可视化网络

更改边和顶点颜色

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

换颜色

改变颜色2

set_vertex_attr(graph, name_attr, value)

我们将尝试使用此函数设置顶点的特定属性值。

set_edge_attr(graph, name, value)

这将是一个类似的函数,但不同之处在于它设置了边缘属性。

写出图表

使用以下函数,您可以将图形的边列表保存到指定路径的计算机中。

write.graphs()

写出

边缘列表

setwd(dir)

设置工作目录函数允许您设置所需的工作目录。

getwd()

此函数返回您正在使用的当前目录路径。

write_graph(graph, format)

此函数允许您以特定格式导出图形,例如edgelist/pajek/ncol/lgl/graphml/dimacs/gml等。