如何使用 R 计算 400 万边缘网络中的中心性度量?

机器算法验证 r 数据可视化 网络
2022-03-19 05:06:33

我有一个 CSV 文件,其中包含 400 万条有向网络的边,代表人们相互通信(例如,约翰向玛丽发送消息,玛丽向安发送消息,约翰向玛丽发送一条消息等)。我想做两件事:

  1. 找到每个人的度数、介数和(可能)特征向量中心度度量。

  2. 获得网络的可视化。

我想在 Linux 服务器的命令行上执行此操作,因为我的笔记本电脑没有太多电量。我在该服务器和 statnet 库上安装了 R。我发现这个 2009 年的帖子有人比我更有能力尝试做同样的事情并遇到问题。所以我想知道是否有其他人对如何执行此操作有任何指示,最好一步一步地指导我,因为我只知道如何加载 CSV 文件而没有别的。

只是给你一个想法,这就是我的 CSV 文件的样子:

$ head comments.csv
    "src","dest"
    "6493","139"
    "406705","369798"
$ wc -l comments.csv 
4210369 comments.csv
4个回答

您拥有的是一个边缘列表,可以使用网络库将其转换为网络对象。这是一个使用虚构数据的示例。

library(network)

src <- c("A", "B", "C", "D", "E", "B", "A", "F")
dst <- c("B", "E", "A", "B", "B", "A", "F", "A")

edges <- cbind(src, dst)
Net <- as.network(edges, matrix.type = "edgelist")

summary(Net)
plot(Net)

但是,需要警告:您有一个非常大的网络,我不确定情节是否会提供所有信息。它可能看起来像一个大纱线球。我也不确定这些库如何处理如此大的数据集。我建议您查看 network、statnet 和 ergm 库的文档。Journal of Statistical Software (v24/3) 提供了几篇涵盖这些库的文章问题可以在这里找到:

http://www.jstatsoft.org/v24

我不认为 R 是这里的首选(也许我错了)。您将需要巨大的数组来索引并以适当的数据格式准备您的网络文件。首先,我将尝试使用 Jure 的(Rob 在上面的帖子中提到他)的SNAP库;它是用 C++ 编写的,在大型网络上运行良好。

Gephi ( http://gephi.org/ ) 可能是探索数据的一种简单方法。您几乎可以肯定地对其进行可视化,并执行一些计算(尽管我已经有一段时间没有使用它了,所以我不记得所有的功能)。

从过去使用 700 万个节点的网络的经验来看,我认为可视化你的完整网络会给你一个无法解释的图像。我可能会建议使用您的数据子集进行不同的可视化,例如仅使用具有最多入站或出站链接的前 10 个节点。我支持 celenius 关于使用 gephi 的建议。