2017-09-20 2 views
2

Je suis intéressé par l'utilisation d'un diagramme de réseau de cooccurrence similaire à celui affiché sur section 8.2.2 Tidy Text mining book de David Robinson et Julia Silge, tels que ce tableau, sauf que je voudrais avoir la taille des noeuds changent en fonction du nombre de fois le terme apparaît dans les données: enter image description hereAjout de la taille du nombre de mots en tant que calque à la taille du noeud sur un graphique de cooccurrence en utilisant tidytext

le tableau ci-dessus a été établi avec le code suivant:

library(tidytext) 
library(tidyverse) 
library(widyr) 
library(igraph) 
library(ggraph) 
library(jsonlite) 

metadata <- fromJSON("https://data.nasa.gov/data.json") 
nasa_keyword <- data_frame(id = metadata$dataset$`_id`$`$oid`, 
          keyword = metadata$dataset$keyword) %>% 
    unnest(keyword) 

keyword_cors <- nasa_keyword %>% 
    group_by(keyword) %>% 
    filter(n() >= 50) %>% 
    pairwise_cor(keyword, id, sort = TRUE, upper = FALSE) 

set.seed(1234) 
keyword_cors %>% 
    filter(correlation > .6) %>% 
    graph_from_data_frame() %>% 
    ggraph(layout = "fr") + 
    geom_edge_link(aes(edge_alpha = correlation, edge_width = correlation), edge_colour = "royalblue") + 
    geom_node_point(size = 5) + 
    geom_node_text(aes(label = name), repel = TRUE, 
       point.padding = unit(0.2, "lines")) + 
    theme_void() 

J'ai joué avec geom_node_point(aes(size = ??)) mais je n'arrive pas à comprendre comment configurez le code pour le faire. Une partie du problème à moi est que la fonction graph_from_data_frame() transforme la trame de données en un objet regardant assez complexe.

Répondre

2

Je voudrais avoir la taille des noeuds changent en fonction plusieurs fois le terme apparaît dans les données

Vous pouvez faire

set.seed(1234) 
keyword_cors %>% 
    filter(correlation > .6) %>% 
    graph_from_data_frame(vertices = nasa_keyword %>% count(keyword) %>% filter(n >= 50)) %>% 
    ggraph(layout = "fr") + 
    geom_edge_link(aes(edge_alpha = correlation, edge_width = correlation), 
       edge_colour = "royalblue") + 
    geom_node_point(aes(size = n)) + scale_size(range = c(1,10)) + 
    geom_node_text(aes(label = name), repel = TRUE, 
       point.padding = unit(0.2, "lines")) + 
    theme_void() 

Cela vous donne quelque chose comme ceci:

enter image description here

  • vertices = nasa_keyword %>% count(keyword) %>% filter(n >= 50) ajoute des informations de noeud le graphique, plus précisément: l'identifiant de noeud (première colonne ) et le nombre d'occurrences n (deuxième colonne).
  • aes(size = n) fait correspondre cette information à la taille du nœud.
  • scale_size(range = c(1,10)) définissez les tailles de points maximales et minimales .