En el presente informe se realiza un análisis exploratorio de datos de las ventas de la empresa Adidas en un período determinado, con el objetivo de evaluar el desempeño de sus líneas de productos en términos de rentabilidad, eficiencia en ventas y resultados financieros generales a través de técnicas de estadística descriptiva.
Además, el informe profundiza en el canal con mayor volumen de ventas, el estado de EE. UU. que concentra la mayor actividad comercial y el producto con el margen operativo más alto.
El análisis exploratorio de datos (EDA) es un paso clave para comprender la información de venta de articulos de Adidas, para identificar patrones y evaluar la distribución de las variables.
Instalar y cargar librerias
# Cargar librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
Cargar la base de datos
La empresa dispone de una base de datos completa que incluye variables esenciales como el precio por unidad, las unidades vendidas, las ventas totales, la utilidad operativa, el margen operativo y el método de venta.
library(readxl)
datos <- read_excel("C:/Users/asuar/OneDrive/Escritorio/U. Javeriana/Carpeta/Adidas.xlsx")
La Figura 1 muestra que el canal “Online” es el que tiene mayor margen operativo en ese momento determinado. Esto se debe a que, a través de este medio, se tiene menores costos operativos de infraestructura y personal,mayor eficiencia logística y mejor control de precios, lo que se traduce en un aumento de sus ganancias, mientra que los canales “In-store” y “Outlet” enfrentan costos más altos y mayores descuentos que reducen su rentabilidad. Por esta razón, enfocaremos nuestro análisis en el canal “Online”.
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
# Agrupar y calcular el promedio
datos_promedio <- datos %>%
group_by(sales_method) %>%
summarise(promedio_margen = mean(operating_margin, na.rm = TRUE))
# Crear el gráfico de barras interactivo
Margen_Operativo_por_canal <- plot_ly(
data = datos_promedio, # Usamos los datos ya promediados
x = ~sales_method, # El eje X es el canal de ventas
y = ~promedio_margen, # El eje Y es el promedio del margen
type = "bar", # Tipo de gráfico de barras
marker = list(color = 'red')
) %>%
layout(title = "Figura 1. Margen Operativo por tipo de canal por canal de venta",
xaxis = list(title = "Canal"),
yaxis = list(title = "Promedio Margen Operativo (%)",
separators = ",.")) # Añadimos el formato de miles aquí
# Mostrar el gráfico
Margen_Operativo_por_canal
Considerando el mayor margen Opetarivo y mediante la Figura 2, el canal con mayor porcentaje de participación en las ventas es el canal online. Esto se debe a que, a través de este medio, un mayor número de personas puede acceder a los productos sin necesidad de desplazarse. Además, este resultado refuerza el hecho de que el canal online es el que más aporta tanto al margen operativo como al total de ventas realizadas.
library(dplyr)
library(plotly)
library(RColorBrewer)
# Agrupar por estado y calcular unidades vendidas
datos_torta_1 <- datos %>%
group_by(sales_method) %>%
summarise(
total_ventas = sum(total_sales, na.rm = TRUE)
) %>%
mutate(
porcentaje = total_ventas / sum(total_ventas)
)
# Gráfico interactivo tipo torta
plot_ly(
data = datos_torta_1,
labels = ~sales_method,
values = ~total_ventas,
type = "pie",
textinfo = "label+percent",
textposition = "inside",
insidetextorientation = "horizontal",
textfont = list(size = 11, color = "white"),
marker = list(
colors = brewer.pal(n = max(3, nrow(datos_torta_1)), "Set2"),
line = list(color = "white", width = 1)
)
) %>%
layout(
title = "Figura 2. Participación de ventas por Region – Women's Apparel (Online – SD)",
legend = list(title = list(text = "Ventas %"))
)
En la Figura 3 se presenta un gráfico combinado que muestra, por un lado, las unidades vendidas por cada distribuidor (retailer) y, por otro, el margen operativo promedio correspondiente exclusivamente al canal Online. A partir de esta visualización, se observa que, aunque Foot Locker registra el mayor volumen de unidades vendidas, el distribuidor con el margen operativo más alto es Sport Direct (45.73% vs. 48.04%). Este resultado motiva un análisis más detallado de los productos comercializados por este distribuidor.
library(plotly)
library(dplyr)
datos_retailer <- datos %>% filter(sales_method == "Online")
datos_resumen <- datos_retailer %>%
group_by(retailer) %>%
summarise(
total_unidades = sum(units_sold, na.rm = TRUE),
promedio_margen = mean(operating_margin, na.rm = TRUE)
)
# Corrección escala del eje secundario
datos_resumen$promedio_margen <- datos_resumen$promedio_margen / 100
plot_ly() %>%
add_bars(
data = datos_resumen,
x = ~retailer,
y = ~total_unidades,
name = "Unidades Vendidas",
marker = list(color = "orange"),
yaxis = "y"
) %>%
add_lines(
data = datos_resumen,
x = ~retailer,
y = ~promedio_margen,
name = "Margen Operativo",
line = list(color = "blue"),
yaxis = "y2"
) %>%
layout(
title = "Figura 3. Ventas Online: Unidades y % Prom Margen Operativo",
xaxis = list(title = "Retailer"),
yaxis = list(
title = "Unidades Vendidas",
tickformat = ","
),
yaxis2 = list(
title = "Margen Operativo (%)",
overlaying = "y",
side = "right",
tickformat = ".0%", # muestra 47% correctamente
range = c(0, max(datos_resumen$promedio_margen) * 1.2)
)
)
Sports Direct es una tienda con una cantidad significativa de unidades vendidas y un margen operativo elevado, lo que la convierte en un líder comercial y financiero para la compañía Adidas.En la Figura 4 se presentan las unidades vendidas y el margen operativo promedio de la línea de productos comercializados por el distribuidor Sports Direct (SD). En dicha figura, se observa que los dos productos con mayor cantidad de unidades vendidas son: línea de ropa para mujer (Women’s Apparel) y calzado deportivo para hombre (Men’s Athletic Footwear), con un margen operativo promedio de 54% y 49%, respectivamente.
library(plotly)
library(dplyr)
# Filtrar solo Online y retailer Sports Direct
datos_online_sd <- datos %>%
filter(sales_method == "Online",
retailer == "Sports Direct")
# Calcular rentabilidad por unidad
datos_online_sd <- datos_online_sd %>%
mutate(Profitability_per_unit = operating_profit / units_sold)
# Agrupar por producto
datos_resumen_sd <- datos_online_sd %>%
group_by(Product) %>%
summarise(
total_unidades = sum(units_sold, na.rm = TRUE),
rentabilidad_unit = mean(Profitability_per_unit, na.rm = TRUE)
)
# Gráfico combinado con Plotly
plot_ly() %>%
add_bars(
data = datos_resumen_sd,
x = ~Product,
y = ~total_unidades,
name = "Unidades Vendidas",
marker = list(color = "orange"),
yaxis = "y"
) %>%
add_lines(
data = datos_resumen_sd,
x = ~Product,
y = ~rentabilidad_unit,
name = "Rentabilidad por Unidad (USD)",
line = list(color = "blue"),
yaxis = "y2"
) %>%
layout(
title = "Figura 4. Sports Direct (Online): Unidades Vendidas y Rentabilidad por Unidad",
xaxis = list(
title = "Producto",
tickangle = -45
),
yaxis = list(
title = "Unidades Vendidas",
tickformat = ","
),
yaxis2 = list(
title = "Rentabilidad por Unidad (USD)",
overlaying = "y",
side = "right",
tickformat = ".2f", # 2 decimales
range = c(0, max(datos_resumen_sd$rentabilidad_unit, na.rm = TRUE) * 1.2)
)
)
El producto “Women’s Apparel” se destaca por tener altas unidades vendidas y márgenes operativos competitivos, lo que los convierte en líneas estratégicas para mantener e impulsar, mientras que el calzado deportivo para hombre (Men’s Athletic Footwear) presenta una mayor cantidad de unidades vendidas, su margen operativo es más bajo, 49%, representando una diferenfica de 500 puntos básicos. en la Figura 5 se preseta un gráfico de cajas y bigotes (Boxpot) para los dos productos mencionados, de la cuál se puede concluir:
library(plotly)
library(dplyr)
# Filtrar los datos Online y por retailer (Sports Direct)
datos_online_3 <- datos %>%
filter(Product == "Men's Athletic Footwear",
sales_method == "Online",
retailer == "Sports Direct")
datos_online_2 <- datos %>%
filter(Product == "Women's Apparel",
sales_method == "Online",
retailer == "Sports Direct")
# --- Boxplot 1: Men's Athletic Footwear ---
p1 <- plot_ly(
datos_online_3,
y = ~price_per_unit,
type = "box",
name = "Men's Athletic Footwear",
boxpoints = "outliers",
marker = list(color = "darkblue"),
fillcolor = "lightblue"
)
# --- Boxplot 2: Women's Apparel ---
p2 <- plot_ly(
datos_online_2,
y = ~price_per_unit,
type = "box",
name = "Women's Apparel",
boxpoints = "outliers",
marker = list(color = "darkblue"),
fillcolor = "lightblue"
)
# --- Unirlos en una sola figura ---
subplot(
p1, p2,
nrows = 1,
shareY = TRUE,
margin = 0.06
) %>%
layout(
title = "Figura 5. Comparación del Precio por Unidad – Sports Direct (Canal Online)",
yaxis = list(title = "Precio por Unidad")
)
De acuerdo con lo concluído en el analisis anterior, en la Figura 6 se observa que los dos estados con mayor participación en cuanto a unidades vendidas del producto “Women’s Apparel” son Georgia y North Carolina, estos dos estados pertenen a la región “Southeast”.
Por otro lado, analizando el precio promedio por unidad en esos dos estados, se observa que los valores se encuentran dentro la caja de la Figura 5, es decir entre el q1 y q3.
library(plotly)
library(dplyr)
# --- Filtrar Sports Direct, Online y producto Men's Athletic Footwear ---
datos_men <- datos %>%
filter(
sales_method == "Online",
retailer == "Sports Direct",
Product == "Women's Apparel"
)
# --- Agrupar por estado ---
datos_resumen_men <- datos_men %>%
group_by(State) %>%
summarise(
total_unidades = sum(units_sold, na.rm = TRUE),
promedio_prec_unit = mean(price_per_unit, na.rm = TRUE)
)
# --- Gráfico combinado con Plotly, SIN escalar precio ---
plot_ly() %>%
# Barras: unidades vendidas
add_bars(
data = datos_resumen_men,
x = ~State,
y = ~total_unidades,
name = "Unidades Vendidas",
marker = list(color = "orange"),
yaxis = "y"
) %>%
# Línea: precio promedio por unidad
add_lines(
data = datos_resumen_men,
x = ~State,
y = ~promedio_prec_unit,
name = "Precio Promedio por Unidad (USD)",
line = list(color = "blue"),
yaxis = "y2"
) %>%
layout(
title = "Figura 6. Women's Apparel (Online – SD): Unidades Vendidas y Precio Prom por Und",
xaxis = list(
title = "Estado",
tickangle = -45
),
yaxis = list(
title = "Unidades Vendidas",
tickformat = ","
),
yaxis2 = list(
title = "Precio por Unidad (USD)",
overlaying = "y",
side = "right",
tickformat = ".2f",
range = c(0, max(datos_resumen_men$promedio_prec_unit) * 1.2)
)
)
###Participación por Región
En línea con la figura anterior, en la Figura 7 se observa que la cocentración de ventas del producto Women’s Apparel por canal Online y retailer “Sports Direct” es en la región Southeast,obteniendo una participación predominante frente a las otras regiones de 46.5 %. ,
library(dplyr)
library(plotly)
library(RColorBrewer)
# Filtrar datos del producto Women's Apparel en canal Online y retailer "Sports Direct"
datos_men <- datos %>%
filter(
sales_method == "Online",
retailer == "Sports Direct",
Product == "Women's Apparel"
)
# Agrupar por estado y calcular unidades vendidas
datos_torta <- datos_men %>%
group_by(Region) %>%
summarise(
total_unidades = sum(units_sold, na.rm = TRUE)
) %>%
mutate(
porcentaje = total_unidades / sum(total_unidades)
)
# Gráfico interactivo tipo torta
plot_ly(
data = datos_torta,
labels = ~Region,
values = ~total_unidades,
type = "pie",
textinfo = "label+percent",
textposition = "inside",
insidetextorientation = "horizontal",
textfont = list(size = 11, color = "white"),
marker = list(
colors = brewer.pal(n = max(3, nrow(datos_torta)), "Set2"),
line = list(color = "white", width = 1)
)
) %>%
layout(
title = "Figura 7. Participación de ventas por Region – Women's Apparel (Online – SD)",
legend = list(title = list(text = "Region"))
)
De acuerdo con el analisis realizado por estado y observando que la mayor participación en cuanto a unidades vendidas del producto “Women’s Apparel” se concentra en Georgia y North Carolina, el siguiente analisis se enfoca en la región “Southeast”. En la Figura 8 se enfoca de forma gráfica en esta región de acuerdo con el nivel de unidades vendidas, ratificando la participación predominante de los estados de Georgia y North Carlonina.
library(dplyr)
library(plotly)
# Tabla de estados (nombre completo → abreviatura)
state_mapping <- data.frame(
State = state.name,
Abbrev = state.abb,
stringsAsFactors = FALSE
)
# Región Southeast
southeast_states <- c(
"Florida", "Georgia", "South Carolina", "North Carolina",
"Virginia", "Tennessee", "Alabama", "Mississippi",
"Arkansas", "Louisiana", "Kentucky"
)
# Filtrar datos del producto
datos_se <- datos %>%
filter(
sales_method == "Online",
retailer == "Sports Direct",
Product == "Women's Apparel",
State %in% southeast_states
) %>%
group_by(State) %>%
summarise(
unidades = sum(units_sold, na.rm = TRUE)
) %>%
left_join(state_mapping, by = "State")
# Crear mapa interactivo con hover info
plot_ly(
data = datos_se,
type = "choropleth",
locations = ~Abbrev,
locationmode = "USA-states",
z = ~unidades,
colorscale = "Greens",
colorbar = list(title = "Unidades"),
text = ~paste(State, "<br>Unidades vendidas:", unidades), # Hover info
hoverinfo = "text",
marker = list(line = list(color = "white", width = 1))
) %>%
layout(
title = list(
text = 'Figura 8. Concentración de unidades vendidas – Women\'s Apparel <br>(Online – Sports Direct), Región Southeast',
x = 0.5, # centra horizontalmente
xanchor = "center",
yanchor = "top"
),
geo = list(
scope = "usa",
showlakes = TRUE,
lakecolor = "white",
lataxis = list(range = c(24, 40)), # Limites para Southeast
lonaxis = list(range = c(-95, -75)),
projection = list(type = "albers usa")
)
)
Qué tipo de decisiones se podrían hacer de acuerdo al análisis previamente realizado?
Después del analisis realizado, detacamos la importancia de realziar gráficos dicientes, que para este caso, consideramos importnate la Figura 4 (Boxpot) ya que de ahí se pudo concluir que la mayor dispersión de precios en la ropa femenina indica una amplia variedad de estilos, impulsada especialmente por productos premium. Esto permite justificar márgenes más elevados aun cuando el volumen de ventas es menor. Este comportamiento sugiere que las consumidoras de esta categoría presentan una menor elasticidad de demanda y una mayor disposición a pagar por aspectos como moda, diseño o exclusividad, lo que facilita mantener precios altos sin necesidad de vender grandes cantidades.
Aunque la ropa femenina vende menos unidades, sus precios más elevados y su mayor margen hacen que esta categoría siga siendo financieramente relevante para Sports Direct. El análisis de la gráfica respalda la idea de que esta categoría opera bajo una estrategia de alto margen para compensar el bajo volumen, mientras que el calzado deportivo masculino contribuye al negocio mediante un alto volumen con menor margen. De este modo, ambas categorías se complementan y aportan de forma distinta al desempeño económico general.
El canal con mayor porcentaje de participación en las ventas es el canal online. Esto se explica porque, a través de este medio, un mayor número de personas puede acceder a los productos sin necesidad de desplazarse, lo que facilita el proceso de compra y amplía el alcance de ventas.
Además, este canal genera un mayor margen operativo, ya que su estructura de comercialización implica menores gastos en comparación con los canales tradicionales. La empresa no requiere tiendas físicas, personal de atención directa ni costos elevados de distribución asociados a puntos de venta, lo que reduce significativamente los gastos operacionales. En consecuencia, el canal online no solo impulsa el volumen de ventas, sino que también contribuye de manera más eficiente a la rentabilidad general de la compañía.