【发布时间】:2020-01-19 09:44:33
【问题描述】:
作为网络分析的新手,我正在努力将要绘制的事件级数据集转换为正确的形状。我很感谢任何提示/线索/等。到目前为止,我所做的大致遵循 this 介绍。
相关数据集包含政党 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 的组织之间的关系。我意识到错误出在我所做的数据转换中,我应该使用事件级别的信息来计算每个组织对参与组织某事的次数,然后绘制该数据。不幸的是,虽然我不知道如何到达那里。我很感激任何帮助。
【问题讨论】:
标签: r igraph network-analysis data-transform