Introducción

Adidas es una de las marcas más reconocidas en la industria global de artículos deportivos. Fundada en 1949 en Alemania, ha consolidado su presencia en los principales mercados internacionales, ofreciendo una amplia gama de productos que incluyen calzado deportivo, ropa y accesorios. Su posicionamiento estratégico, capacidad de innovación y enfoque en el rendimiento la han convertido en un referente del sector a nivel mundial. El análisis del desempeño comercial y financiero de Adidas es fundamental para evaluar su competitividad, identificar patrones de consumo y comprender los factores que impulsan su rentabilidad. En este documento, realizaremos un análisis exploratorio de variables financieras clave, como el precio por unidad, unidades vendidas, ventas totales, utilidad operativa y margen operativo, utilizando R. Aplicaremos técnicas de estadística descriptiva y visualización de datos para detectar tendencias, niveles de variabilidad y relaciones entre variables, facilitando una mejor interpretación del desempeño de la compañía en distintos segmentos como región, producto y método de venta. A través de este análisis, se busca proporcionar una visión integral y estratégica del desempeño comercial de la compañía, lo cual sirve como insumo para directivos, analistas y académicos interesados en comprender la dinámica financiera y operativa de una empresa líder en la industria deportiva.

Análisis exploratorio

El análisis exploratorio de datos (EDA) es un paso clave para comprender la información financiera de Adidas, identificar patrones y evaluar la distribución de las variables. A través de estadísticas descriptivas y visualización de datos con R, identificaremos tendencias y relaciones entre variables como el precio por unidad, las unidades vendidas, las ventas totales, la utilidad operativa y el margen operativo.

PASO 1. Instalar y cargar librerias

# Cargar librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(tidyverse)

PASO 2: Cargar la base de datos

# Cargar datos desde el archivo Excel
Adidas <- read_excel("Adidas.xlsx")
# Cargar los datos desde el archivo Excel
library(readxl)

# Especificar la ruta correcta al archivo
Adidas <- read_excel("Adidas.xlsx", 
                     col_types = c("text", "text", "text", 
                                   "text", "text", "numeric", 
                                   "numeric", "numeric", 
                                   "numeric", "numeric", "text"))
# Ver las primeras filas de los datos
class(Adidas)  
## [1] "tbl_df"     "tbl"        "data.frame"
colnames(Adidas)  
##  [1] "distribuidor"       "region"             "estado"            
##  [4] "ciudad"             "producto"           "precio_unidad"     
##  [7] "unidades_vendidas"  "ventas_total"       "utilidad_operativa"
## [10] "margen_operativo"   "metodo_venta"
head(Adidas)
distribuidor region estado ciudad producto precio_unidad unidades_vendidas ventas_total utilidad_operativa margen_operativo metodo_venta
Foot Locker Northeast New York New York Men’s Street Footwear 50 1200 60000 30000.0 0.50 In-store
Foot Locker Northeast New York New York Men’s Athletic Footwear 50 1000 50000 15000.0 0.30 In-store
Foot Locker Northeast New York New York Women’s Street Footwear 40 1000 40000 14000.0 0.35 In-store
Foot Locker Northeast New York New York Women’s Athletic Footwear 45 850 38250 13387.5 0.35 In-store
Foot Locker Northeast New York New York Men’s Apparel 60 900 54000 16200.0 0.30 In-store
Foot Locker Northeast New York New York Women’s Apparel 50 1000 50000 12500.0 0.25 In-store

Indicadores de centralidad y dispersión

# Cargar las librerías necesarias
library(dplyr)

# Resumen estadístico de las variables disponibles en los datos de Adidas
resumen_adidas <- Adidas %>% 
  select(precio_unidad, unidades_vendidas, ventas_total, utilidad_operativa, margen_operativo) %>%  # Selección de variables
  summary()  # Resumen estadístico

