Objetivo

Mostrar la funcionalidad del gráfico de nube de palabras, como una visualización adicional que ofrece el programa de R, para ello usaremos un archivo con opiniones recogidas durante la pasada pandemia de Covid, a fin de identificar las palabras más comunes durante este periodo y con ello tener una percepción de los pensamientos/sentimientos de las personas y su entorno durante este periodo.

Definición del gráfico

Las visualizaciones de nube de palabras (word cloud) son usualmente utilizadas para resaltar valores populares o mostrar la frecuencia de los datos de texto mediante el tamaño de la fuente y el color.

Generación del gráfico en R

Primero instalaremos las librerías necesarias:

library(wordcloud2) #Para generación de nube de palabras
library(tidyverse) #Para análisis de datos
library(tm) #Para minería de texto

Cargamos el archivo

covid.data <- read.csv("Corona_NLP_R.csv", header = TRUE, sep = ",")
head(covid.data, n=10)

Seleccionamos la columna a utilizar para el gráfico

covid.data.tweets=covid.data["OriginalTweet"]
covid.data.tweets

Con la columna seleccionada, vamos a crear una estructura llamada “Corpus” de la librería tm, la cual permite manipular textos de forma más eficiente, sobre todo con textos qu pueden llegar a ser complejos.

docs <- Corpus(VectorSource(covid.data.tweets))
docs
## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 1

Comencemos con la minería de texto:

Iniciare por eliminar palabras que no están contenidas en la lista precargada de R y que no aportan valor, en este caso haré una depuración a palabras que comienza con http y que solo hacen referencia a una url, la lista puede ser más extensa dependiendo como se van dando los resultados pero para este ejercicio lo ejemplificaré unicamente con este caso.

Para ello creamos una función que identifique dichos textos y posterior mediante una función la eliminaremos de nuestro Corpus.

remove_http <- function(text) {
  text <- gsub("\\bhttp\\S*", "", text)
  return(text)
}
docs.clean <- tm_map (docs, content_transformer(remove_http))

Ahora usaremos las funciones de la librería tm para remover puntuaciones, stopwords (conectores, lista precargada en R), numeros,espaciones en blanco, etc, es decir, cualquier información que no aporte valor. También transformaremos todo el texto a minúsculas pues recordemos R es “case sensitive”.

docs.clean <- docs.clean %>% 
          tm_map(removeNumbers)%>% 
          tm_map(removePunctuation)%>%
          tm_map(stripWhitespace)
docs.clean <- tm_map (docs.clean, content_transformer(tolower))
docs.clean <- tm_map (docs.clean, removeWords, stopwords("english"))

Consultamos nuestro Corpus y tratamos de identificar si existe alguna otra palabra o texto repetitivo que podamos depurar.

doc<-docs.clean[[1]]
cat(content(doc))

Una vez concluida nuestra limpieza crearemos una tabla para el conteo de palabras

twords <- TermDocumentMatrix(doc)
matrix<- as.matrix(twords)
words <- sort(rowSums(matrix), decreasing = TRUE)
df<- data.frame(word=names(words),freq=words)

Visualicemos las primeras 50 palabras

head(df, n=50)

Generemos nuestro gráfico con las 200 primeras palabras por frecuencia

wordcloud2 (slice_max(df, order_by=freq, n=200), size=.8, color= "random-dark", backgroundColor = "black")

Como era de esperarse se identifican palabras que nos remontan a este periodo, como son la necesidad de contar con un stock de alimentos y otros artículos de primera necesidad, incluso el curioso caso de compras de pánico papel de baño (toilet paper), el pánico generado en las personas, el incremento en precios de muchos productos ante la alta demanda, el impulso que esto genero al comercio online, la importancia de estar en casa, entre otros.