Manipulación de datos
Importar librerias y cargar bases de datos
# Cargar librerías necesarias
if (!require("readxl")) install.packages("readxl")
if (!require("dplyr")) install.packages("dplyr")
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("scales")) install.packages("scales")
if (!require("writexl")) install.packages("writexl")
if (!require("lubridate")) install.packages("lubridate")
if (!require("plotly")) install.packages("plotly")
if (!require("knitr")) install.packages("knitr")
if (!require("prettydoc")) install.packages("prettydoc")
if (!require("kableExtra")) install.packages("kableExtra")
if (!require("tidyverse")) install.packages("tidyverse")
library(prettydoc)
library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(writexl)
library(lubridate)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyverse)
# Establecer el nombre del archivo de entrada para todos los códigos
file_name <- "BC_LCG.xlsx"
# Cargar las hojas del archivo de Excel para cada código
key_depto <- read_excel(file_name, sheet = "KEY_DEPTO")
key_vendedor <- read_excel(file_name, sheet = "KEY_VENDEDOR")
bd <- read_excel(file_name, sheet = "BD")Información de las librerias utilizadas
- prettydoc: Esta librería se utiliza para crear documentos en R Markdown con temas estéticamente agradables y modernos, facilitando la personalización del diseño y la presentación.
- readxl: Se utiliza para leer datos de archivos de Excel (.xls y .xlsx) en R, permitiendo la importación directa de datos tabulares desde hojas de cálculo.
- dplyr: Proporciona una gramática consistente para la manipulación de datos en R, facilitando operaciones como filtrado, selección, agrupamiento y resumen de datos tabulares.
- ggplot2: Es una librería para crear gráficos elegantes y sofisticados en R, basada en la “gramática de gráficos”, que permite construir visualizaciones complejas de manera intuitiva.
- scales: Proporciona funciones para dar formato a números y etiquetas de ejes en gráficos, facilitando la presentación clara y legible de datos en visualizaciones.
- writexl: Se utiliza para escribir datos en archivos de Excel (.xlsx) desde R, permitiendo la exportación de tablas y datos procesados a hojas de cálculo.
- lubridate: Facilita la manipulación de fechas y horas en R, ofreciendo herramientas para la extracción de componentes de fecha, cálculos de diferencia entre fechas y otras operaciones temporales.
- plotly: Permite la creación de gráficos interactivos en R, ofreciendo visualizaciones dinámicas y personalizables que pueden integrarse en documentos y aplicaciones web.
- knitr: Es una herramienta para la generación dinámica de reportes en R Markdown, que permite la incorporación de código R junto con texto narrativo y visualizaciones.
- kableExtra: Extiende la funcionalidad de
knitr::kablepara la creación de tablas en R Markdown, añadiendo opciones de formato avanzado y estilos personalizables. - tidyverse: Es un conjunto de paquetes de R
diseñados para la ciencia de datos. Incluye librerías como
dplyr,ggplot2,tidyr,readr,purrrytibble, que trabajan juntas para simplificar y mejorar la manipulación y visualización de datos.
Limpieza de datos
# Eliminar filas en la tabla BD donde 'Costo' es NA
bd <- bd %>% filter(!is.na(Costo))
# Eliminar las columnas vacías con títulos "Columna#"
bd <- bd %>%
select(-matches("^Columna\\d+$")) # Elimina las columnas que coinciden con el patrón "Columna#" donde "#" es un número
# Convertir las columnas Ventas Netas (Q) y Costo de Quetzales a USD
bd <- bd %>%
mutate(
`Ventas Netas (USD)` = `Ventas Netas (Q)` / 7.5,
`Costo (USD)` = Costo / 7.5
)Asignar valores faltantes (Nombre de vendedores y Departamento)
# Crear diccionarios para las claves de departamentos y vendedores
depto_dict <- setNames(key_depto$Departamento, key_depto$`Departamento - Clave`)
depto_dict_reverse <- setNames(key_depto$`Departamento - Clave`, key_depto$Departamento)
vendedor_dict <- setNames(paste(key_vendedor$Nombre, key_vendedor$Apellido), key_vendedor$`No. Vendedor`)
# Rellenar la columna 'Nom_Completo_Vendedor'
bd$Nom_Completo_Vendedor <- vendedor_dict[as.character(bd$`Número de Vendedor`)]
# Completar las columnas 'Departamento - Clave' y 'Departamento' de manera coordinada
bd <- bd %>%
rowwise() %>%
mutate(
`Departamento - Clave` = ifelse(is.na(`Departamento - Clave`) & !is.na(`Departamento`),
depto_dict_reverse[as.character(`Departamento`)],
`Departamento - Clave`),
`Departamento` = ifelse(is.na(`Departamento`) & !is.na(`Departamento - Clave`),
depto_dict[as.character(`Departamento - Clave`)],
`Departamento`)
) %>%
ungroup()
# Mostrar los primeros 5 registros de la base de datos
kable(head(bd), caption = "Primeros 5 registros") %>%
kable_styling(full_width = FALSE)| Fecha | Número de Vendedor | Nom_Completo_Vendedor | Número de cliente | Tipo | Departamento - Clave | Departamento | Familia - Clave | Familia | Ventas Netas (Q) | Costo | Ventas Netas (USD) | Costo (USD) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2015-01-01 | 7 | Carlos Vela | 66 | Real | 0021 | Pinturas | 328 | TRATAMIENTO DE CONCRETO | 31740.12 | 22046.54 | 4232.01600 | 2939.5387 |
| 2015-01-01 | 5 | Gonzalo Aguilar | 45 | Real | 0021 | Pinturas | 370 | PINTURAS DECORATIVAS | 2377.30 | 1761.35 | 316.97333 | 234.8467 |
| 2015-01-01 | 8 | Ernesto Pineda | 75 | Real | 0021 | Pinturas | 371 | BARNICES ARQUITECTÓNICOS | 20422.48 | 13189.05 | 2722.99733 | 1758.5400 |
| 2015-01-01 | 6 | Paulina Casanova | 57 | Real | 0021 | Pinturas | 372 | PINTURA AUTOMOTRIZ | 719.80 | 668.40 | 95.97333 | 89.1200 |
| 2015-01-01 | 7 | Carlos Vela | 62 | Real | 0021 | Pinturas | 376 | TINTES PARA MADERA | 15589.78 | 10835.03 | 2078.63733 | 1444.6707 |
| 2015-01-01 | 2 | Michelle Perez | 20 | Real | 0021 | Pinturas | 751 | BROCHAS, RODILLOS Y BANDEJAS | 216456.68 | 116269.21 | 28860.89067 | 15502.5613 |
Crear dos columnas calculadas para % de rentabilidad y utilidad bruta
# Calcular el porcentaje de rentabilidad y agregarla como una nueva columna a la base de datos
bd <- bd %>%
mutate(
Rentabilidad = (`Ventas Netas (USD)` - `Costo (USD)`) / `Costo (USD)` * 100
)
# Calcular la utilidad y agregarla como una nueva columna a la base de datos
bd <- bd %>%
mutate(
utilidad = (`Ventas Netas (USD)` - `Costo (USD)`)
)
# Mostrar los primeros 5 registros de la base de datos
kable(head(bd), caption = "Primeros 5 registros con rentabilidad y utilidad") %>%
kable_styling(full_width = FALSE)| Fecha | Número de Vendedor | Nom_Completo_Vendedor | Número de cliente | Tipo | Departamento - Clave | Departamento | Familia - Clave | Familia | Ventas Netas (Q) | Costo | Ventas Netas (USD) | Costo (USD) | Rentabilidad | utilidad |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2015-01-01 | 7 | Carlos Vela | 66 | Real | 0021 | Pinturas | 328 | TRATAMIENTO DE CONCRETO | 31740.12 | 22046.54 | 4232.01600 | 2939.5387 | 43.968713 | 1292.477333 |
| 2015-01-01 | 5 | Gonzalo Aguilar | 45 | Real | 0021 | Pinturas | 370 | PINTURAS DECORATIVAS | 2377.30 | 1761.35 | 316.97333 | 234.8467 | 34.970335 | 82.126667 |
| 2015-01-01 | 8 | Ernesto Pineda | 75 | Real | 0021 | Pinturas | 371 | BARNICES ARQUITECTÓNICOS | 20422.48 | 13189.05 | 2722.99733 | 1758.5400 | 54.844208 | 964.457333 |
| 2015-01-01 | 6 | Paulina Casanova | 57 | Real | 0021 | Pinturas | 372 | PINTURA AUTOMOTRIZ | 719.80 | 668.40 | 95.97333 | 89.1200 | 7.690006 | 6.853333 |
| 2015-01-01 | 7 | Carlos Vela | 62 | Real | 0021 | Pinturas | 376 | TINTES PARA MADERA | 15589.78 | 10835.03 | 2078.63733 | 1444.6707 | 43.883127 | 633.966667 |
| 2015-01-01 | 2 | Michelle Perez | 20 | Real | 0021 | Pinturas | 751 | BROCHAS, RODILLOS Y BANDEJAS | 216456.68 | 116269.21 | 28860.89067 | 15502.5613 | 86.168531 | 13358.329333 |
Analisis inicial
Estadísticas básicas
# Resumen básico de estadísticas descriptivas para las variables numéricas
summary_stats <- summary(bd[, c("Ventas Netas (Q)", "Costo", "Ventas Netas (USD)", "Costo (USD)")])
kable(summary_stats, caption = "Resumen de estadísticas descriptivas para variables numéricas") %>%
kable_styling(full_width = FALSE)| Ventas Netas (Q) | Costo | Ventas Netas (USD) | Costo (USD) | |
|---|---|---|---|---|
| Min. : -437 | Min. :-5145860 | Min. : -58.3 | Min. :-686115 | |
| 1st Qu.: 19321 | 1st Qu.: 11081 | 1st Qu.: 2576.2 | 1st Qu.: 1477 | |
| Median : 92753 | Median : 52227 | Median : 12367.1 | Median : 6964 | |
| Mean : 238182 | Mean : 136819 | Mean : 31757.6 | Mean : 18242 | |
| 3rd Qu.: 275888 | 3rd Qu.: 153648 | 3rd Qu.: 36785.1 | 3rd Qu.: 20486 | |
| Max. :7119698 | Max. : 3914946 | Max. :949293.1 | Max. : 521993 |
# Conteo de observaciones por tipo de venta
vendedor_count <- table(bd$Nom_Completo_Vendedor)
vendedor_count <- sort(vendedor_count, decreasing = TRUE)
kable(vendedor_count, caption = "Conteo de observaciones por tipo de vendedor") %>%
kable_styling(full_width = FALSE)| Var1 | Freq |
|---|---|
| Juan Garza | 3951 |
| Ernesto Pineda | 756 |
| Sofia Gonzalez | 524 |
| Pedro Arroyo | 515 |
| Gonzalo Aguilar | 504 |
| Carlos Vela | 433 |
| Paulina Casanova | 380 |
| Michelle Perez | 329 |
# Conteo de observaciones por departamento
depto_count <- table(bd$`Departamento`)
depto_count <- sort(depto_count, decreasing = TRUE)
kable(depto_count, caption = "Conteo de observaciones por departamento") %>%
kable_styling(full_width = FALSE)| Var1 | Freq |
|---|---|
| Bebes | 640 |
| Juguetes | 561 |
| Pinturas | 358 |
| Out Door Living | 346 |
| Cocina | 344 |
| Ferretería | 339 |
| Artículos Navideños | 321 |
| Eléctricos | 314 |
| Herramientas | 312 |
| Electrodomésticos | 310 |
| Organización | 297 |
| Plomería | 293 |
| Niños | 283 |
| Decoracion | 245 |
| Automotriz | 244 |
| Materiales de Construcción | 206 |
| Mascotas | 202 |
| Jardinería | 190 |
| Limpieza | 183 |
| Lámparas | 175 |
| Mesa | 174 |
| Baños | 129 |
| Electronica | 125 |
| Seguridad | 114 |
| Muebles de Interior | 112 |
| Artículos Impulso | 95 |
| Guatemala nuestra | 95 |
| Muebles de Exterior | 95 |
| Blancos | 74 |
| Alfombras | 72 |
| Cortinaje | 72 |
| Librería | 72 |
Analítica de datos
Pareto ABC por departamentos
Pregunta 1 y 2:
¿Cuál es el monto de ventas y cantidad de departamentos por cada clasificación (A, B y C)?
# Sumar las ventas netas por departamento
ventas_por_departamento <- bd %>%
group_by(`Departamento`) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Calcular el total de ventas
total_ventas <- sum(ventas_por_departamento$Ventas_Netas_USD)
# Crear una tabla que muestre el porcentaje de ventas por departamento
ventas_por_departamento <- ventas_por_departamento %>%
mutate(
Percentage = (Ventas_Netas_USD / total_ventas) * 100
)
# Ordenar los departamentos de mayor a menor
ventas_por_departamento <- ventas_por_departamento %>%
arrange(desc(Ventas_Netas_USD))
# Agregar una columna de porcentaje acumulado
ventas_por_departamento <- ventas_por_departamento %>%
mutate(
Porcentaje_Acumulado = cumsum(Percentage)
)
# Asignar categorías ABC
ventas_por_departamento <- ventas_por_departamento %>%
mutate(
Categoria = case_when(
Porcentaje_Acumulado <= 80 ~ "A",
Porcentaje_Acumulado <= 95 ~ "B",
TRUE ~ "C"
)
)
# Crear la tabla de ventas por zona
ventas_por_zona <- ventas_por_departamento %>%
group_by(Categoria) %>%
summarize(
Ventas_Netas_USD = sum(Ventas_Netas_USD),
Cantidad_Departamentos = n()
)
# Formatear la tabla utilizando kable
kable(ventas_por_zona,
caption = "Pareto ABC de Ventas por Departamento",
col.names = c("Clasificación", "Ventas Netas (USD)", "Cantidad de Departamentos"),
align = c("c", "r", "r"))%>%
kable_styling(full_width = FALSE)| Clasificación | Ventas Netas (USD) | Cantidad de Departamentos |
|---|---|---|
| A | 184530955 | 18 |
| B | 35356587 | 7 |
| C | 14864808 | 7 |
Diagrama de Pareto:
# Crear un diccionario para asignar colores a cada zona
colores_zona <- c("A" = "#69b3a2", "B" = "#145C9E", "C" = "#79C7C5")
# Crear el gráfico de Pareto con colores por zona
ggplot(ventas_por_departamento, aes(x = reorder(`Departamento`, -Ventas_Netas_USD), y = Ventas_Netas_USD, fill = Categoria)) +
geom_bar(stat = "identity") +
geom_line(aes(y = Porcentaje_Acumulado * max(ventas_por_departamento$Ventas_Netas_USD) / 100), color = "#e06666", size = 1.5, group = 1) +
geom_point(aes(y = Porcentaje_Acumulado * max(ventas_por_departamento$Ventas_Netas_USD) / 100), color = "#e06666", size = 3) +
scale_y_continuous(labels = label_number_si(unit = "M", accuracy = 0.1), sec.axis = sec_axis(~ . * 100 / max(ventas_por_departamento$Ventas_Netas_USD), name = "Porcentaje acumulado (%)")) +
labs(x = "Departamento", y = "Ventas Netas (USD)", title = "Pareto ABC de Ventas Netas por departamento",
subtitle = "Categorización de departamentos por contribución a las ventas",
caption = "Fuente: Datos de archivo.xlsx") +
scale_fill_manual(values = colores_zona) + # Asignar colores a las zonas
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "none")Pareto ABC por clientes
Pregunta 3 y 4:
3.-Realizar un ABC de clientes e identificar cuáles son los 5 clientes que más compran
# Sumar las ventas netas por Cliente
ventas_por_cliente <- bd %>%
group_by(`Número de cliente`) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Calcular el total de ventas
total_ventas_clientes <- sum(ventas_por_cliente$Ventas_Netas_USD)
# Crear una tabla que muestre el porcentaje de ventas por cliente
ventas_por_cliente <- ventas_por_cliente %>%
mutate(
Porcentaje_del_total = (Ventas_Netas_USD / total_ventas_clientes) * 100
)
# Ordenar los clientes de mayor a menor
ventas_por_cliente <- ventas_por_cliente %>%
arrange(desc(Ventas_Netas_USD))
# Mostrar los primeros 5 registros de la base de datos
kable(head(ventas_por_cliente), caption = "Principales 5 clientes")%>% # Mostrar los primeros 5 registros
kable_styling(full_width = FALSE)| Número de cliente | Ventas_Netas_USD | Porcentaje_del_total |
|---|---|---|
| 47 | 20530094 | 8.745427 |
| 14 | 19963858 | 8.504221 |
| 59 | 19198607 | 8.178239 |
| 68 | 18611336 | 7.928072 |
| 74 | 16949300 | 7.220077 |
| 71 | 2889475 | 1.230861 |
4.-Identificar cuál es el vendedor que le vende a la mayoría de los clientes
# Calcular las ventas por vendedor y cliente
ventas_por_vendedor <- bd %>%
group_by(`Nom_Completo_Vendedor`, `Número de cliente`) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`)) %>%
group_by(`Nom_Completo_Vendedor`) %>%
summarize(Total_Ventas = sum(Ventas_Netas_USD),
Cantidad_Clientes = n()) %>%
arrange(desc(Cantidad_Clientes)) %>%
top_n(3)
# Crear la tabla con kable
tabla_top_vendedores <- kable(ventas_por_vendedor, format = "html", caption = "Top 3 Vendedores por Cantidad de Clientes y Ventas") %>%
kable_styling(full_width = FALSE)
# Mostrar la tabla
tabla_top_vendedores| Nom_Completo_Vendedor | Total_Ventas | Cantidad_Clientes |
|---|---|---|
| Juan Garza | 126053856 | 87 |
| Ernesto Pineda | 27277862 | 16 |
| Pedro Arroyo | 13928986 | 10 |
| Sofia Gonzalez | 15238779 | 10 |
Diagrama de Pareto:
# Crear un diccionario para asignar colores a cada zona
colores_zona <- c("A" = "#69b3a2", "B" = "#145C9E", "C" = "#79C7C5")
# Crear el gráfico de Pareto con colores por zona
ggplot(ventas_por_cliente, aes(x = reorder(`Número de cliente`, -Ventas_Netas_USD), y = Ventas_Netas_USD, fill = Categoria_cliente)) +
geom_bar(stat = "identity") +
geom_line(aes(y = Porcentaje_Acumulado_cliente * max(ventas_por_cliente$Ventas_Netas_USD) / 100), color = "#e06666", size = 1.5, group = 1) +
geom_point(aes(y = Porcentaje_Acumulado_cliente * max(ventas_por_cliente$Ventas_Netas_USD) / 100), color = "#e06666", size = 3) +
scale_y_continuous(labels = label_number_si(unit = "M", accuracy = 0.1), sec.axis = sec_axis(~ . * 100 / max(ventas_por_cliente$Ventas_Netas_USD), name = "Porcentaje acumulado (%)")) +
labs(x = "Número de cliente", y = "Ventas Netas (USD)", title = "Pareto ABC de Ventas Netas",
subtitle = "Categorización de clientes por contribución a las ventas",
caption = "Fuente: Datos de archivo.xlsx") +
scale_fill_manual(values = colores_zona) + # Asignar colores a las zonas
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
legend.position = "none")Análisis de tendencia de ventas y utilidad.
Gráficas de tendencia de ventas mensual para 2015
# Filtrar los datos para el año 2015
bd_2015 <- bd %>%
filter(year(Fecha) == 2015) %>%
mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))
# Calcular las ventas mensuales para 2015
ventas_mensuales_2015 <- bd_2015 %>%
group_by(Mes) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Asignar colores a los trimestres
ventas_mensuales_2015 <- ventas_mensuales_2015 %>%
mutate(Trimestre = case_when(
Mes %in% c("Jan", "Feb", "Mar") ~ "Q1",
Mes %in% c("Apr", "May", "Jun") ~ "Q2",
Mes %in% c("Jul", "Aug", "Sep") ~ "Q3",
Mes %in% c("Oct", "Nov", "Dec") ~ "Q4"
))
# Definir colores para los trimestres
colores_trimestre <- c("Q1" = "#1f77b4", "Q2" = "#ff7f0e", "Q3" = "#2ca02c", "Q4" = "#d62728")
# Crear la gráfica con línea de tendencia
ggplot(ventas_mensuales_2015, aes(x = Mes, y = Ventas_Netas_USD)) +
geom_bar(aes(fill = Trimestre), stat = "identity", width = 0.7) +
geom_smooth(aes(group = 1), method = "lm", se = FALSE, color = "#9467bd", size = 1.5, linetype = "dashed") +
scale_y_continuous(labels = scales::label_number_si(unit = "M", accuracy = 0.1)) +
scale_fill_manual(values = colores_trimestre) +
labs(
title = "Ventas Mensuales de 2015",
subtitle = "Con línea de tendencia",
x = "Mes",
y = "Ventas Netas (USD)",
fill = "Trimestre"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 20),
plot.subtitle = element_text(hjust = 0.5, size = 15),
axis.text.x = element_text(angle = 45, hjust = 1)
)Gráficas de tendencia de ventas mensual para 2016
# Filtrar los datos para el año 2016
bd_2016 <- bd %>%
filter(year(Fecha) == 2016) %>%
mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))
# Calcular las ventas mensuales para 2016
ventas_mensuales_2016 <- bd_2016 %>%
group_by(Mes) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Asignar colores a los trimestres
ventas_mensuales_2016 <- ventas_mensuales_2016 %>%
mutate(Trimestre = case_when(
Mes %in% c("Jan", "Feb", "Mar") ~ "Q1",
Mes %in% c("Apr", "May", "Jun") ~ "Q2",
Mes %in% c("Jul", "Aug", "Sep") ~ "Q3",
Mes %in% c("Oct", "Nov", "Dec") ~ "Q4"
))
# Definir colores para los trimestres
colores_trimestre <- c("Q1" = "#1f77b4", "Q2" = "#ff7f0e", "Q3" = "#2ca02c", "Q4" = "#d62728")
# Crear la gráfica con línea de tendencia
ggplot(ventas_mensuales_2016, aes(x = Mes, y = Ventas_Netas_USD)) +
geom_bar(aes(fill = Trimestre), stat = "identity", width = 0.7) +
geom_smooth(aes(group = 1), method = "lm", se = FALSE, color = "#9467bd", size = 1.5, linetype = "dashed") +
scale_y_continuous(labels = scales::label_number_si(unit = "M", accuracy = 0.1)) +
scale_fill_manual(values = colores_trimestre) +
labs(
title = "Ventas Mensuales de 2016",
subtitle = "Con línea de tendencia",
x = "Mes",
y = "Ventas Netas (USD)",
fill = "Trimestre"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 20),
plot.subtitle = element_text(hjust = 0.5, size = 15),
axis.text.x = element_text(angle = 45, hjust = 1)
)Gráfica de tendencia de ventas mensual para ambos años
# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
filter(year(Fecha) == 2015) %>%
mutate(
Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"),
Año = "2015"
)
bd_2016 <- bd %>%
filter(year(Fecha) == 2016) %>%
mutate(
Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"),
Año = "2016"
)
# Combinar los datos de ambos años
bd_combined <- bind_rows(bd_2015, bd_2016)
# Calcular las ventas mensuales para ambos años
ventas_mensuales <- bd_combined %>%
group_by(Año, Mes) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Asignar colores a los trimestres
ventas_mensuales <- ventas_mensuales %>%
mutate(Trimestre = case_when(
Mes %in% c("Jan", "Feb", "Mar") ~ "Q1",
Mes %in% c("Apr", "May", "Jun") ~ "Q2",
Mes %in% c("Jul", "Aug", "Sep") ~ "Q3",
Mes %in% c("Oct", "Nov", "Dec") ~ "Q4"
))
# Definir colores para los trimestres
colores_trimestre <- c("Q1" = "#1f77b4", "Q2" = "#ff7f0e", "Q3" = "#2ca02c", "Q4" = "#d62728")
# Crear la gráfica con las tres líneas de tendencia
ggplot(ventas_mensuales, aes(x = interaction(Año, Mes, sep = "-"), y = Ventas_Netas_USD)) +
geom_bar(aes(fill = Trimestre), stat = "identity", width = 0.7) +
geom_smooth(aes(group = Año, color = Año), method = "lm", se = FALSE, size = 1.5, linetype = "dashed") +
geom_smooth(aes(group = 1), method = "lm", se = FALSE, color = "black", size = 1.5, linetype = "solid") +
scale_y_continuous(labels = scales::label_number_si(unit = "M", accuracy = 0.1)) +
scale_fill_manual(values = colores_trimestre) +
labs(
title = "Ventas Mensuales de 2015 y 2016",
subtitle = "Con líneas de tendencia",
x = "Mes y Año",
y = "Ventas Netas (USD)",
fill = "Trimestre",
color = "Líneas de Tendencia"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 20),
plot.subtitle = element_text(hjust = 0.5, size = 15),
axis.text.x = element_text(angle = 45, hjust = 1)
)Análisis de crecimiento mensual y anual
# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
filter(year(Fecha) == 2015) %>%
mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))
bd_2016 <- bd %>%
filter(year(Fecha) == 2016) %>%
mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))
# Calcular las ventas mensuales para 2015
ventas_mensuales_2015 <- bd_2015 %>%
group_by(Mes) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Calcular el crecimiento mensual para 2015
ventas_mensuales_2015 <- ventas_mensuales_2015 %>%
mutate(Crecimiento_Mensual = (Ventas_Netas_USD / lag(Ventas_Netas_USD, default = first(Ventas_Netas_USD)) - 1) * 100)
# Calcular las ventas mensuales para 2016
ventas_mensuales_2016 <- bd_2016 %>%
group_by(Mes) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Calcular el crecimiento mensual para 2016
ventas_mensuales_2016 <- ventas_mensuales_2016 %>%
mutate(Crecimiento_Mensual = (Ventas_Netas_USD / lag(Ventas_Netas_USD, default = first(Ventas_Netas_USD)) - 1) * 100)
# Combinar los resultados de ambos años en una sola tabla
crecimiento_mensual <- bind_rows(
ventas_mensuales_2015 %>% mutate(Año = "2015"),
ventas_mensuales_2016 %>% mutate(Año = "2016")
)
# Corregir el crecimiento mensual para enero de 2016
crecimiento_mensual$Crecimiento_Mensual[crecimiento_mensual$Mes == "Jan" & crecimiento_mensual$Año == "2016"] <- NA
# Crear la tabla del crecimiento mensual
tabla_crecimiento_mensual <- crecimiento_mensual %>%
select(Año, Mes, Ventas_Netas_USD, Crecimiento_Mensual) %>%
arrange(Año, Mes) %>%
kable(caption = "Crecimiento Mensual de Ventas", format = "html", digits = 2) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
# Calcular las ventas anuales para 2015 y 2016
ventas_anuales <- bd %>%
mutate(Año = year(Fecha)) %>%
group_by(Año) %>%
summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))
# Calcular el crecimiento anual de 2015 a 2016
crecimiento_anual <- ventas_anuales %>%
mutate(Crecimiento_Anual = (Ventas_Netas_USD / lag(Ventas_Netas_USD, default = first(Ventas_Netas_USD)) - 1) * 100)
# Crear la tabla del crecimiento anual
tabla_crecimiento_anual <- crecimiento_anual %>%
kable(caption = "Crecimiento Anual de Ventas", format = "html", digits = 2) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
# Graficar el crecimiento mensual
ggplot(crecimiento_mensual, aes(x = Mes, y = Crecimiento_Mensual, color = Año, group = Año)) +
geom_line(size = 1.5) +
labs(
title = "Crecimiento Mensual de Ventas",
x = "Mes",
y = "% Crecimiento Mensual",
color = "Año"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 20),
axis.text.x = element_text(angle = 45, hjust = 1)
)| Año | Mes | Ventas_Netas_USD | Crecimiento_Mensual |
|---|---|---|---|
| 2015 | Jan | 7913549 | 0.00 |
| 2015 | Feb | 7084396 | -10.48 |
| 2015 | Mar | 10168852 | 43.54 |
| 2015 | Apr | 7634222 | -24.93 |
| 2015 | May | 8364326 | 9.56 |
| 2015 | Jun | 8756596 | 4.69 |
| 2015 | Jul | 9042700 | 3.27 |
| 2015 | Aug | 8193746 | -9.39 |
| 2015 | Sep | 9760198 | 19.12 |
| 2015 | Oct | 8124340 | -16.76 |
| 2015 | Nov | 13316292 | 63.91 |
| 2015 | Dec | 23388851 | 75.64 |
| 2016 | Jan | 8012247 | NA |
| 2016 | Feb | 8788090 | 9.68 |
| 2016 | Mar | 10050385 | 14.36 |
| 2016 | Apr | 7981498 | -20.59 |
| 2016 | May | 8498493 | 6.48 |
| 2016 | Jun | 11029844 | 29.79 |
| 2016 | Jul | 9923371 | -10.03 |
| 2016 | Aug | 8452978 | -14.82 |
| 2016 | Sep | 10290803 | 21.74 |
| 2016 | Oct | 8611301 | -16.32 |
| 2016 | Nov | 16960601 | 96.96 |
| 2016 | Dec | 4404673 | -74.03 |
| Año | Ventas_Netas_USD | Crecimiento_Anual |
|---|---|---|
| 2015 | 121748066 | 0.00 |
| 2016 | 113004284 | -7.18 |
Comportamiento de utilidad en el tiempo
# Calcular la utilidad diaria para 2015 y 2016
bd <- bd %>%
mutate(Anio = year(Fecha), Dia_Anual = yday(Fecha))
utilidad_diaria <- bd %>%
group_by(Anio, Dia_Anual) %>%
summarize(Utilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`)) %>%
ungroup()
# Convertir los días del año a fechas reales para el eje X
utilidad_diaria <- utilidad_diaria %>%
mutate(Fecha = as.Date(Dia_Anual, origin = paste0(Anio - 1, "-12-31")))
# Gráfica de rentabilidad diaria para 2015 y 2016
ggplot(utilidad_diaria, aes(x = Fecha, y = Utilidad / 1e6, color = as.factor(Anio))) +
geom_line(size = 1) +
scale_color_manual(values = c("2015" = "#1f77b4", "2016" = "#ff7f0e")) +
scale_y_continuous(labels = scales::label_number_si(prefix = "$", unit = "M", accuracy = 0.1)) +
scale_x_date(date_labels = "%b %d", date_breaks = "1 month") +
labs(
title = "Utilidad bruta Diaria - 2015 vs 2016",
x = "Fecha",
y = "Utilidad (Millones de USD)",
color = "Año"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 20),
axis.text.x = element_text(angle = 45, hjust = 1)
)Análisis de rentabilidad del portafolio
Análisis de rentabilidad por mes
# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
filter(year(Fecha) == 2015) %>%
mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))
bd_2016 <- bd %>%
filter(year(Fecha) == 2016) %>%
mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))
# Calcular la rentabilidad mensual para 2015
rentabilidad_mensual_2015 <- bd_2015 %>%
group_by(Mes) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Calcular la rentabilidad mensual para 2016
rentabilidad_mensual_2016 <- bd_2016 %>%
group_by(Mes) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Combinar los resultados de ambos años en una sola tabla
rentabilidad_mensual <- rentabilidad_mensual_2015 %>%
rename(Rentabilidad_2015 = Rentabilidad) %>%
full_join(rentabilidad_mensual_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Mes") %>%
arrange(match(Mes, month.name))
# Crear la tabla de rentabilidad mensual
tabla_rentabilidad_mensual <- rentabilidad_mensual %>%
kable(caption = "Rentabilidad Mensual de 2015 y 2016", format = "html", digits = 2, col.names = c("Mes", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
# Mostrar la tabla
tabla_rentabilidad_mensual| Mes | Rentabilidad 2015 (%) | Rentabilidad 2016 (%) |
|---|---|---|
| May | 66.24 | 63.25 |
| Jan | 71.09 | 75.95 |
| Feb | 75.89 | 76.43 |
| Mar | 71.33 | 76.93 |
| Apr | 70.93 | 77.09 |
| Jun | 71.66 | 65.68 |
| Jul | 72.09 | 93.52 |
| Aug | 73.57 | 69.75 |
| Sep | 75.84 | 77.28 |
| Oct | 85.45 | 80.75 |
| Nov | 74.92 | 74.71 |
| Dec | 70.52 | 79.40 |
Análisis de rentabilidad por trimestre
# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
filter(year(Fecha) == 2015) %>%
mutate(Trimestre = quarter(Fecha, with_year = FALSE))
bd_2016 <- bd %>%
filter(year(Fecha) == 2016) %>%
mutate(Trimestre = quarter(Fecha, with_year = FALSE))
# Calcular la rentabilidad por trimestre para 2015
rentabilidad_trimestre_2015 <- bd_2015 %>%
group_by(Trimestre) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Calcular la rentabilidad por trimestre para 2016
rentabilidad_trimestre_2016 <- bd_2016 %>%
group_by(Trimestre) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Combinar los resultados de ambos años en una sola tabla
rentabilidad_trimestre <- rentabilidad_trimestre_2015 %>%
rename(Rentabilidad_2015 = Rentabilidad) %>%
full_join(rentabilidad_trimestre_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Trimestre")
# Crear la tabla de rentabilidad por trimestre
tabla_rentabilidad_trimestre <- rentabilidad_trimestre %>%
kable(caption = "Rentabilidad por Trimestre de 2015 y 2016", format = "html", digits = 2, col.names = c("Trimestre", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
# Mostrar la tabla
tabla_rentabilidad_trimestre| Trimestre | Rentabilidad 2015 (%) | Rentabilidad 2016 (%) |
|---|---|---|
| 1 | 72.51 | 76.47 |
| 2 | 69.57 | 68.05 |
| 3 | 73.88 | 80.15 |
| 4 | 74.37 | 77.09 |
Análisis de rentabilidad por departamento
# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
filter(year(Fecha) == 2015)
bd_2016 <- bd %>%
filter(year(Fecha) == 2016)
# Calcular la rentabilidad por departamento para 2015
rentabilidad_departamento_2015 <- bd_2015 %>%
group_by(`Departamento`) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Calcular la rentabilidad por departamento para 2016
rentabilidad_departamento_2016 <- bd_2016 %>%
group_by(`Departamento`) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Combinar los resultados de ambos años en una sola tabla
rentabilidad_departamento <- rentabilidad_departamento_2015 %>%
rename(Rentabilidad_2015 = Rentabilidad) %>%
full_join(rentabilidad_departamento_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Departamento")
# Crear la tabla de rentabilidad por departamento
tabla_rentabilidad_departamento <- rentabilidad_departamento %>%
kable(caption = "Rentabilidad por Departamento de 2015 y 2016", format = "html", digits = 2, col.names = c("Departamento", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
# Mostrar la tabla
tabla_rentabilidad_departamento| Departamento | Rentabilidad 2015 (%) | Rentabilidad 2016 (%) |
|---|---|---|
| Alfombras | 100.86 | 108.98 |
| Artículos Impulso | 60.19 | 68.35 |
| Artículos Navideños | 86.48 | 143.29 |
| Automotriz | 62.18 | 61.16 |
| Baños | 92.66 | 93.40 |
| Bebes | 59.96 | 72.39 |
| Blancos | 76.72 | 80.47 |
| Cocina | 84.89 | 87.80 |
| Cortinaje | 150.90 | 150.99 |
| Decoracion | 89.47 | 90.65 |
| Electrodomésticos | 61.63 | 61.04 |
| Electronica | 29.46 | 23.28 |
| Eléctricos | 76.91 | 83.15 |
| Ferretería | 101.21 | 98.84 |
| Guatemala nuestra | 41.00 | 40.91 |
| Herramientas | 63.17 | 63.46 |
| Jardinería | 78.57 | 75.72 |
| Juguetes | 67.15 | 65.17 |
| Librería | 45.96 | 48.54 |
| Limpieza | 46.83 | 45.21 |
| Lámparas | 106.04 | 107.38 |
| Mascotas | 62.29 | 58.16 |
| Materiales de Construcción | 25.67 | 77.08 |
| Mesa | 92.17 | 93.83 |
| Muebles de Exterior | 75.03 | 78.24 |
| Muebles de Interior | 69.91 | 77.15 |
| Niños | 90.79 | 84.78 |
| Organización | 88.56 | 83.59 |
| Out Door Living | 86.10 | 70.90 |
| Pinturas | 51.91 | 52.64 |
| Plomería | 67.88 | 71.04 |
| Seguridad | 71.88 | 66.81 |
Análisis de rentabilidad por clientes
# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
filter(year(Fecha) == 2015)
bd_2016 <- bd %>%
filter(year(Fecha) == 2016)
# Calcular la rentabilidad por número de cliente para 2015
rentabilidad_cliente_2015 <- bd_2015 %>%
group_by(`Número de cliente`) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Calcular la rentabilidad por número de cliente para 2016
rentabilidad_cliente_2016 <- bd_2016 %>%
group_by(`Número de cliente`) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Combinar los resultados de ambos años en una sola tabla
rentabilidad_cliente <- rentabilidad_cliente_2015 %>%
rename(Rentabilidad_2015 = Rentabilidad) %>%
full_join(rentabilidad_cliente_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Número de cliente")
# Crear la tabla de rentabilidad por número de cliente
tabla_rentabilidad_cliente <- rentabilidad_cliente %>%
kable(caption = "Rentabilidad por Cliente de 2015 y 2016", format = "html", digits = 2, col.names = c("Número de Cliente", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
# Mostrar la tabla
tabla_rentabilidad_cliente| Número de Cliente | Rentabilidad 2015 (%) | Rentabilidad 2016 (%) |
|---|---|---|
| 1 | 70.50 | 79.53 |
| 2 | 50.16 | 88.02 |
| 3 | 64.54 | 75.91 |
| 4 | 64.34 | 84.89 |
| 5 | 66.45 | 82.75 |
| 6 | 81.39 | 60.03 |
| 7 | 68.20 | 70.55 |
| 8 | 67.68 | 60.53 |
| 9 | 67.07 | 71.93 |
| 10 | 68.20 | 71.33 |
| 11 | 64.89 | 79.29 |
| 12 | 73.67 | 57.26 |
| 13 | 79.39 | 70.70 |
| 14 | 68.69 | 96.76 |
| 15 | 65.99 | 78.90 |
| 16 | 54.23 | 91.82 |
| 17 | 74.29 | 85.60 |
| 18 | 60.00 | 60.64 |
| 19 | 56.59 | 77.34 |
| 20 | 43.72 | 108.74 |
| 21 | 67.38 | 67.53 |
| 22 | 73.91 | 74.69 |
| 23 | 82.93 | 56.07 |
| 24 | 81.52 | 47.56 |
| 25 | 72.13 | 82.55 |
| 26 | 78.68 | 72.95 |
| 27 | 70.26 | 77.80 |
| 28 | 79.59 | 82.77 |
| 29 | 80.90 | 81.35 |
| 30 | 62.38 | 76.09 |
| 31 | 90.79 | 88.28 |
| 32 | 70.47 | 75.27 |
| 33 | 69.49 | 81.54 |
| 34 | 81.10 | 68.92 |
| 35 | 64.17 | 84.85 |
| 36 | 68.09 | 83.24 |
| 37 | 79.52 | 89.08 |
| 38 | 86.53 | 60.97 |
| 39 | 72.58 | 76.43 |
| 40 | 55.85 | 82.02 |
| 41 | 77.53 | 97.91 |
| 42 | 62.75 | 79.48 |
| 43 | 94.57 | 52.35 |
| 44 | 87.87 | 77.91 |
| 45 | 72.51 | 57.40 |
| 46 | 80.49 | 82.84 |
| 47 | 69.87 | 66.11 |
| 48 | 70.82 | 67.07 |
| 49 | 94.04 | 90.92 |
| 50 | 75.10 | 78.77 |
| 51 | 47.21 | 64.74 |
| 52 | 80.06 | 82.38 |
| 53 | 85.83 | 61.60 |
| 54 | 96.31 | 60.19 |
| 55 | 80.99 | 56.90 |
| 56 | 70.29 | 72.44 |
| 57 | 95.62 | 76.93 |
| 58 | 82.24 | 86.00 |
| 59 | 76.15 | 76.84 |
| 60 | 70.58 | 87.19 |
| 61 | 69.63 | 73.01 |
| 62 | 78.49 | 83.90 |
| 63 | 65.92 | 80.50 |
| 64 | 68.07 | 70.79 |
| 65 | 74.79 | 90.94 |
| 66 | 90.04 | 64.45 |
| 67 | 67.60 | 56.58 |
| 68 | 78.90 | 77.73 |
| 69 | 84.97 | 60.63 |
| 70 | 69.59 | 94.61 |
| 71 | 75.77 | 76.92 |
| 72 | 79.05 | 82.12 |
| 73 | 62.48 | 70.36 |
| 74 | 71.42 | 74.20 |
| 75 | 89.92 | 82.37 |
| 76 | 86.64 | 76.63 |
| 77 | 72.08 | 66.74 |
| 78 | 58.88 | 62.61 |
| 79 | 75.86 | 75.99 |
| 80 | 79.89 | 69.01 |
| 81 | 64.70 | 64.80 |
| 82 | 90.66 | 76.64 |
| 83 | 86.50 | 89.62 |
| 84 | 71.96 | 77.39 |
| 85 | 64.25 | 60.01 |
| 86 | 81.30 | 71.20 |
| 87 | 69.88 | 68.78 |
Análisis de rentabilidad por vendedor
# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
filter(year(Fecha) == 2015)
bd_2016 <- bd %>%
filter(year(Fecha) == 2016)
# Calcular la rentabilidad por número de vendedor para 2015
rentabilidad_vendedor_2015 <- bd_2015 %>%
group_by(`Nom_Completo_Vendedor`) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Calcular la rentabilidad por número de vendedor para 2016
rentabilidad_vendedor_2016 <- bd_2016 %>%
group_by(`Nom_Completo_Vendedor`) %>%
summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)
# Combinar los resultados de ambos años en una sola tabla
rentabilidad_vendedor <- rentabilidad_vendedor_2015 %>%
rename(Rentabilidad_2015 = Rentabilidad) %>%
full_join(rentabilidad_vendedor_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Nom_Completo_Vendedor")
# Crear la tabla de rentabilidad por número de vendedor
tabla_rentabilidad_vendedor <- rentabilidad_vendedor %>%
kable(caption = "Rentabilidad por Vendedor de 2015 y 2016", format = "html", digits = 2, col.names = c("Vendedor", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
# Mostrar la tabla
tabla_rentabilidad_vendedor| Vendedor | Rentabilidad 2015 (%) | Rentabilidad 2016 (%) |
|---|---|---|
| Carlos Vela | 75.20 | 76.25 |
| Ernesto Pineda | 74.90 | 72.35 |
| Gonzalo Aguilar | 77.05 | 73.82 |
| Juan Garza | 71.69 | 76.91 |
| Michelle Perez | 60.53 | 72.96 |
| Paulina Casanova | 76.20 | 69.69 |
| Pedro Arroyo | 74.89 | 78.73 |
| Sofia Gonzalez | 75.63 | 72.01 |
Hoja de respuestas
Pareto ABC por departamentos
1.- ¿Cuál es el monto de ventas por cada clasificación ( A, B y C) ?
Respuesta:
| Clasificación | Ventas Netas (USD) |
|---|---|
| A | 184530955 |
| B | 35356587 |
| C | 14864808 |
2.- Calcular el número de departamentos por cada clasificación (A, B y C).
Respuesta:
| Clasificación | Cantidad de Departamentos |
|---|---|
| A | 18 |
| B | 7 |
| C | 7 |
Pareto ABC por clientes
3.- Realizar un ABC de clientes e identificar cuáles son los 5 clientes que más compran.
Respuesta:
| Número de cliente | Ventas_Netas_USD | Percentage | Porcentaje_Acumulado_cliente | Categoria_cliente |
|---|---|---|---|---|
| 47 | 20530094 | 8.745427 | 8.745427 | A |
| 14 | 19963858 | 8.504221 | 17.249647 | A |
| 59 | 19198607 | 8.178239 | 25.427886 | A |
| 68 | 18611336 | 7.928072 | 33.355959 | A |
| 74 | 16949300 | 7.220077 | 40.576035 | A |
| 71 | 2889475 | 1.230861 | 41.806896 | A |
4.- Identificar cuál es el vendedor que le vende a la mayoría de los clientes
Respuesta:
| Nom_Completo_Vendedor | Total_Ventas | Cantidad_Clientes |
|---|---|---|
| Juan Garza | 126053856 | 87 |
| Ernesto Pineda | 27277862 | 16 |
| Pedro Arroyo | 13928986 | 10 |
| Sofia Gonzalez | 15238779 | 10 |
Análisis de tendencia de ventas
5.- ¿Cuál es el mes con mas ventas para el año 2015 y 2016?
Respuesta:
| Mes | Ventas_Netas_USD | Crecimiento_Mensual |
|---|---|---|
| Dec | 23388851 | 75.64087 |
| Mes | Ventas_Netas_USD | Crecimiento_Mensual |
|---|---|---|
| Nov | 16960601 | 96.95748 |
6.- ¿Cuál es el mes con menos ventas para el año 2015 y 2016?
Respuesta:
| Mes | Ventas_Netas_USD | Crecimiento_Mensual |
|---|---|---|
| Feb | 7084396 | -10.47764 |
| Mes | Ventas_Netas_USD | Crecimiento_Mensual |
|---|---|---|
| Dec | 4404673 | -74.02997 |
7.- ¿Cuál es el porcentaje de crecimiento en ventas anual?
Respuesta:
| Año | Ventas_Netas_USD | Crecimiento_Anual |
|---|---|---|
| 2015 | 121748066 | 0.00 |
| 2016 | 113004284 | -7.18 |
Análisis de rentabilidad de portafolio
8.- ¿Cuál fue la rentabilidad del mes de septiembre del 2016?
Respuesta:
| Mes | Rentabilidad 2015 (%) | Rentabilidad 2016 (%) |
|---|---|---|
| May | 66.24 | 63.25 |
| Jan | 71.09 | 75.95 |
| Feb | 75.89 | 76.43 |
| Mar | 71.33 | 76.93 |
| Apr | 70.93 | 77.09 |
| Jun | 71.66 | 65.68 |
| Jul | 72.09 | 93.52 |
| Aug | 73.57 | 69.75 |
| Sep | 75.84 | 77.28 |
| Oct | 85.45 | 80.75 |
| Nov | 74.92 | 74.71 |
| Dec | 70.52 | 79.40 |
9.- ¿Cuáles fue el trimestre con la rentabilidad más baja?
Respuesta:
| Trimestre | Rentabilidad 2015 (%) | Rentabilidad 2016 (%) |
|---|---|---|
| 1 | 72.51 | 76.47 |
| 2 | 69.57 | 68.05 |
| 3 | 73.88 | 80.15 |
| 4 | 74.37 | 77.09 |
10.- ¿Cuál fue mi cliente menos rentable y en qué año?
Respuesta:
| Número de cliente | Año | Rentabilidad |
|---|---|---|
| 20 | 2015 | 43.72 |