El presente análisis se realizó gracias a la capacitación en el Club de R para RRHH.
Qué es el Club? Es una comunidad de aprendizaje de programación en R destinada para las personas que trabajan en Recursos Humanos de habla hispana.
Soy una de las integrantes del Club.👋
Vamos a analizar un texto, a través de un paquete de R llamado Text Mining.
En RRHH analizar texto resulta fundamental, lo podriamos utilizar en entrevistas, evaluaciones, encuestas, comunicación corporativa (…).
¿ Se te ocurre algún otro uso? Contanos en comentarios.
Los datos que vamos a usar son de una canción muy popular en Argentina.
¿Por qué una canción?
La idea es demostrar los resultados del uso de dicha herramienta y que sea visible para el lector.
La pieza musical en cuestión es “El Bómbon”, cuyos autores son “Los Palmeras”.1
library(googlesheets4)
library(tidyverse)
library(gargle)
library(tidytext)
library(wordcloud2)
library(tm)
library(funModeling)
library(scales)
library(xaringan)
# Estilos para los gráficos
zy <- theme(panel.background = element_blank(),
panel.grid.major.y = element_line(colour = "#F4F6F6"),
axis.line = element_line(colour = "grey"))
zx <- theme(panel.background = element_blank(),
panel.grid.major.x = element_line(colour = "#F4F6F6"),
axis.line = element_line(colour = "grey"))
letraPalmeras <- sheets_read("1FuU9kcPxJA37PGomv5zZzFrzchibEe-WDJ36Ty9vhHg")Para trabajar con la letra, realizamos una serie de procesos, los cuales nos permiten acceder a una base de datos, compuesta por los siguientes lementos:
Tenemos un archivo inicial para trabajar compuesto por 1 columna y 40 filas.
Como sabemos, hay palabras que encontramos en los discursos que no sirven para un análisis, por ejemplo “y”, “o”, “lo”… Todas estas palabras las eliminamos de nuestras bases.
letraPalmeras_vacio <- letraPalmeras %>%
anti_join(vacias)Nos interesa ver la frecuencia en la que aparecen las palabras en la canción.
Lo podemos visualizar en el siguiente grafico:
letraPalmeras_vacio %>%
count(palabra, sort = TRUE) %>%
filter(n>1) %>%
ggplot(aes(x= reorder(palabra, n), y = n, fill = n))+
geom_bar(stat = 'identity') +
scale_fill_gradient(low = "#D6DBDF", high = "#34495E")+
zx+
labs(title= "El Bombón",
subtitle = "Autor: Los Palmeras",
x="", y="Cantidad de apariciones") +
coord_flip()Como podemos observar, hay una palabra “Bombón” que es la que más se repite. Pero también hay un patrón de frecuencia en las palabras restantes. La intensidad de frecuencia que le damos a una palabra en un discurso, tiene un objetivo determinado. Tendremos que analizar si luego de realizada la comunicación en cuestión, el objetivo fue alcanzado o no.
Quisieramos saber la relación que hay entre las palabras de la canción y los sentimientos.
Por ejemplo: Si en una encuesta de clima tenemos palabras o frases como “Conforme”, “Recomendaría”, “Me encanta”, podemos relacionarlo con un sentimiento Positivo. En cambio si aparece “Injusto”, “Desagradable”, “Angustia”, podemos relacionarlo con uno Negativo.
En el análisis de sentimientos, hacemos el mismo procedimiento pero con un número mayor de categorías, como vemos a continuación.
sentimientos <- read_tsv("https://raw.githubusercontent.com/7PartidasDigital/AnaText/master/datos/diccionarios/sentimientos_2.txt",
col_types = "cccn",
locale = default_locale())
source("https://raw.githubusercontent.com/7PartidasDigital/R-LINHD-18/master/get_sentiments.R")
library(textdata)
letraPalmeras_nrc <- letraPalmeras_vacio %>%
right_join(get_sentiments("nrc")) %>%
filter(!is.na(sentimiento)) %>%
count(sentimiento, sort = TRUE)Podemos observar los sentimientos presentados.
Hay una predominancia de los sentimientos negativos en comparación de los positivos.
library(gt)
gt(letraPalmeras_nrc) %>%
tab_header(title = "Sentimientos") %>%
tab_source_note(source_note = "Elaboración Propia")%>%
cols_label(sentimiento = "Tipo",
n="Cantidad")| Sentimientos | |
|---|---|
| Tipo | Cantidad |
| negativo | 2669 |
| positivo | 1982 |
| miedo | 1274 |
| confianza | 1124 |
| ira | 1073 |
| tristeza | 1013 |
| disgusto | 931 |
| premonición | 769 |
| alegría | 621 |
| asombro | 478 |
| Elaboración Propia | |
feelings <- c("negativo", "positivo", "negativo", "negativo", "negativo", "positivo", "positivo", "positivo")La representacion grafica seria la siguiente:
letraPalmeras_nrc %>%
filter(sentimiento != "negativo", sentimiento !="positivo") %>%
cbind(feelings) %>% #el vector creado
ggplot(aes(reorder(sentimiento, n), n, fill = feelings)) +
geom_bar(stat = "identity", show.legend = FALSE) +
scale_fill_manual(values = c("#F5B041","#5DADE2"))+
zx + #Estilo grafico
coord_flip() +
labs(title="Ranking de sentimientos",
x = "Sentimiento",
y = "Cantidad de Apariciones")Una de las cosas que se puede presentar en el análisis, es que un sentimiento tenga una predominancia mayor o menor que otra.
¿Para qué podría servirnos?
Por ejemplo, para tenerlo en consideración en el armado de nuestras piezas de comunicación y usar esta información para reforzar conceptos, o suspender/eliminar aquellos que no estan ayudando.
A continuación , podemos observar las palabras relacionadas con “Confianza”.
letraPalmeras_vacio %>%
right_join(get_sentiments("nrc")) %>%
filter(!is.na(sentimiento)) %>%
group_by(sentimiento) %>%
count(palabra, sort = TRUE) %>%
filter(sentimiento == "confianza") %>% top_n(5)# solo podemos consultar los primeros 5## # A tibble: 1,122 x 3
## # Groups: sentimiento [1]
## sentimiento palabra n
## <chr> <chr> <int>
## 1 confianza seguro 3
## 2 confianza ábaco 1
## 3 confianza abad 1
## 4 confianza abogado 1
## 5 confianza abrazar 1
## 6 confianza abrazo 1
## 7 confianza abrigo 1
## 8 confianza absolución 1
## 9 confianza absorto 1
## 10 confianza abuelo 1
## # ... with 1,112 more rows
Asimismo podemos observar la frecuencia en las palabras relacionadas con “Miedo”.
letraPalmeras_vacio %>%
right_join(get_sentiments("nrc")) %>%
filter(!is.na(sentimiento)) %>%
group_by(sentimiento) %>%
count(palabra, sort = TRUE) %>%
filter(sentimiento == "miedo") ## # A tibble: 1,272 x 3
## # Groups: sentimiento [1]
## sentimiento palabra n
## <chr> <chr> <int>
## 1 miedo asesino 3
## 2 miedo abandonado 1
## 3 miedo abandonar 1
## 4 miedo abandono 1
## 5 miedo abeja 1
## 6 miedo abierto 1
## 7 miedo abismo 1
## 8 miedo abogado 1
## 9 miedo abominable 1
## 10 miedo abominación 1
## # ... with 1,262 more rows
En conclusión, el análisis de las palabras por si solo, no nos dice mucho, a menos que lo relacionemos con una acción concreta.
Pero, como ustedes saben, esta es la base del análisis de datos.
Por último, con la presente pieza musical podemos armar una nube de palabras.
¿Para qué usar una nube? Porque queda divino
Más allá de lo estético, las nubes de palabras nos sirven visualmente para observar aquellas palabras/categorías con mayor/menor presencia en el discurso analizado.
Por ejemplo: La empresa quiere cambiar su politica de beneficios. Para ello hace una consulta a sus colaboradores sobre qué beneficios valorarían más. Luego utiliza la nube de palabras para demostrar que la empresa accedió a otorgar aquellos beneficios con mayor cantidad de votos.
¿ Se te ocurren otros casos de uso? Contanos en comentarios.
Volviendo a nuestra canción, podemos observar que “Bombón” es la que más veces aparece. En menor medida, pero con una frecuencia alta aparece “Menea” y “Sabe” y “Mueve”.
letraPalmeras_vacio %>%
count(palabra,sort = TRUE) %>%
ungroup() %>%
wordcloud2(size = 0.6, shape = "cardioid")Llegamos al final. Gracias por estar ahi.👏
Sospecho que la próxima vez que escuchen el tema recordarán esta lectura. 🤗
Si te interesa que analicemos otra canción, dejalo en comentarios o mandame por privado.
Club de R para RRHH Club de R
Cuentapalabras 7 Partidas Digital
Text Mining with R de Julia Silge and David Robinson
No es nuestro objetivo entrar en debate respecto del significado de la letra, su interpretación, ni tampoco realizar una critica artística. Solo queremos usar los datos, y que sean fácilmente visibles al lector.↩︎