Supermercados Frescos está interesado en conocer la opinión de sus clientes sobre sus productos, para así comprender la satisfacción del cliente e identificar áreas de mejora. Se ha decidido realizar un análisis de sentimiento de las reseñas de los productos mostrados en su página web, para obtener información valiosa sobre la percepción de los clientes.

Objetivo General del Análisis:

Analizar el sentimiento expresado en las reseñas de los productos mostrados en la página web de Supermercados Frescos para comprender la percepción de los clientes sobre la calidad, el precio y otros atributos de los productos.

Objetivos Específicos:

  1. Extraer las reseñas de productos de la página web “Supermercado.html”.
  2. Realizar un análisis de sentimiento de las reseñas para determinar la polaridad (positiva, negativa o neutra) de cada reseña.
  3. Identificar las emociones más comunes expresadas en las reseñas (ej: alegría, tristeza, enojo, etc.).
  4. Analizar qué productos tienen las reseñas más positivas y cuáles tienen las reseñas más negativas.

Tareas:

Web Scraping:

  • Utiliza el paquete rvest para extraer las reseñas de los productos de la página web “Supermercado.html”.

  • Adapta los selectores CSS del código para que funcionen correctamente con la estructura de la página web.

  • Implementa un manejo de errores para que el código pueda seguir funcionando aunque no se encuentre algún elemento en una noticia específica.

Análisis de Sentimiento:

  • Utiliza el paquete syuzhet para calcular el sentimiento de cada reseña.

  • Clasifica cada reseña como positiva, negativa o neutra en función de su puntuación de sentimiento.

  • Identifica las emociones predominantes en las reseñas utilizando el léxico NRC.

Análisis de Datos:

  • Calcula el sentimiento promedio para cada producto.

  • Identifica los productos con el sentimiento más positivo y más negativo.

  • Calcula la frecuencia de cada emoción en las reseñas.

Visualización de Resultados:

  • Crea un gráfico de barras para mostrar el sentimiento promedio para cada producto.

  • Crea un gráfico de barras para mostrar la distribución de emociones en las reseñas.

Conclusiones y Recomendaciones:

  • Basado en los resultados del análisis de sentimiento, ¿qué productos tienen la mejor percepción por parte de los clientes?

  • ¿Qué productos necesitan mejoras o requieren atención especial?

  • ¿Qué emociones predominan en las reseñas y qué sugieren sobre la experiencia del cliente?

  • ¿Qué acciones específicas le recomendarías al equipo de marketing de Supermercados Frescos para mejorar la percepción de sus productos y la satisfacción del cliente?

#Carga de Librerias
library(rvest)
library(stringr)
library(dplyr)
library(syuzhet) # Para análisis de sentimiento
library(ggplot2) # Para visualizaciones
  1. Extracción de Reseñas de la Página Web Se extraen los nombres de los productos y las reseñas de la página web “Supermercado.html”.
url <- "Supermercado.html"
page <- read_html(url)

# Extraer los nombres de los productos
nombres_productos <- page %>%
  html_nodes(".producto h3") %>%
  html_text()

# Extraer todas las reseñas
reseñas <- page %>%
  html_nodes(".reseña") %>%
  html_text()

# Verificar que se extrajeron reseñas
if (length(reseñas) == 0) {
  stop("No se encontraron reseñas. Verifica el selector CSS.")
}

# Contar reseñas por producto (asumiendo un número constante de reseñas por producto)
num_productos <- length(nombres_productos)
reseñas_por_producto <- 20 # Ajustar si es diferente
if (length(reseñas) != num_productos * reseñas_por_producto) {
  warning("El número de reseñas no coincide con el número esperado por producto. Revisar la extracción.")
}
  1. Análisis de Sentimiento Realizamos un análisis de sentimiento de cada reseña para determinar su polaridad y las emociones expresadas.
# Función para obtener el sentimiento de un texto
obtener_sentimiento <- function(texto) {
  sentimiento <- get_nrc_sentiment(texto, language = "spanish")
  puntaje_total <- sum(sentimiento$positive) - sum(sentimiento$negative)
  return(puntaje_total)
}

# Aplicar el análisis de sentimiento a cada reseña
sentimientos <- sapply(reseñas, obtener_sentimiento)

# Crear una columna con los sentimientos de cada reseña
df_noticias_sentimientos = data.frame(sentimientos = sentimientos)
  1. Preparación de Datos para el Análisis Preparamos los datos para calcular el sentimiento promedio por producto.
#Crear un nuevo DF, y validar la cantidad de filas generadas
df_productos = data.frame(producto = rep(nombres_productos, each = reseñas_por_producto))

# Validar si la cantidad de reseñas coincide con la cantidad de productos, de no ser correctos, detemos la ejecución
if(length(df_productos$producto) != length(df_noticias_sentimientos$sentimientos)){
  stop("La cantidad de Productos y la cantidad de Sentimientos no coinciden, porfavor verificar el código")
}