# Mostrar el resumen
print(resumen_adidas)
##  precio_unidad    unidades_vendidas  ventas_total   utilidad_operativa
##  Min.   :  7.00   Min.   :   0.0    Min.   :    0   Min.   :    0     
##  1st Qu.: 35.00   1st Qu.: 106.0    1st Qu.: 4065   1st Qu.: 1753     
##  Median : 45.00   Median : 176.0    Median : 7804   Median : 3263     
##  Mean   : 45.22   Mean   : 256.9    Mean   :12455   Mean   : 4895     
##  3rd Qu.: 55.00   3rd Qu.: 350.0    3rd Qu.:15864   3rd Qu.: 6192     
##  Max.   :110.00   Max.   :1275.0    Max.   :82500   Max.   :39000     
##  margen_operativo
##  Min.   :0.100   
##  1st Qu.:0.350   
##  Median :0.410   
##  Mean   :0.423   
##  3rd Qu.:0.490   
##  Max.   :0.800

#Gráficos de barras ## Ventas totales de Adidas por region

# Cargar las librerías necesarias
library(plotly)
library(dplyr)

# Crear el gráfico de barras interactivo con color atractivo y corregir el error de texto
grafico_barras_adidas <- Adidas %>%
  plot_ly(x = ~region, y = ~ventas_total, type = 'bar',
          marker = list(color = '#00BFFF')) %>%  # Azul brillante para las barras
  layout(
    title = "Ventas Totales de Adidas por Region",
    titlefont = list(size = 24, family = "Arial, sans-serif", color = "#003366", bold = TRUE),  # Título en negrita y tipografía bonita
    xaxis = list(
      title = "Region", 
      titlefont = list(size = 16, family = "Arial, sans-serif", color = "#003366", bold = TRUE),
      tickfont = list(size = 12, family = "Arial, sans-serif", color = "#003366"),
      showgrid = TRUE,  # Mostrar la cuadrícula para facilitar la lectura
      zeroline = TRUE,  # Mostrar línea en el cero
      showticklabels = TRUE  # Etiquetas visibles en los ticks
    ),
    yaxis = list(
      title = "Ventas Totales (Miles de pesos)", 
      titlefont = list(size = 16, family = "Arial, sans-serif", color = "#003366", bold = TRUE),
      tickfont = list(size = 12, family = "Arial, sans-serif", color = "#003366"),
      showgrid = TRUE,  # Mostrar la cuadrícula para facilitar la lectura
      zeroline = TRUE,  # Mostrar línea en el cero
      showticklabels = TRUE  # Etiquetas visibles en los ticks
    ),
    hovermode = "x",  # Modo de hover por cada barra
    plot_bgcolor = 'rgba(245, 245, 245, 1)',  # Fondo del gráfico blanco
    paper_bgcolor = 'rgba(245, 245, 245, 1)',  # Fondo de la página blanco
    showlegend = FALSE,  # Eliminar la leyenda ya que no es necesaria
    annotations = list(  # Agregar las etiquetas sobre las barras con los valores
      list(
        x = ~region,
        y = ~ventas_total,
        text = paste0(round(Adidas$ventas_total / 1000000, 1), "M"),  # Convertir a millones y agregar 'M'
        showarrow = FALSE,
        font = list(size = 12, color = 'black')
      )
    )
  )

# Mostrar el gráfico
grafico_barras_adidas

El gráfico muestra las ventas totales de Adidas por región, destacando que la región Oeste tiene las ventas más altas, superando los 40 millones de pesos. Le siguen las regiones del Noreste y Sureste con ventas similares cercanas a los 20 millones de pesos. Las regiones Midwest y Sur presentan las ventas más bajas, con menos de 20 millones de pesos. Esto sugiere que la región Oeste es la de mayor demanda para Adidas, mientras que el Sur y Midwest tienen un rendimiento más bajo en ventas.

Ventas totales por producto

