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