El paquete de R {wordcloud}
contiene funciones para
generar el gráfico conocido como ‘Nube de palabras’ (o
‘wordcloud’ en inglés) que se utiliza en la rama estadística
denominada ‘text mining’. Este tipo de gráfico sirve para
visualizar la frecuencia con que aparece cada palabra en un texto. A
mayor frecuencia de aparición de una palabra en el texto, mayor tamaño
de la palabra en el gráfico (Wiki).
La función utilizada del paquete es wordcloud()
y es
conveniente que, antes de utilizarla, le introduzcamos el texto
debidamente ‘limpio’, es decir, que no contenga espacios, números o
caracteres de puntuación. Esto forma parte de la minería de
datos y para ello usaremos el paquete {tm}
que
contiene funciones muy útiles para manipular texto.
Ejemplo: Descargamos el texto de un fichero de Internet que contiene el cuento ‘La biblioteca de babel’ de Jorge Luis Borges, separamos las palabras, eliminamos los caracteres especiales y creamos el gráfico de nube de palabras.
# Instalar y cargar las librerías
if (!require('wordcloud')) {install.packages('wordcloud')}
Loading required package: wordcloud
Loading required package: RColorBrewer
if (!require('tm')) {install.packages('tm')}
Loading required package: tm
Loading required package: NLP
library(wordcloud, quietly = T)
library(tm, quietly = T)
# Importar el texto contenido en un fichero de internet
# Si no existe cambiar por la url de otro fichero de texto
<- readLines("https://gist.githubusercontent.com/jsdario/1daee22f3f13fe6bc6a343f829565759/raw/3511dc6de6a7bf064c168b4f20b85a20d8f83b91/la_biblioteca_de_babel.txt")
texto
# Convertimos el texto a vector y a un documento con lenguaje natural
<- Corpus(VectorSource(texto))
docs
# Funcion para convertir caracteres raros en espacios
<- content_transformer(function(x, pattern ) gsub(pattern, " ", x))
toSpace <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")
docs
# Limpiamos el texto de numeros, palabras que no interesen, signos de puntuacion, etc.
# Eliminar numeros
<- tm_map(docs, removeNumbers)
docs # Convertir a minusculas
<- tm_map(docs, content_transformer(tolower))
docs # Eliminar las palabras vacias comunes del idioma del texto
<- tm_map(docs, removeWords, stopwords("spanish"))
docs # Eliminar palabras que no interesan al usuario
<- tm_map(docs, removeWords, c("blabla1", "blabla2"))
docs # Eliminar signos de puntuacion
<- tm_map(docs, removePunctuation)
docs # Elimina espacios extras
<- tm_map(docs, stripWhitespace)
docs
# Construimos la matriz de frecuencias de cada palabra
<- TermDocumentMatrix(docs)
dtm <- as.matrix(dtm)
m <- sort(rowSums(m), decreasing = TRUE)
v <- data.frame(word = names(v), freq = v)
df head(df)
word freq
biblioteca biblioteca 27
libros libros 20
libro libro 17
cada cada 14
hexágono hexágono 13
hombres hombres 10
# Grafico nube de palabras
wordcloud(df$word, df$freq, random.order = FALSE, min.freq = 1,
max.words = Inf, colors = brewer.pal(8,"Paired"))