fbpx


Hola Mundo!

Segundo intento con wordclouds en #datosdemieRcoles . El tamaño es proporcional a la cantidad de veces que se nombró a cada personaje. Separado en colores por temporada!

Comenta una 🍍 en el tweet si pudiste hacer la gráfica!

El código para hacer la gráfica!

# Hecho por @GonzalezGouveia con gusto para
# Twitter #DatosDeMiercoles por @R4DS_es

library(tm)
library(SnowballC)
library(wordcloud)
library(RColorBrewer)
library(tidyverse)
library(ggwordcloud)

# install_packages("readr")
la_casa_de_papel <- readr::read_csv("https://bit.ly/2KgeCZk")

########################################
# Un poquito de text mining muy básico #
########################################
# corpus es el nombreque se le da al 
# conjunto de todos los textos a analizar

# stopword son palabras que no ayudan al
# análisis como "el", "la", y así...

## empezamos creando esta función auxiliar

# esta funcion va a tomar un vector con textos
# y va a generar una tabla de frecuencias para
# los protagonistas de la casa de papel
genera_frecuencias <- function(text){
  docs <- Corpus(VectorSource(text))
  
  # pasar textos a minúsculas
  docs <- tm_map(docs, content_transformer(tolower))
  # quitar números
  docs <- tm_map(docs, removeNumbers)
  # quitar stopwords en español
  docs <- tm_map(docs, removeWords, stopwords("spanish"))
  # quitar stopwords en inglés
  docs <- tm_map(docs, removeWords, stopwords("english"))
  # quitar puntuación
  docs <- tm_map(docs, removePunctuation)
  # eliminar espacios en blanco extras
  docs <- tm_map(docs, stripWhitespace)
  
  # crear tabla de frecuencias
  dtm <- TermDocumentMatrix(docs)
  m <- as.matrix(dtm)
  v <- sort(rowSums(m),decreasing=TRUE)
  d <- data.frame(word = names(v),freq=v)
  # print(head(d, 10))
  
  d_filtered <- d %>% filter(
    word %in% c("berlín",
                "bogotá",
                "cincinnati",
                "denver",
                "helsinki", 
                "lisboa", 
                "marsella", 
                "moscú", 
                "nairobi", 
                "oslo",
                "palermo",
                "río", 
                "estocolmo" ,
                "tokio",
                "profesor")
  )
  
  return(d_filtered)
}


# Ahora creamos listas vacias para guardar 
# las tablas de frecuencia por temporada
freq_temp <- list()

# hacemos un bucle para insertar las tablas de frecuencia
for (numero in 1:3) {
  print(paste('trabajando en temporada', numero))
  freq_temp[[numero]] <- la_casa_de_papel %>% 
    filter(temporada == numero) %>% 
    select(texto) %>% 
    genera_frecuencias() 
  
  freq_temp[[numero]] <- freq_temp[[numero]] %>% 
    mutate(temporada = numero)
}

# Unimos las tres tablas de frecuencia
union_freq <- bind_rows(freq_temp)
union_freq$temporada <- factor(union_freq$temporada)

# creamos la gráfica
union_freq %>% 
  slice(1:50) %>%
  mutate(angulo = 90 * sample(c(0, 1), 
                              n(), 
                              replace = TRUE, 
                              prob = c(60, 40))) %>%
  ggplot(aes(label = word,
             size = freq,
             angle = angulo,
             color = temporada)) +
  geom_text_wordcloud_area() +
  scale_size_area(max_size = 30) +
  theme_minimal() +
  facet_wrap(~temporada) +
  theme(legend.position = "bottom")
  
# guardar imagen final
ggsave('./images/ddm_casa_de_papel_v3.png', 
       width = 8, 
       height = 4,
       units = 'in')