library(rmarkdown)
library(readxl)
library(dplyr)
library(ggplot2)

# Cargar datos desde archivo marketing
datos <- read_excel("~/Downloads/Marketing.xlsx")
View(datos)

1. Agrupar por tipo de campaña y canal,y calcular el gasto promedio de cada una

gasto_promedio <- datos %>%
  group_by(CampaignType, CampaignChannel) %>%
  summarise(Gasto_Promedio = mean(AdSpend, na.rm = TRUE))
## `summarise()` has grouped output by 'CampaignType'. You can override
## using the `.groups` argument.
print(gasto_promedio)

#Grafico de barras apiladas

ggplot(gasto_promedio, aes(x = CampaignType, y = Gasto_Promedio, fill = CampaignChannel)) +
  geom_col(position = "dodge") + 
  labs(title = "Gasto Promedio por Tipo de Campaña y Canal",
       x = "Tipo de Campaña",
       y = "Gasto Promedio") +
  theme_classic() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  theme(legend.position = "bottom")

# 2. Calcular la tasa de visitas por página

tasa_visitas_pagina <- datos %>%
  summarise(Tasa_Visitas_Pagina = mean(PagesPerVisit, na.rm = TRUE)) %>%
  pull(Tasa_Visitas_Pagina)
print(tasa_visitas_pagina)
## [1] 5.549299

3. Crear las categorías de ingresos de los clientes (Alto, Medio y Bajo)

datos$categoria_ingresos <- cut(datos$Income, 
                                breaks = c(0, 30000, 75000, Inf), 
                                labels = c("Bajo", "Medio", "Alto"))

# Tabla de frecuencias para segmentar  a los clientes segun sus niveles de interaccion
tabla_categorias_ingresos <- table(datos$categoria_ingresos)
print(tabla_categorias_ingresos)
## 
##  Bajo Medio  Alto 
##   634  2755  4611

4. Calcular la tasa de interacción por visita en el sitio web

tasa_interaccion <- datos %>%
# Hay que aplicar un criterio, el cual es que si WebsiteVisits=0, Tasa_Interaccion es 0, ya que si no lo hacemos el resultado de la tasa será infinito.
  mutate(Tasa_Interaccion = ifelse(WebsiteVisits == 0, 0, SocialShares / WebsiteVisits)) %>%
  summarise(Tasa_Interaccion = mean(Tasa_Interaccion, na.rm = TRUE)) %>%
  pull(Tasa_Interaccion)
print(tasa_interaccion)
## [1] 4.309349

5. Calcular la proporción de aperturas sobre clics en el correo electronico

proporcion_aperturas_clics <- datos %>%
# Debemos aplicar el mismo criterio que en la pregunta anterior, ya que los clientes que no han hecho clic, no han abierto ningun correo y la tasa es 0
  summarise(Proporcion = mean(ifelse(EmailClicks == 0, 0, EmailOpens / EmailClicks), na.rm = TRUE)) %>%
  pull(Proporcion)
print(proporcion_aperturas_clics)
## [1] 2.691653

6.Calcular el gasto promedio por tipo de campaña

gasto_promedio_campaña <- datos %>%
  group_by(CampaignType) %>%
  summarise(Gasto_Promedio = mean(AdSpend, na.rm = TRUE))

#Comparar el gasto de cada campaña con el promedio para de su tipo
comparacion_gastos <- datos %>%
  left_join(gasto_promedio_campaña, by = "CampaignType") %>%
  mutate(Mayor_Que_Promedio = ifelse(AdSpend > Gasto_Promedio, TRUE, FALSE)) %>%
  summarise(Numero_Campanas = sum(Mayor_Que_Promedio, na.rm = TRUE))
print(comparacion_gastos)

#7. Filtrar los clientes con ingresos altos

clientes_altos <- datos %>%
  filter(Income > 75000)