# Cargar las librerías necesarias
library(plotly)
library(dplyr)
# Crear el gráfico de barras interactivo con color atractivo y corregir el error de texto
grafico_barras_adidas <- Adidas %>%
  plot_ly(x = ~producto, y = ~ventas_total, type = 'bar',
          marker = list(color = '#00BFFF')) %>%  # Azul brillante para las barras
  layout(
    title = "Ventas Totales de Adidas por producto",  # Corregido "Región" por "Region"
    titlefont = list(size = 24, family = "Arial, sans-serif", color = "#003366", bold = TRUE),  # Título en negrita y tipografía bonita
    xaxis = list(
      title = "producto",  # Reemplazado "Región" por "Region"
      titlefont = list(size = 16, family = "Arial, sans-serif", color = "#003366", bold = TRUE),
      tickfont = list(size = 12, family = "Arial, sans-serif", color = "#003366"),
      showgrid = TRUE,  # Mostrar la cuadrícula para facilitar la lectura
      zeroline = TRUE,  # Mostrar línea en el cero
      showticklabels = TRUE  # Etiquetas visibles en los ticks
    ),
    yaxis = list(
      title = "Ventas Totales (Miles de pesos)", 
      titlefont = list(size = 16, family = "Arial, sans-serif", color = "#003366", bold = TRUE),
      tickfont = list(size = 12, family = "Arial, sans-serif", color = "#003366"),
      showgrid = TRUE,  # Mostrar la cuadrícula para facilitar la lectura
      zeroline = TRUE,  # Mostrar línea en el cero
      showticklabels = TRUE  # Etiquetas visibles en los ticks
    ),
    hovermode = "x",  # Modo de hover por cada barra
    plot_bgcolor = 'rgba(245, 245, 245, 1)',  # Fondo del gráfico blanco
    paper_bgcolor = 'rgba(245, 245, 245, 1)',  # Fondo de la página blanco
    showlegend = FALSE,  # Eliminar la leyenda ya que no es necesaria
    annotations = list(  # Agregar las etiquetas sobre las barras con los valores
      list(
        x = ~region,
        y = ~ventas_total,
        text = paste0(round(Adidas$ventas_total / 1000000, 1), "M"),  # Convertir a millones y agregar 'M'
        showarrow = FALSE,
        font = list(size = 12, color = 'black')
      )
    ),
    margin = list(t = 80)  # Ajustar el margen superior para evitar que el título se corte
  )

# Mostrar el gráfico
grafico_barras_adidas

El gráfico muestra las ventas totales por producto de Adidas en dólares, donde los productos de ropa masculina y calzado deportivo masculino lideran con más de 20 millones de dólares en ventas. Los calzados femeninos siguen con aproximadamente 18 millones de dólares, mientras que los productos de ropa y calzado deportivo femenino tienen las ventas más bajas, pero aún superando los 10 millones de dólares. ##Análisis de Rentabilidad

Rentabilidad promedio por producto

library(dplyr)

# Cargar librerías necesarias
library(dplyr)

# Crear la columna 'Rentabilidad' en Adidas
Adidas_clean <- Adidas %>%
  mutate(Rentabilidad = (utilidad_operativa / ventas_total) * 100)

