作为网络分析的新手,我正在努力将要绘制的事件级数据集转换为正确的形状。我很感谢任何提示/线索/等。到目前为止,我所做的大致遵循此介绍。
有问题的数据集包含政党 Jobbik 组织的事件。由唯一 id ( id
) 定义的每个事件都有关联的组织发起人 ( org_names
) 及其类型 ( org
)。org_1
、org_2
或org_names1
和之间没有层次结构org_names2
。
最初,数据集采用宽格式。虽然我不确定这是否是我应该做的,但我要做的第一步是将数据转换为长格式并清理一些字符串。这是读取数据并将其转换为长格式的代码:
jobbik <- read.csv("http://eborbath.github.io/stackoverflow/jobbik.csv")
library(tidyverse)
library(stringr)
library(igraph)
# long format
jobbik <- reshape(as.data.frame(jobbik), dir='long',
varying=list(c(3:13), c(14:24)),
v.names=c('org_names', 'org'), times = c(as.character(seq(1:11))))
jobbik$org <- str_trim(jobbik$org, side="both")
jobbik$org_names <- str_trim(jobbik$org_names, side="both")
jobbik <- jobbik %>%
filter(!(org=="no other organizer" & org_names=="")) %>%
filter(!(org=="JOBBIK" & org_names %in% c("Jobbik",
"Jobbik Magyarországért Mozgalom",
"",
"JObbik",
"jobbik",
"aktivisté Jobbiku",
"a Jobbik"))) %>%
mutate(org_names=ifelse(org_names=="", org, org_names)) %>%
distinct(.)
在下一步中,我想创建网络数据集。为此,我计算了每个独特组织参与 Jobbik 活动的次数。添加 Jobbik 作为每条边的一侧并用 igraph 绘制数据:
network <- jobbik %>%
select(id, org_names) %>%
group_by(org_names) %>%
summarise(weight = n()) %>%
ungroup() %>%
mutate(from=1,
org_names=as.factor(org_names)) %>%
mutate(org_id=as.numeric(factor(org_names)))
edges <- network %>% select(from, org_id, weight)
nodes <- network %>% select(org_id, org_names) %>%
mutate(org_names=as.character(org_names))
routes_igraph <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
plot(routes_igraph, layout = layout_with_graphopt)
虽然它运行并创建了网络,但它只能让我了解每个独特的组织和 Jobbik 之间的关系,而不是这些不涉及 Jobbik 的组织之间的关系。我意识到错误出在我所做的数据转换中,我应该使用事件级别的信息来计算每个组织对参与组织某事的次数,然后绘制该数据。不幸的是,虽然我不知道如何到达那里。我很感激任何帮助。