# Calcular la tasa de conversión por canal para clientes con ingresos altos
tasa_conversion_altos <- clientes_altos %>%
  group_by(CampaignChannel) %>%
  summarise(Tasa_Conversion = mean(Conversion, na.rm = TRUE))
print(tasa_conversion_altos)

Gráfico de barras

ggplot(tasa_conversion_altos, aes(x = CampaignChannel, y = Tasa_Conversion)) +
  geom_col() +
  labs(title = "Tasa de Conversión por Canal para Clientes con Ingresos Altos",
       x = "Canal de Marketing", y = "Tasa de Conversión")

8. Calcular la proporción de puntos de lealtad acumulados sobre el total compras anteriores

proporcion_lealtad_compras <- datos %>%
# Debemos aplicar el mismo criterio que en las preguntas 4 y 5, ya que los clientes que no han hecho compras previas, no tienen puntos acumulados y la tasa es 0
  summarise(Proporcion = mean(ifelse(PreviousPurchases == 0, 0, LoyaltyPoints / PreviousPurchases), na.rm = TRUE)) %>%
  pull(Proporcion)
print(proporcion_lealtad_compras)
## [1] 702.187

9. Crear categorías de interacción en redes sociales (Bajo, Medio, Alto)

datos$categoria_interaccion_social <- cut(datos$SocialShares, 
                                          breaks = c(0, 5, 10, Inf), 
                                          labels = c("Bajo", "Medio", "Alto"))

# Tabla de frecuencias para segmentar  a los clientes segun sus niveles de interaccion
tabla_categorias_social <- table(datos$categoria_interaccion_social)
print(tabla_categorias_social)
## 
##  Bajo Medio  Alto 
##   376   376  7152

10. Calcular la relación entre visitas y tasa de clics para cada tipo tipo de campaña

relacion_visitas_clics <- datos %>%
  group_by(CampaignType) %>%
  summarise(Relacion = mean(WebsiteVisits / ClickThroughRate, na.rm = TRUE))
print(relacion_visitas_clics)

Gráfico de dispersión

ggplot(relacion_visitas_clics, aes(x = CampaignType, y = Relacion)) +
  geom_point() +
  labs(title = "Relación entre Visitas al Sitio Web y Tasa de Clics por Tipo de Campaña",
       x = "Tipo de Campaña", y = "Relación Visitas/Clics")

11. Calcular el porcentaje de tiempo en sitio web sobre total de visitas de cada cliente

porcentaje_tiempo_visitas <- datos %>%
  #Debemos aplicar el mismo criterio que en las pregunta 8
  group_by(CustomerID) %>%
  summarise(Porcentaje_Tiempo = mean(ifelse(WebsiteVisits == 0, 0, TimeOnSite / WebsiteVisits), na.rm = TRUE))
print(porcentaje_tiempo_visitas)

Histograma

ggplot(porcentaje_tiempo_visitas, aes(x = Porcentaje_Tiempo)) +
  geom_histogram(bins = 20, color = "black", fill = "lightblue") +
  labs(title = "Distribución del Porcentaje de Tiempo en Sitio Web sobre Total de Visitas",
       x = "Porcentaje de Tiempo", y = "Frecuencia")

12. Filtrar solo las campañas de retención

campanas_retencion <- datos %>%
  filter(CampaignType == "Retention")
print(campanas_retencion)

# Calcular el promedio de conversiones por canal para campañas de retención
conversiones_retencion <- campanas_retencion %>%
  group_by(CampaignChannel) %>%
  summarise(Promedio_Conversiones = mean(Conversion, na.rm = TRUE))
print(conversiones_retencion)

Gráfico de barras

ggplot(conversiones_retencion, aes(x = CampaignChannel, y = Promedio_Conversiones)) +
  geom_col() +
  labs(title = "Promedio de Conversiones por Canal para Campañas de Retención",
       x = "Canal de Marketing", y = "Promedio de Conversiones")