# Verificar la estructura de la nueva base de datos
str(Adidas_clean)
## tibble [9,648 × 12] (S3: tbl_df/tbl/data.frame)
##  $ distribuidor      : chr [1:9648] "Foot Locker" "Foot Locker" "Foot Locker" "Foot Locker" ...
##  $ region            : chr [1:9648] "Northeast" "Northeast" "Northeast" "Northeast" ...
##  $ estado            : chr [1:9648] "New York" "New York" "New York" "New York" ...
##  $ ciudad            : chr [1:9648] "New York" "New York" "New York" "New York" ...
##  $ producto          : chr [1:9648] "Men's Street Footwear" "Men's Athletic Footwear" "Women's Street Footwear" "Women's Athletic Footwear" ...
##  $ precio_unidad     : num [1:9648] 50 50 40 45 60 50 50 50 40 45 ...
##  $ unidades_vendidas : num [1:9648] 1200 1000 1000 850 900 1000 1250 900 950 825 ...
##  $ ventas_total      : num [1:9648] 60000 50000 40000 38250 54000 ...
##  $ utilidad_operativa: num [1:9648] 30000 15000 14000 13388 16200 ...
##  $ margen_operativo  : num [1:9648] 0.5 0.3 0.35 0.35 0.3 0.25 0.5 0.3 0.35 0.35 ...
##  $ metodo_venta      : chr [1:9648] "In-store" "In-store" "In-store" "In-store" ...
##  $ Rentabilidad      : num [1:9648] 50 30 35 35 30 25 50 30 35 35 ...
# Agrupar por producto y calcular los totales de ventas, utilidad y rentabilidad promedio
rentabilidad_por_producto <- Adidas_clean %>%
  group_by(producto) %>%
  summarise(
    Ventas_Totales = sum(ventas_total, na.rm = TRUE),
    Utilidad_Operativa = sum(utilidad_operativa, na.rm = TRUE),
    Rentabilidad_Promedio = mean(Rentabilidad, na.rm = TRUE)
  )

# Ver el resultado
print(rentabilidad_por_producto)
## # A tibble: 6 × 4
##   producto               Ventas_Totales Utilidad_Operativa Rentabilidad_Promedio
##   <chr>                           <dbl>              <dbl>                 <dbl>
## 1 Men's Apparel                16520632           6381405.                  41.3
## 2 Men's Athletic Footwe…       20577180           7437457.                  40.3
## 3 Men's Street Footwear        27680769          11629046.                  44.6
## 4 Women's Apparel              23870985           9685221.                  44.1
## 5 Women's Athletic Foot…       14315521           5597822.                  42.4
## 6 Women's Street Footwe…       17201563           6494017.                  41.0
# Crear gráfico de barras de rentabilidad promedio por producto con etiquetas de datos
ggplot(rentabilidad_por_producto, aes(x = reorder(producto, Rentabilidad_Promedio), y = Rentabilidad_Promedio, fill = producto)) +
  geom_bar(stat = "identity") +  # Barras de las rentabilidades
  coord_flip() +  # Girar el gráfico para que las etiquetas sean legibles
  scale_fill_brewer(palette = "Set2") +  # Colores agradables
  labs(title = "Rentabilidad Promedio por Producto",
       x = "Producto",
       y = "Rentabilidad Promedio (%)") +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10),
    legend.position = "none"  # Eliminar la leyenda
  ) +
  # Agregar etiquetas de datos sobre las barras
  geom_text(aes(label = round(Rentabilidad_Promedio, 1)), hjust = -0.2, color = "black", size = 4)

El gráfico muestra la rentabilidad promedio por producto de Adidas, destacando que los productos de ropa masculina y calzado masculino y femenino tienen una rentabilidad similar, rondando el 40%. Los productos de ropa femenina y calzado deportivo femenino tienen una rentabilidad ligeramente inferior pero aún considerable, alrededor del 30-35%. Esto sugiere que, en general, la rentabilidad de los productos de Adidas está bastante equilibrada entre las diferentes categorías, con una ligera ventaja para las líneas de ropa y calzado masculino, aunque la diferencia no es significativa. Este comportamiento puede indicar que Adidas mantiene una estrategia eficiente de precios y márgenes a través de sus diferentes líneas de productos. ## Distribución de ventas por método de venta

library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(tidyverse)

library(dplyr)
library(plotly)

# Limpiar caracteres especiales en la columna 'metodo_venta'
Adidas$metodo_venta <- gsub("[^[:print:]]", "", Adidas$metodo_venta)  # Eliminar caracteres no imprimibles
Adidas$metodo_venta <- gsub("[\n\t\r]", " ", Adidas$metodo_venta)  # Eliminar saltos de línea y tabulaciones

