Carga de datos y modificaciones

#Datos de los clientes
personas <- tibble(read.csv("personas.csv", header = TRUE, sep = ","))
attach(personas)

#Datos del consumo de los clientes
ventas <- tibble(read.csv("ventas.csv", header = TRUE, sep = ","))
attach(ventas)

#Para convertir la columna "fecha" de chr a chron (objeto de la clase fecha)
ventas$fecha <- as.chron(ventas$fecha, format = "%d/%m/%Y %H:%M")

#Para extraer el mes en que se hizo la compra
ventas <- ventas %>% mutate(mes = months(ventas$fecha)) 

#Para extraer el identificador del cliente, el monto y mes de compra
ventas1 <- ventas %>% select(id_persona, monto, mes) 
#Para contar las ordenes hechas en el mes
ventas_mes <- ventas1 %>%  group_by(mes) %>% 
                summarise(frecuencia = n(), monto_mensual = round(sum(monto), 2),
                          monto_promedio = round(mean(monto), 2)) %>% 
                arrange(mes, month.abb)

ventas_mes %>% rename("Mes" = mes, "Visitas" = frecuencia, 
                      "Monto mensual" = monto_mensual, 
                      "Monto promedio" = monto_promedio) %>% 
  kbl() %>% kable_styling(bootstrap_options = "striped", full_width = F)
Mes Visitas Monto mensual Monto promedio
Jan 12 811.49 67.62
Feb 21 1880.96 89.57
Mar 16 1817.36 113.58
Apr 14 1509.81 107.84
May 13 1451.34 111.64
Jun 16 1057.57 66.10
Jul 15 1081.72 72.11
Aug 14 754.68 53.91
Sep 18 1687.30 93.74
Oct 21 1907.40 90.83
Nov 14 1338.75 95.62
Dec 23 1423.05 61.87
summary(ventas_mes)
      mes      frecuencia    monto_mensual    monto_promedio  
 Jan    :1   Min.   :12.00   Min.   : 754.7   Min.   : 53.91  
 Feb    :1   1st Qu.:14.00   1st Qu.:1075.7   1st Qu.: 67.24  
 Mar    :1   Median :15.50   Median :1437.2   Median : 90.20  
 Apr    :1   Mean   :16.42   Mean   :1393.5   Mean   : 85.37  
 May    :1   3rd Qu.:18.75   3rd Qu.:1719.8   3rd Qu.: 98.67  
 Jun    :1   Max.   :23.00   Max.   :1907.4   Max.   :113.58  
 (Other):6                                                    

¿Cuántas ordenes fueron atendidas por mes?

