Форматирование начальных конечных данных для динамической визуализации сети - PullRequest
0 голосов
/ 09 мая 2019

Я смотрю на то, как со временем меняются правительственные учреждения.Планируется использовать пакет ndtv для визуализации изменений.Однако я сталкиваюсь с проблемами и понятия не имею, что я делаю неправильно!Я подозреваю, что мои данные не отформатированы правильно.

У меня есть список узлов, в котором перечислены идентификаторы вершин, название агентства, начало узла и конечный узел:

nodelist <- read.csv("https://github.com/aterhorst/data/raw/master/edgelist.csv", header=T, stringsAsFactors = F)

и список ребер, показывающий начало, конецребра:

edgelist <- read.csv("https://github.com/aterhorst/data/raw/master/edgelist.csv", header=T, stringsAsFactors = F)

Я могу довольно легко создать сетевой объект:

library(tidyverse)
library(sna)
nw <- network(edgelist %>% select(head, tail),
              vertex_attr = nodelist %>% select(vertex.id, agency),
              vertex.attrnames = c("vertex.id", "agency"),
              directed = F)
print(nw)
plot(nw)

Теперь я хочу создать динамический сетевой объект:

library(tsna)
library(ndtv)
dn <- networkDynamic(nw, 
                     edge.spells = edgelist,
                     vertex.spells = nodelist)

ТогдаКолёса отваливаются:

Error in networkDynamic(nw, edge.spells = edgelist, vertex.spells = nodelist) : 
  vertex.spells requires the vertex.id column to be numeric

Я пытался изменить начало, конец с целого на числовое - без разницы.Я пробовал разные способы создания динамического сетевого объекта, например

dn <- networkDynamic(edge.spells = edgelist)

Это приводит к этой ошибке:

Initializing base.net of size 2020 imputed from maximum vertex id in edge records
Error in activate.edges(base.net, onset = edge.data[, 1], terminus = edge.data[,  : 
  Onset times must precede terminus times in activate.edges.

и:

dn <- networkDynamic(edge.spells = edgelist, vertex.spells = nodelist)

дает мне эту ошибку:

Error in networkDynamic(edge.spells = edgelist, vertex.spells = nodelist) : 
  vertex.spells requires the vertex.id column to be numeric 

Я играл с порядком edge.spell, и это дало положительный результат:

 dn <- networkDynamic(net, 
                      edge.spells = edgelist %>% select(onset, terminus, tail, head))

Edge activity in base.net was ignored
Created net.obs.period to describe network
 Network observation period info:
  Number of observation spells: 1 
  Maximal time range observed: 2014 until 2020 
  Temporal mode: continuous 
  Time unit: unknown 
  Suggested time increment: NA 

Все хорошо.Теперь, когда я добавляю vertex.spell, я получаю эту ошибку:

dynamicNet <- networkDynamic(net, 
                         edge.spells = edgelist %>% select(onset, terminus, tail, head), 
                         vertex.spells = nodelist %>% select(onset, terminus, vertex.id) %>% 
                         mutate(vertex.id = as.numeric(vertex.id)))

Error in networkDynamic(net, edge.spells = edgelist %>% select(onset,  : 
  vertex.spells requires the vertex.id column to be numeric

Что странно, поскольку я явно указал vertex.id как числовой!Очевидно, я где-то разбираюсь с форматированием, но не очевидно где.Любая помощь будет оценена.

1 Ответ

1 голос
/ 14 мая 2019

В этом случае я не думаю, что вам нужно сначала создавать статическую сеть (хотя это должно работать).Кажется, что основная проблема заключается в упорядочении столбцов в списках.Файл справки ?networkDynamic указывает, что он требует определенного порядка для edge.spells и vertex.spells:

edge.spells "... Предполагается, что он [начало, конец, хвостовая вершина.id, head vertex.id]. ... "

vertex.spells" ... Предполагается, что [onset, terminus, vertex.id] "

Ваши данные выглядятнапример:

> head(nodelist)
  vertex.id                                  agency onset terminus
1         1                             AAF Company  2014     2020
2         2              Aboriginal Hostels Limited  2014     2020
3         3         Administrative Appeals Tribunal  2014     2020
4         4 Aged Care Quality and Safety Commission  2014     2020
5         5                   Airservices Australia  2014     2020
6         6  Albury-Wodonga Development Corporation  2014     2020
> head(edgelist)
  head tail onset terminus
1   10    3  2014     2020
2   10   11  2014     2020
3   10   12  2014     2020
4   10   18  2014     2020
5   10   22  2014     2020
6   10   23  2014     2020

Так что, если столбцы ваших данных переупорядочены ..

nd <-networkDynamic(edge.spells = edgelist[,c(3,4,2,1)],
  vertex.spells=nodelist[,c(3,4,1)])

Initializing base.net of size 217 imputed from maximum vertex id in edge records
Created net.obs.period to describe network
 Network observation period info:
  Number of observation spells: 1 
  Maximal time range observed: 2014 until 2020 
  Temporal mode: continuous 
  Time unit: unknown 
  Suggested time increment: NA 

Это создает сетевой объект и динамику.Поскольку ваш nodelist имеет только одну строку на вершину, метки можно вводить с помощью

network.vertex.names(nd)<-nodelist$agency
...