# Asegurarse de que la columna 'metodo_venta' esté en UTF-8
Adidas$metodo_venta <- iconv(Adidas$metodo_venta, from = "latin1", to = "UTF-8", sub = " ")

# Crear gráfico de torta para mostrar la distribución de ventas por método de venta
grafico_torta <- Adidas %>%
  group_by(metodo_venta) %>%
  summarise(Ventas_Totales = sum(ventas_total)) %>%
  plot_ly(labels = ~metodo_venta, values = ~Ventas_Totales, type = 'pie',
          marker = list(colors = c('#003366', '#00BFFF', '#1E90FF', '#4682B4'))) %>%
  layout(title = "Distribución de Ventas por Método de Venta")

# Mostrar el gráfico
grafico_torta

El gráfico de pie muestra la distribución de las ventas de Adidas según el método de venta utilizado. Se observa que el 37.4% de las ventas provienen de ventas online, lo que refleja el crecimiento de las compras a través de plataformas digitales. El 32.9% de las ventas se realiza en outlets, lo que sugiere una estrategia orientada a ofrecer productos a precios más bajos para atraer a los consumidores en busca de descuentos. Finalmente, el 29.7% de las ventas proviene de tiendas físicas, lo que indica que las ventas en puntos de venta siguen siendo importantes, aunque con una menor proporción en comparación con los canales online y outlet. Esto resalta la importancia de mantener una estrategia de ventas multicanal, optimizando tanto los canales digitales como los físico

Correlaciones:Precio vs Unidades Vendidas

# Crear gráfico con ggplot2 de precio por unidad y unidades vendidas
library(ggplot2)

# Calcular la correlación entre precio_unidad y unidades_vendidas
correlation_value <- cor(Adidas$precio_unidad, Adidas$unidades_vendidas)

# Crear gráfico
ggplot(Adidas, aes(x = precio_unidad, y = unidades_vendidas)) +
  geom_point(color = "black", size = 3) +  # Puntos de dispersión
  geom_smooth(method = "lm", color = "blue", size = 1) +  # Línea de regresión lineal
  theme_minimal() +  # Estilo minimalista
  labs(title = paste("Relación entre Precio por Unidad y Unidades Vendidas\nCorrelación: ", round(correlation_value, 2)),  # Título con la correlación
       x = "Precio por Unidad",  # Título del eje X
       y = "Unidades Vendidas")  # Título del eje Y

La gráfica muestra que aunque hay una relación positiva entre el precio y las unidades vendidas, la correlación es baja, lo que sugiere que otros factores además del precio están influyendo en las unidades vendidas.

Gráfico de barras

# Cargar librerías necesarias
library(dplyr)
library(ggplot2)
library(scales)  # Agregar esta línea para usar la función 'percent()'

# Calcular participación por producto
ventas_producto <- Adidas %>%
  group_by(producto) %>%
  summarise(ventas_totales = sum(ventas_total, na.rm = TRUE)) %>%
  mutate(porcentaje = ventas_totales / sum(ventas_totales))

