Как загрузить фрейм данных в ndtv в R?
Моя цель - сделать динамическую визуализацию, используя три пакета в R: ndtv
, network
, а также networkDynamic
пакеты.
Я создал набор данных с информацией, упорядоченной в соответствии с этим примером набора данных, в мастерской для сетевых динамических временных визуализаций (на странице 7).
Согласно странице 49 руководства по сетевой динамике, один из способов загрузить набор данных и преобразовать его в объект networkDynamic заключается в следующем:
rawEdges<-read.table(paste(path.package("networkDynamic"),"/enron_timebased3.tsv", sep=''),header=TRUE)
Тем не менее, когда я пытаюсь запустить animation.render(rawEdges)
R выдает сообщение об ошибке:
Первый аргумент должен быть сетевым объектом.
Чтобы это исправить, я создаю сетевой объект:net<-network(rawEdges)
и попробовать:
animation.render(net, rawEdges)
Новое сообщение об ошибке:
Ошибка в "$<-. Data.frame" (" tmp", "initial.coords", значение = c(0, 0, 0,: замена имеет 34 строки, данные имеет 26)
Кто-нибудь знает, как это исправить?
1 ответ
Подумайте, есть несколько проблем с вашим примером:
- вам нужно будет создать
networkDynamic
объект, а не сетевой объект - вам нужно будет выполнить некоторое преобразование формата времени для правильного разбора таблицы, а также создать числовые идентификаторы
- команда
render.animation()
неanimation.render()
Во-первых, давайте настроим некоторые примеры данных, которые мы можем загрузить. Нужны только первые 4 столбца данных вашего примера:
# text version of the example data
text<-"onset terminus tail head
9/6/2000 9/7/2000 mmmarcantel@equiva.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 stephen.harrington@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 shelliott@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 jilallen@dttus.com matthew.lenhart@enron.com
5/7/2001 5/8/2001 ken.shulklapper@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 eric.bass@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 shelliott@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 bryan.hull@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 jilallen@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 shelliott@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 brook@pdq.net matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 patrick.ryder@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 eric.bass@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 mmmarcantel@equiva.com matthew.lenhart@enron.com
5/7/2001 5/8/2001 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 paul.lucci@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 jilallen@dttus.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 paul.lucci@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 bryan.hull@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 shelliott@dttus.com matthew.lenhart@enron.com
8/31/2000 9/1/2000 bryan.hull@enron.com matthew.lenhart@enron.com
8/31/2000 9/1/2000 tlenhart@corealty.com matthew.lenhart@enron.com"
# write out the example data to an example input file
inputFile<-tempfile()
cat(text,file=inputFile)
Теперь загрузите сетевую динамическую библиотеку
library(networkDynamic)
# read in tab-delimited example input file
timeData<-read.csv(inputFile,sep = "\t",stringsAsFactors = FALSE)
# check that it was loaded correctly
timeData
# convert the date formats into a numeric time (milliseconds)
timeData$onset<-as.numeric(as.POSIXct(timeData$onset,format='%m/%d/%Y'))
timeData$terminus<-as.numeric(as.POSIXct(timeData$terminus,format='%m/%d/%Y'))
# create a table of email address to map to numeric ids
emails<-unique(c(timeData$head,timeData$tail))
#covert ids
timeData$head<- match(timeData$head,emails)
timeData$tail<- match(timeData$tail,emails)
# convert to networkDynamic object
enronDyn<-networkDynamic(edge.spells=timeData)
# copy in the network names
network.vertex.names(enronDyn)<-emails
# load ndtv library
library(ndtv)
# compute the animation at 30-day interval
compute.animation(enronDyn,slice.par=list(start=967705200,end=989305200,interval=2592000,aggregate.dur=2592000,rule='latest'))
# render out the animation
render.animation(enronDyn)
ani.replay()
Тем не менее, ваши входные данные выглядят немного смешно для меня. Я почти уверен, что исходные данные электронной почты Enron имеют более точные временные метки, чем день, когда было отправлено электронное письмо, и для отправки каждого электронного письма не потребуется целый день? Если вы сможете найти версию данных с более точной временной меткой, у вас будет гораздо больше гибкости при отображении и анализе динамических событий. Например, вы будете знать порядок отправки электронных писем каждый день и т. Д.