df_final = cbind(df_productos,df_noticias_sentimientos )

head(df_final)
##                            producto sentimientos
## 1 Producto 1: Leche Evaporada Ideal            0
## 2 Producto 1: Leche Evaporada Ideal            1
## 3 Producto 1: Leche Evaporada Ideal            1
## 4 Producto 1: Leche Evaporada Ideal           -1
## 5 Producto 1: Leche Evaporada Ideal            0
## 6 Producto 1: Leche Evaporada Ideal            0
  1. Calculo de sentimiento promedio por productos Sacamos el sentimiento promedio por productos
resultados_p <- df_final |> 
  group_by(producto) |> 
  summarise(Sentimiento_Promedio = mean(sentimientos))

resultados_p
## # A tibble: 10 × 2
##    producto                                Sentimiento_Promedio
##    <chr>                                                  <dbl>
##  1 Producto 10: Lejía Clorox Máxima Pureza                 0.75
##  2 Producto 1: Leche Evaporada Ideal                       0.4 
##  3 Producto 2: Arroz Extra Superior                        0.6 
##  4 Producto 3: Azúcar Blanca Refinada                      0.2 
##  5 Producto 4: Aceite Vegetal Premium                      0.3 
##  6 Producto 5: Menestra Selecta                            0.45
##  7 Producto 6: Fideos Largos Don Vittorio                  0.55
##  8 Producto 7: Atún en Aceite de Girasol                   0.55
##  9 Producto 8: Sardinas en Salsa de Tomate                 0.3 
## 10 Producto 9: Detergente Ariel en Polvo                   0.5
  1. Visualización de Resultados Creamos un gráfico de barras para comparar el sentimiento promedio por producto.
#Visualizar los sentimientos
ggplot(resultados_p, aes(x = reorder(producto, Sentimiento_Promedio), y = Sentimiento_Promedio)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  labs(title = "Sentimiento Promedio por Producto",
       x = "Producto",
       y = "Sentimiento Promedio") +
  theme_bw()

  1. Conclusiones

La escala de Sentimiento Promedio varía de 0 a 1, donde valores más cercanos a 1 indican un sentimiento más positivo.

Productos con Mayor Sentimiento Positivo:

  • Lejía Clorox Máxima Pureza (0.75): Este producto tiene el puntaje promedio de sentimiento más alto, lo que sugiere que los clientes están muy satisfechos con este producto. Las reseñas probablemente resaltan su eficacia, limpieza y desinfección.

  • Arroz Extra Superior (0.60): Este producto muestra un nivel de sentimiento positivo relativamente alto, lo que sugiere que los clientes están generalmente satisfechos con su calidad y rendimiento. Productos con Sentimiento Neutro o Negativo:

  • Azúcar Blanca Refinada (0.20): Este producto tiene el puntaje promedio de sentimiento más bajo, lo que indica una percepción menos favorable por parte de los clientes. Esto podría deberse a preocupaciones sobre el precio, la calidad, o la salud.

  • Aceite Vegetal Premium y Sardinas en Salsa de Tomate (0.30): Estos productos también tienen puntajes de sentimiento bajos, sugiriendo que los clientes podrían tener reservas sobre ellos.

Conclusiones para el informe de marketing:

Basándose en el análisis de sentimiento de las reseñas de productos en Supermercados Frescos, se pueden extraer las siguientes conclusiones y recomendaciones:

  1. Capitalizar los Productos con Alta Satisfacción: Supermercados Frescos debería aprovechar la alta satisfacción del cliente con la Lejía Clorox Máxima Pureza y el Arroz Extra Superior para impulsar las ventas. Se pueden realizar campañas de marketing que destaquen estos productos como “los favoritos de los clientes” o “productos recomendados”. También resulta fundamental entender las razones de este éxito (por ejemplo, comparativa de precios con otras marcas)

  2. Investigar y Mejorar los Productos con Baja Satisfacción: Se recomienda investigar a fondo las razones detrás de la baja satisfacción con la Azúcar Blanca Refinada, el Aceite Vegetal Premium y las Sardinas en Salsa de Tomate. Esto podría implicar la revisión de la calidad del producto, la comparación de precios con la competencia, y la identificación de problemas en la cadena de suministro o el empaque.

  3. Segmentación y Personalización: Utilizar la información del sentimiento para segmentar a los clientes y personalizar las ofertas. Por ejemplo, se podrían ofrecer descuentos especiales o promociones dirigidas a los clientes que han expresado una opinión negativa sobre un producto específico, para tratar de cambiar su percepción.

  4. Monitoreo Continuo: Implementar un sistema de monitoreo continuo de las reseñas de los productos para detectar cambios en el sentimiento y responder rápidamente a cualquier problema o inquietud. Es importante comprender que esta información es puramente referencial y no se considera como un dato real que nos permita sacar conclusion sobre una organización.