# Crear gráfico de torta con tamaño de texto ajustado
ggplot(ventas_producto, aes(x = "", y = porcentaje, fill = producto)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  geom_text(aes(label = percent(porcentaje)),  # Ahora 'percent()' debería funcionar correctamente
            position = position_stack(vjust = 0.5),
            color = "white",
            size = 3.5) +  # Reducir el tamaño de la fuente
  scale_fill_brewer(palette = "Set2") +
  labs(title = "Participación de Ventas por Producto",
       fill = "Producto") +
  theme_void() +
  theme(
    plot.title = element_text(size = 14, face = "bold", hjust = 0.5)  # Título centrado y en negrita
  )

##Utilidad Operativa por Producto

# Cargar librería "scales" para formatear los números
library(scales)

# Crear gráfico de barras para Utilidad Operativa por Producto sin notación científica
ggplot(Adidas, aes(x = reorder(producto, utilidad_operativa), y = utilidad_operativa, fill = producto)) +
  geom_bar(stat = "identity") +
  coord_flip() +  # Girar el gráfico para facilitar la lectura de los nombres de los productos
  scale_fill_brewer(palette = "Set2") +  # Colores más agradables
  scale_y_continuous(labels = label_comma()) +  # Formatear los números sin notación científica
  labs(
    title = "Utilidad Operativa por Producto",
    x = "Producto",
    y = "Utilidad Operativa (Miles de Dólares)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10),
    legend.position = "none"  # Eliminar la leyenda
  )

El gráfico muestra la utilidad operativa de cada producto de Adidas. Los productos con barras más altas, como “Men’s Street Footwear”, generan mayores ganancias, mientras que otros, como “Women’s Athletic Footwear”, tienen utilidades más bajas. Esto permite identificar los productos más rentables y enfocar esfuerzos en mejorar los menos rentables.

Margen Operativo

# Cargar las librerías necesarias
library(dplyr)
library(ggplot2)

# Calcular el margen operativo promedio por distribuidor
margen_promedio <- Adidas %>%
  group_by(distribuidor) %>%
  summarise(margen_operativo_promedio = mean(margen_operativo, na.rm = TRUE))

# Crear la gráfica de barras con etiquetas negras dentro de las barras para el margen operativo promedio por distribuidor
ggplot(margen_promedio, aes(x = reorder(distribuidor, margen_operativo_promedio), y = margen_operativo_promedio)) +
  geom_bar(stat = "identity", fill = "#00BFFF", width = 0.6) +  # Ancho de las barras ajustado
  coord_flip() +  # Girar las barras para mejor visibilidad
  geom_text(aes(label = round(margen_operativo_promedio, 2)), 
            color = "black", size = 3, hjust = 0.5, vjust = 0.5) +  # Etiquetas negras centradas dentro de las barras
  theme_minimal() +  # Estilo minimalista
  labs(title = "Margen Operativo Promedio por Distribuidor",  # Título
       x = "Distribuidor",  # Título del eje X
       y = "Margen Operativo Promedio")  # Título del eje Y

  theme(
    plot.margin = margin(1, 2, 1, 1, "cm"),  # Ajuste del margen para evitar corte
    axis.text = element_text(size = 8)  # Reducir tamaño de los textos del eje
  )
## <theme> List of 2
##  $ axis.text  : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : num 8
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : NULL
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi FALSE
##  $ plot.margin: <ggplot2::margin> num [1:4] 1 2 1 1
##  @ complete: logi FALSE
##  @ validate: logi TRUE

Conclusiones:

El análisis del desempeño comercial y la rentabilidad de Adidas revela que la región Oeste es la de mayor rendimiento en ventas, seguida por las regiones Noreste y Sureste, mientras que el Sur y Midwest muestran un rendimiento relativamente bajo. En términos de productos, Men’s Street Footwear y Men’s Apparel lideran las ventas, mientras que los productos femeninos tienen una participación menor en las ventas totales, aunque aún significativas. La rentabilidad promedio es alta en productos masculinos, con un rendimiento más bajo en categorías de calzado y ropa femenina. La venta online emerge como el canal más lucrativo, reflejando el cambio hacia las compras digitales.

Recomendaciones:

Se recomienda fortalecer la estrategia de ventas en el Sur y Midwest, mediante campañas de marketing y expansión de canales de distribución. Además, sería valioso optimizar las líneas de productos femeninos, tanto en precios como en márgenes operativos, para aumentar su rentabilidad. Dado el crecimiento de las ventas online, es clave invertir más en este canal, mientras se mantiene un equilibrio con las ventas en outlets y tiendas físicas. También, enfocar esfuerzos en los productos masculinos de alto rendimiento podría continuar consolidando a Adidas en el mercado.