本文将会介绍如何使用《三国演义》的数据,利用R语言构建人物关系网络并可视化。在网络中节点为人物名称,边则是根据相关系数进行设置。
首先获取网络中表示边的数据表,程序如下所示:
library(igraph)library(tidyr)## 数据准备,读取每个人物在各章(回)出现的次数数据load(file = "data/三国人物在各章出现的次数.RData")name_cor name_cor[lower.tri(name_cor)] namecordf ## 为数据添加一列人物名称变量namecordf$from ## 将数据表转化为长数据edgedf ## 只保留相关系数在0.3~1之间的连接edgedf 0.3 & edgedf$cor < 1),]head(edgedf)## from to cor## 169 曹操 荀彧 0.4310889## 225 曹操 荀攸 0.4881319## 228 荀彧 荀攸 0.3666677## 393 曹操 张辽 0.4429935## 449 曹操 徐晃 0.3891521## 505 曹操 夏侯惇 0.3205035
在上面的程序中,首先通过人物在各章出现的次数计算它们之间的相关性,然后将相关系数矩阵转化为长数据,并只保留相关系数较大的关系,可获得数据表edgedf,在数据表中from表示边的起点,to表示边的终点。
下面准备网络图中节点数据,程序如下所示:
## 读取关键人物的数据TK_name stringsAsFactors = FALSE)TK_name ## 生成节点数据表vertdf ## 添加人物出现的次数数据name_freq freq = colSums(namefredf))vertdf head(vertdf)## node group freq## 1 曹操 曹魏 945## 2 司马懿 曹魏 321## 3 荀彧 曹魏 57## 4 荀攸 曹魏 29## 5 程昱 曹魏 44## 6 张辽 曹魏 159
上面的程序中,只保留在