#Gráfica de las ordenes mensuales
ggplot(data = ventas_mes, aes(x = mes, y = frecuencia, fill = mes)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_brewer(palette = "Set3") +
  labs(x = "Mes", y = "Frecuencia") +
  ggtitle("Grafica de las ordenes mensuales") +
  geom_text(aes(label = frecuencia), vjust = 1.5, color = "black",
            size = 4) +
  theme(legend.position = "none")

¿Cuánto fue el monto total por mes?

#Gráfica de los montos mensuales
ggplot(data = ventas_mes, aes(x = mes, y = monto_mensual, fill = mes)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_brewer(palette = "Set3") +
  labs(x = "Mes", y = "Monto mensual") +
  ggtitle("Grafica de los montos mensuales") +
  geom_text(aes(label = monto_mensual), vjust = 1.5, color = "black",
            size = 3) +
  theme(legend.position = "none")

¿Cuántas personas distintas fueron atendidas por mes?

ventas2 <- ventas %>% select(id_persona, mes) %>%  distinct()

ventas_mes1 <- ventas2 %>%group_by(mes) %>% 
                  summarise(frecuencia = n()) %>% 
                  arrange(mes, month.abb)


#Gráfica de los clientes dintintos por mes
ggplot(data = ventas_mes1, aes(x = mes, y = frecuencia, fill = mes)) +
    geom_bar(stat = "identity", position = "dodge") +
    scale_fill_brewer(palette = "Set3") +
    labs(x = "Mes", y = "Frecuencia") +
    ggtitle("Grafica de los clientes distintos mensuales") +
    geom_text(aes(label = frecuencia), vjust = 1.5, color = "black",
            size = 4) +
    theme(legend.position = "none")

¿Cuánto fue el monto promedio por mes?

#Gráfica de los montos promedio mensuales
ggplot(data = ventas_mes, aes(x = mes, y = monto_promedio, fill = mes)) +
    geom_bar(stat = "identity", position = "dodge") +
    scale_fill_brewer(palette = "Set3") +
    labs(x = "Mes", y = "Monto mensual") +
    ggtitle("Grafica de los montos promedio mensuales") +
    geom_text(aes(label = monto_promedio), vjust = 1.5, color = "black",
            size = 3) +
    theme(legend.position = "none")

Diseña la pirámide poblacional de las personas atendidas

personas1 <- personas %>% select(edad, sexo) %>% arrange(edad)

personas2 <- personas1 %>% mutate(Rango = cut(personas1$edad, 
                                              breaks = 4)) %>% select(-edad)

tabla <- as.data.frame.matrix(table(personas2$Rango, personas2$sexo))

xx_pop <- tabla$M
xy_pop <- tabla$H

agelabels <- c("21 - 35", "36 - 50", "51 - 65", "66 - 80")
 
pyramid.plot(xy_pop, xx_pop, labels = agelabels, labelcex = 0.7,
             main = "Clientes de la taquería",
             top.labels = c("Hombres", "Edad", "Mujeres"),
             show.values = FALSE, unit = "",
             lxcol = "blue", rxcol = "red")

7 7 
[1] 5.1 4.1 4.1 2.1

¿Cuántas personas atendidas hubo por estado?

clientes_estado <- personas %>% group_by(estado) %>% 
                      summarise(frecuencia = n())

#Grafica de la cantidad de clientes
ggplot(data = clientes_estado, aes(x = estado, y = frecuencia, fill = estado)) +
    geom_bar(stat = "identity", position = "dodge") +
    labs(x = "Estado", y = "Frecuencia") +
    theme(axis.text.x = element_text(face="italic", colour="white", size=rel(0.01))) +
    ggtitle("Grafica de los clientes por estado")

¿Cuántas ordenes fueron atendidas por estado?

#La funcion left_join(x, y, by = ...) prioriza el conjunto de datos izquierdo -x-
#La agrupación se hará conforme a la llave primaria, "id_persona"
unido <- left_join(ventas, personas, by = "id_persona") 

#Información sobre las ventas por estado
ventas_estado <- unido %>%  group_by(estado) %>% 
                    summarise(frecuencia = n(), monto_mensual = round(sum(monto), 2),
                              monto_promedio = round(mean(monto), 2)) %>% 
                    arrange(estado)

ventas_estado %>% rename("Estado" = estado, "Visitas" = frecuencia, 
                      "Monto mensual" = monto_mensual, 
                      "Monto promedio" = monto_promedio) %>% 
  kbl() %>% kable_styling(bootstrap_options = "striped", full_width = F)
Estado Visitas Monto mensual Monto promedio
BAJA CALIFORNIA 35 1635.58 46.73
CHIAPAS 7 1784.54 254.93
CHIHUAHUA 10 388.33 38.83
CIUDAD DE MEXICO 21 2768.32 131.82
COLIMA 2 131.69 65.84
GUANAJUATO 7 1399.41 199.92
GUERRERO 2 267.23 133.62
HIDALGO 2 121.65 60.83
JALISCO 1 70.08 70.08
MICHOACAN 29 5535.89 190.89
MORELOS 8 301.59 37.70
SAN LUIS POTOSI 2 17.81 8.91
SINALOA 6 948.05 158.01
SONORA 60 1226.56 20.44
TAMAULIPAS 1 20.42 20.42
VERACRUZ 3 90.95 30.32
ZACATECAS 1 13.33 13.33
#Gráfica de las ordenes por estado
ggplot(data = ventas_estado, aes(x = estado, y = frecuencia, fill = estado)) +
    geom_bar(stat = "identity", position = "dodge") +
    labs(x = "Estado", y = "Frecuencia") +
    theme(axis.text.x = element_text(face="italic", colour="white", size=rel(0.01))) +
    ggtitle("Grafica de las ordenes atendidas por estado")

¿Cuánto fue el monto total por estado?

#Grafica del monto 
ggplot(data = ventas_estado, aes(x = estado, y = monto_mensual, fill = estado)) +
    geom_bar(stat = "identity", position = "dodge") +
    labs(x = "Estado", y = "Frecuencia") +
    theme(axis.text.x = element_text(face="italic", colour="white", size=rel(0.01))) +
    ggtitle("Grafica de los montos totales por estado")

¿Cuánto fue el monto promedio por estado?

#Gráfica de los montos promedio por estado
ggplot(data = ventas_estado, aes(x = estado, y = monto_promedio, fill = estado)) +
    geom_bar(stat = "identity", position = "dodge") +
    labs(x = "Estado", y = "Frecuencia") +
    theme(axis.text.x = element_text(face="italic", colour="white", size=rel(0.01))) +
    ggtitle("Grafica de los montos promedio por estado")

Desde el punto de vista del taquero, ¿Quienes serían sus mejores clientes? ¿Por qué?

Desde el punto de vista del taquero los mejores clientes son los que asisten más veces al restaurante, recordemos que el taquero gana $10 por cada persona atendida, sin importar el monto de la compra. Por lo tanto, los mejores clientes son los del estado de Sonora que durante el año visitaron el restaurante 60 veces.