2015-09-15 3 views
1

Mon objectif est de faire une visualisation dynamique en utilisant trois paquets dans R: ndtv, network, et networkDynamic paquets.Comment télécharger une base de données à ndtv dans R?

J'ai créé un dataset les informations ordonnées selon cet exemple ensemble de données dans un workshop for Network Dynamic Temporal Visualizations (à la page 7.)

Selon la page 49 du manuel dynamique de réseau, un moyen de télécharger un ensemble de données et de le convertir dans un objet networkDynamic est la suivante:

rawEdges<-read.table(paste(path.package("networkDynamic"),"/enron_timebased3.tsv", sep=''),header=TRUE) 

Cependant, lorsque je tente de lancer animation.render(rawEdges)

R vomit un message d'erreur:

first argument must be a network object.

Pour résoudre ce problème, je crée un objet réseau: net<-network(rawEdges)

et essayer:

animation.render(net, rawEdges)

Nouveau message d'erreur:

Error in '$<-.data.frame'('tmp', "initial.coords", value = c(0, 0, 0, : replacement has 34 rows, data has 26)

Est-ce que quelqu'un sait comment réparer ça?

Répondre

2

pense qu'il ya quelques problèmes avec votre exemple:

  • vous devez créer un objet networkDynamic, pas un réseau objet
  • vous devrez faire une conversion de format de temps pour la table à analyser correctement, ainsi que de créer Ids numériques
  • la commande est render.animation() pas animation.render()

Tout d'abord, créons des exemples de données que nous pouvons charger. Seuls ont besoin les 4 premières colonnes de votre exemple des données:

# text version of the example data 
text<-"onset terminus tail head 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
5/7/2001 5/8/2001 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/6/2000 9/7/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
5/7/2001 5/8/2001 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
9/5/2000 9/6/2000 [email protected] [email protected] 
8/31/2000 9/1/2000 [email protected] [email protected] 
8/31/2000 9/1/2000 [email protected] [email protected]" 

# write out the example data to an example input file 
inputFile<-tempfile() 
cat(text,file=inputFile) 

Maintenant, charger la bibliothèque dynamique de réseau

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() 

Cependant, vos données d'entrée ressemble un peu drôle pour moi. Je suis certain que les données d'origine d'Enron ont des horodatages plus précis que le jour où l'e-mail a été envoyé, et cela ne devrait pas prendre une journée entière pour envoyer chaque email. Si vous pouvez trouver une version des données avec un horodatage plus précis, vous aurez beaucoup plus de flexibilité dans la manière de rendre et d'analyser les événements dynamiques. Par exemple, vous saurez l'ordre dans lequel les courriels ont été envoyés chaque jour, etc.

+0

Salut Skyebend: Merci beaucoup d'avoir pris le temps de redresser la situation. Cela me prendra un peu de temps pour voir si ça va marcher. – oymonk

+0

Salut à nouveau. Je ne pouvais pas exécuter 'timeData $ terminus <-as.numeric (comme.POSIXct (timeData $ terminus, format = '% m /% d /% Y'))' (mais 'timeData $ onset' DID a été converti en numérique. J'ai donc créé une nouvelle ligne 'timeData $ terminus <-timeData $ debut + 1'. Mais quand j'ai essayé d'exécuter 'timeData $ head <- match (timeData $ head, emails)' j'ai tapé cette erreur: 'Erreur dans' $ <-. Data.frame' ('* tmp *', "head", value = entier (0)): remplacement a 0 lignes, les données ont 26' J'ai donc modifié l'ensemble de données dans Excel (en utilisant vlookup pour remplacer les noms), et téléchargé avec 'df <-read.csv (fichier =" example2.csv ", en-tête = TRUE, sep =", ")' – oymonk

+0

Voici mon nouveau jeu de données: [link] (https://drive.google.com/file/d/0B8ss18LQyoQreUVTektVVXdBS00/view? usp = sharing) Mon plan ultime est l'algorithme de fastguide de run igraph sur les données découpées, afin que je puisse montrer comment les communautés changent au fil du temps. Merci de m'avoir aidé avec cette étape cruciale. – oymonk