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
|
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.