1 Introducción

La Industria de Licores del Valle (ILV), fundada en 1921, distribuye sus productos a través de una amplia red de puntos de venta ubicados en distintos municipios del departamento del Valle del Cauca. Esta red está conformada por supermercados, licoreras, mayoristas y establecimientos de venta “tienda a tienda” (TAT), cada uno atendido por un responsable comercial asignado.

Conocer cómo se distribuyen estos puntos de venta a lo largo del territorio, qué canales predominan, quiénes son los responsables con mayor carga de clientes y qué características tienen los registros de contacto de cada punto, resulta fundamental para la toma de decisiones logísticas y comerciales de la compañía.

El presente informe corresponde al desarrollo de la Actividad 112, y tiene como propósito aplicar herramientas de estadística descriptiva —tablas de frecuencia, medidas de tendencia central, de dispersión y de posición, así como representaciones gráficas— sobre la base de datos “Puntos de distribución de los productos de la ILV en el Valle del Cauca”, con el fin de caracterizar tanto variables cualitativas como cuantitativas presentes en el conjunto de datos.

2 Objetivos

2.1 Objetivo general

Realizar un análisis estadístico descriptivo de al menos dos variables cualitativas y dos variables cuantitativas de la base de datos de puntos de distribución de la ILV en el Valle del Cauca, apoyado en tablas de frecuencia e indicadores estadísticos, con el fin de identificar patrones relevantes para la gestión comercial de la compañía.

2.2 Objetivos específicos

  • Describir la estructura y calidad de la base de datos suministrada.
  • Construir tablas de frecuencia absoluta, relativa y acumulada para las variables cualitativas Canal y Ciudad.
  • Calcular e interpretar las medidas de tendencia central, de dispersión y de posición de las variables cuantitativas Longitud del nombre del cliente y Longitud de la dirección registrada.
  • Representar gráficamente los resultados mediante diagramas de barras, histogramas y diagramas de caja (boxplot).
  • Explorar posibles relaciones entre variables cualitativas y cuantitativas, y entre las dos variables cuantitativas entre sí.
  • Presentar conclusiones que aporten valor a la gestión comercial de la ILV.

3 Selección de variables

La base de datos original contiene principalmente variables de tipo cualitativo (nominal), por lo cual, para dar cumplimiento al requisito de analizar variables cuantitativas, se construyeron dos variables numéricas derivadas directamente de los datos de texto ya existentes en la base (sin inventar ni modificar la información original). A continuación se justifica la selección:

Tipo Variable Justificación
Cualitativa Canal Clasifica el punto de venta (Supermercado, Licorera, Mayorista, TAT). Permite identificar el canal predominante de distribución.
Cualitativa Ciudad Ubicación geográfica del punto de distribución. Permite identificar la concentración territorial de los puntos de venta.
Cuantitativa Longitud del nombre del cliente (Longitud_Cliente) Número de caracteres del nombre comercial del punto de venta (columna Cliente). Variable numérica discreta obtenida de un dato original de texto.
Cuantitativa Longitud de la dirección (Longitud_Direccion) Número de caracteres de la dirección registrada (columna Dirección). Variable numérica discreta que permite evaluar el nivel de detalle con el que se registran las direcciones.

Adicionalmente se conserva la variable Responsable para un análisis complementario de interés (cruce con las variables cuantitativas).

4 Carga y preparación de los datos

Los datos se incorporan directamente en este documento para garantizar la reproducibilidad del informe sin depender de rutas de archivos externas.

texto_csv <- '"Activo","#","Ciudad","Canal","Responsable","Cliente","Línea Domicilio","Dirección"
"SI","1","La Unión","Supermercado","Jhenny Romero","Supermercado MercaPlaza","2023491","Calle 14 # 15 - 13"
"SI","2","Rozo","Licorera","Katherine Rengifo","Estanco Blanco del Valle","3122475697","Calle 10 # 9A- 29"
"SI","3","Guacarí","Mayorista","Katherine Rengifo","Licores Los Paisas","3216537169","Carrera 7 # 4 - 80"
"SI","7","Cali","Mayorista","Edwin Polanco","Los Paisas de la 44","4415918 - 3113078334","calle 44 # 14-62"
"SI","8","Cali","Mayorista","Edwin Polanco","Brisas de Juanchito","6560777 - 3153158897","Carrera 8 #72-04"
"SI","9","Cali","Mayorista","Edwin Polanco","La 66","3314763 - 3176095207","Carrera 66 #10-12"
"SI","10","Cali","Mayorista","Edwin Polanco","Villa del Lago","6627676","Diagonal 70 # 25e-10"
"SI","11","Cali","Mayorista","Edwin Polanco","Los Panchos","6629305","calle 73 # 7tbII2-38"
"SI","12","Cali","Mayorista","Edwin Polanco","La Mayorista","4416350","Carera 27 dg 28b -93"
"SI","13","Cali","Mayorista","Edwin Polanco","El Poblado","4263073","Calle 72u # 28-47"
"SI","14","Cali","Mayorista","Edwin Polanco","Licores La Amistad","4471825","Calle 46c # 5-01"
"SI","15","Cali","Mayorista","Edwin Polanco","Los Gemelos","4489216","Calle 44 # 6n-57"
"SI","16","Cali","Mayorista","Edwin Polanco","El amigo de la Noche","App","App"
"SI","17","Cali","Mayorista","Edwin Polanco","La Rebaja","App","Carrera 15 #33b-30"
"SI","18","Buenaventura","Mayorista","Edwin Polanco","Casablanca","2433412","calle 3 # 18-42"
"SI","19","Buenaventura","Mayorista","Edwin Polanco","La Rebajona","2416300","carrera 6 # 4a-54"
"SI","20","Tuluá","Supermercado","Lina Colonia","Autoservicio Mi Barrio","312 806 22 21","Carrera 24 # 36 - 04"
"SI","21","Tuluá","Mayorista","Lina Colonia","Bodega La Esperanza","316 253 5816","Carrera 23 # 29-04"
"SI","22","Tuluá","Mayorista","Lina Colonia","Distribuidora Farallón","311 334 1151","Carrera 22 Calle 28"
"SI","23","Tuluá","Licorera","Lina Colonia","Licores Junior La 28","2320073","Calle 28 # 22-56"
"SI","24","Tuluá","Mayorista","Lina Colonia","Distribuidora La Madeja","317 789 75 09","Calle 29 # 22-36"
"SI","25","Buga","Mayorista","Lina Colonia","Distribuidora El Madejón","310 413 95 50","Calle 9 # 12 - 10"
"SI","26","Andalucía","Mayorista","Lina Colonia","Distribuidora Central de Andalucía","314 761 70 13","Carrera 5 # 12 - 67"
"SI","27","Tuluá","Mayorista","Lina Colonia","Autoservicio El Campesino","224 4272","Carrera 22 Calle 29"
"SI","29","Trujillo","Licorera","Lina Colonia","Licorera El Alambique","312 736 9212","Carrera 19 # 19-22"
"SI","30","San Pedro","Mayorista","Lina Colonia","Distribuidora San Pedro","311 393 5295","Calle 5 Parque Principal"
"SI","31","Tuluá","Supermercado","Lina Colonia","Mauro Market","323 423 8848","Calle 34 Carrera 34"
"SI","32","Tuluá","Licorera","Lina Colonia","Licores El Estanco","305 372 46 39","Transv 12 # 24-46"
"SI","33","Buga","Licorera","Lina Colonia","Licores La 4ta Avenida","3167142019","Calle 4 # 6 - 06"
"SI","34","Cali","TAT","Ana Rosa Lopera","Supermercado Tarzan","3143874179","Carrera 82 #5-97"
"SI","36","Cali","TAT","Ana Rosa Lopera","Licores La Perla","5216031","Polvorines vía ppal"
"SI","38","Cali","TAT","Ana Rosa Lopera","Licores Helen","3022491892","Carrera 25 #19-02"
"SI","39","Cali","TAT","Ana Rosa Lopera","Mini Market 7","3134661206","Calle 7 #31-09"
"SI","40","Cali","TAT","Ana Rosa Lopera","Alvaro Prado","4207110","Carrera 26 u #122=94"
"SI","41","Cali","TAT","Ana Rosa Lopera","Carlos Lopez","4201897","Carrera 25 c # 123-01"
"SI","43","Cali","TAT","Ana Rosa Lopera","Granero y Estanco Martinez","4306553","Carrera 4 A #60 - 82"
"SI","46","Cali","TAT","Ana Rosa Lopera","Supertienda Carvajal","3015493138","Calle 13 # 34 - 33"
"SI","47","Cali","TAT","Ana Rosa Lopera","Licores La Sucursal","4482670","Calle 44 #5-26"
"SI","49","Cali","TAT","Ana Rosa Lopera","Mercaplaza Mariano","374330575","CLL 46 # 49-03"
"SI","53","Cali","TAT","Ana Rosa Lopera","supermercado Nuevo Progreso","3760861","CR 34 # 26A-03"
"SI","54","Cali","TAT","Ana Rosa Lopera","Rapitienda Caldas","3137974910","CLL 26A # 38-09"
"SI","56","Cali","TAT","Ana Rosa Lopera","Nicolas Elias","6662306","AV 3 E # 47C-20"
"SI","57","Cali","TAT","Ana Rosa Lopera","Minarket 1000 y Mas","3178814634","CLL 44N # 3-111"
"SI","58","Cali","TAT","Ana Rosa Lopera","Brandon Carvajal","3136372746","CLL 27 # 41C-37"
"SI","59","Cali","TAT","Ana Rosa Lopera","Carolina Espinosa","3132614285","CR 67 # 1A 0STE 07"
"SI","60","Cali","TAT","Ana Rosa Lopera","Licores Los Cerros","3204796646","CLL1 #69-44"
"SI","61","Cali","TAT","Ana Rosa Lopera","La Rebajona","3734192","CL 14A 53 03"
"SI","63","Cali","TAT","Ana Rosa Lopera","Licores El Baratisimo","4339595","Kra 1 kn # 80 74"
"SI","65","Cali","TAT","Ana Rosa Lopera","Marco Tulio Giraldo","4333355","Cl 76A # 1D 03"
"SI","66","Cali","TAT","Ana Rosa Lopera","Licores Sanchez","3184662902","Kra 27 # 33 E 39"
"SI","67","Cali","TAT","Ana Rosa Lopera","Granero El Buen Precio","4412666","CLL 34 # 25A-03"
"SI","70","Cali","TAT","Ana Rosa Lopera","Licores La Abundancia","3154673318","CL 72B# 28D3- 123"
"SI","72","Cali","TAT","Ana Rosa Lopera","Tienda Rojo y Verde","3113630033","oeste santa teresita, Av. 2 Oe"
"SI","73","Poblado Campestre","TAT","Ana Rosa Lopera","Tienda y Licores Mas Barato","3006673631","MANZANA 28 CASA 22-05"
"SI","74","Poblado Campestre","TAT","Ana Rosa Lopera","Minimarket El Majo","3174559610","Calle 22 con carrera 41 oeste, manzana 30 casa 24,"
"SI","75","Poblado Campestre","TAT","Ana Rosa Lopera","Rendimercado Las 2 Palmas","3122879341","Carrera 4 #9-09"
"SI","82","Cali","TAT","Ana Rosa Lopera","Autoservicio y Panadería Caribe","5136160","Cra 56 1.ª 16 oeste"
"SI","85","Cali","TAT","Ana Rosa Lopera","Supermercado La Ganguita","4468365","Cra 1c4  64A 14  bloque 15"
"SI","89","Cali","TAT","Ana Rosa Lopera","Rapitienda La Esperanza","3137849701","Cll 27 29b 18"
"SI","93","Cali","TAT","Ana Rosa Lopera","El Rebajon","5579626","Cll 9e 22a12"
"SI","95","Cali","TAT","Ana Rosa Lopera","Minimarket Matecaña","5582197","CR 23 12.ª 03"
"SI","111","Cartago","Mayorista","Jhenny Romero","Garces","2133333","Carrera 4 # 19-38"
"SI","112","Zarzal","Mayorista","Jhenny Romero","Cigarrería La Andina","3152228870","Calle 9 # 8 - 76"
"SI","113","Cartago","Mayorista","Jhenny Romero","Licores Raulette","2125411","Carrera 4 # 11-30"
"SI","114","La Unión","Licorera","Jhenny Romero","Estanquillo La 16","2292935","Carrera 16 # 17 - 44"
"SI","115","Roldanillo","Mayorista","Jhenny Romero","Estanquillo Muñoz","2297172","Calle 8 # 7 - 67"
"SI","116","Cartago","Mayorista","Jhenny Romero","Comercializadora Don Jimmy","2139099","Carrera / # 11-51"
"SI","118","Cartago","Mayorista","Jhenny Romero","Saloon Licores","3175131166","Calle 10 # 15 - 20"
"SI","119","Palmira","Mayorista","Katherine Rengifo","Licores Palmira","2859975-3218677680","Calle 31 # 37 - 56"
"SI","120","El Placer","Mayorista","Katherine Rengifo","Granero Los Paisas","3173171258-2548145","Carrera 8 # 6 -12"
"SI","121","Cerrito","Licorera","Katherine Rengifo","Estanco Punto Blanco","3146620834","Calle 7 # 12 - 08"
"SI","122","Pradera","Licorera","Katherine Rengifo","El Barril de la 6","3163471484-2670572-3187944106","Calle 6 # 11-03"
"SI","123","Pradera","Supermercado","Katherine Rengifo","Mercapava","2834030","Calle 7 # 9-59"
"SI","124","Candelaria","Mayorista","Katherine Rengifo","Estanco y Dulcería Los Paisas","3136518541","Carrera 7 # 4-80"
"SI","125","Florida","Mayorista","Katherine Rengifo","Distribuidora Cordillera Central","3117666820","Carrera 14 # 8 - 61"
"SI","126","Palmira","Supermercado","Katherine Rengifo","Supermercado La Gran Colombia","3004377555","Carrera 28 # 66A - 86"
"SI","127","Palmira","Supermercado","Katherine Rengifo","SuperInter La Cometa","3113775927","Carrera 19 # 42A - 23"
"SI","129","Palmira","Supermercado","Katherine Rengifo","Olimpica Versalles","2896657","Calle 42 # 28 Esquina"
"SI","130","Tuluá","Mayorista","Lina Colonia","Distri Jota SAS","(2) 224 9488","Calle 29 # 22-23"
"SI","131","Tuluá","Mayorista","Lina Colonia","Depósito La Ganga","(2) 225 7742","Carrera 22 # 28 - 49"
"SI","132","Tuluá","Mayorista","Lina Colonia","Cacharrería yDist. JM","318 369 2722",
"SI","133","Tuluá","Mayorista","Lina Colonia","Almacén Ossa","317 513 4129","Carrera 22 # 29A - 04"
"SI","135","Restrepo","Mayorista","Lina Colonia","Los Paisas","321 482 7231","Carrera 10 # 9-50 Plaza de mercado"
"SI","136","Buga","Mayorista","Lina Colonia","Depóstito El Triunfo","(2) 227 1824","Calle 21 # 12-59"
"SI","137","Palmira","Mayorista","Katherine Rengifo","Miscelanea La Unión","3157030966 - 2836460","cra 25 #27-44"
"SI","138","Cali","TAT","Ana Rosa Lopera","Luz marina zuluaga","3207412307","AV 15 OESTE # 7 03"
"SI","139","Cali","TAT","Ana Rosa Lopera","Ramon giraldo","3113754878","CLL 12 OESTE # 39-06"
"SI","141","Cali","TAT","Ana Rosa Lopera","Doly hortencia","5514843","CR 40A # 9C 20"
"SI","142","Cali","TAT","Ana Rosa Lopera","Jonny salazar giraldo","3117636936","CLL 13 # 47 04"
"SI","143","Cali","TAT","Ana Rosa Lopera","Carlos alberto lopez","5531616","CR 47A # 10-83"
"SI","144","Cali","TAT","Ana Rosa Lopera","Yakeline ospina","3053624703","CLL 52A # 29B 17"
"SI","145","Cali","TAT","Ana Rosa Lopera","Jaime ocampo valencia","3103953082","CLL 51 # 29A 118"
"SI","146","Cali","TAT","Ana Rosa Lopera","Jesus antonio barles","3931110","CR 32A # 51A 20"
"SI","147","Cali","TAT","Ana Rosa Lopera","Ciro solis","3217534183","CR 29B # 46 00"
"SI","148","Cali","TAT","Ana Rosa Lopera","Jaime jaramillo","3146940159","CR 29 B # 40 99"
"SI","149","Cali","TAT","Ana Rosa Lopera","Carlos alberto lopez","3137671699","CLL 49# 8A 23"
"SI","150","Cali","TAT","Ana Rosa Lopera","Olga pelaez","4337053","CLL 71C # 3BN 70"
"SI","151","Cali","TAT","Ana Rosa Lopera","Alba nora","3207552888","CLL 45 # 98A 28"
"SI","152","Cali","TAT","Ana Rosa Lopera","Diliana españa","3162451945","CR 83C # 48 223"
"SI","153","Cali","TAT","Ana Rosa Lopera","Supermercado aranjuez","3722002","CR 23 15B 44"
"SI","154","Cali","TAT","Ana Rosa Lopera","Licores sarasty","3104156267","CLL 58A 1B 06"
"SI","155","Cali","TAT","Ana Rosa Lopera","Licores  baratillo","3187914323","CR 26U # 122 94"
"SI","156","Cali","TAT","Ana Rosa Lopera","Giovanny duque","3153471142","CR 23 12.ª 03"
"SI","157","Cali","TAT","Ana Rosa Lopera","Dulceria y licores JL","3218729505","CLL 11 # 8 19"
"SI","158","Palmira","Mayorista","Katherine Rengifo","miscelanea San Agustin","2734001","Cra 28 # 35 - 43"
"SI","159","Ginebra","Mayorista","Katherine Rengifo","Estanco Luz","2561280","Calle 4 # 3 - 58"
"SI","160","Villagorgona","Mayorista","Katherine Rengifo","Comercializadora La Berraquera","2607952","Calle 16 # 10 - 16"
"SI","161","Buga","Mayorista","Lina Colonia","Licores La 21","316 7156198","Calle 21 # 13 - 04"
"SI","162","Buga","Mayorista","Lina Colonia","Licores Estambul","316 6154526","Calle 11 # 11-18"
"SI","163","Buga","Mayorista","Lina Colonia","Distrikopas",,
"SI","164","La Paila","Mayorista","Jhenny Romero","Miscelanea Melany","3022880752","Carrera 4 # 12-61"
"SI","165","Alcalá","Mayorista","Jhenny Romero","Rapitienda Ruta del Café","3147628822","Carrera 8 # 5-17"
"SI","166","Cali","TAT","Ana Rosa Lopera","Autoservicio Monterrey","4205905","Carrera 27 # 96- 259"
"SI","167","Cali","TAT","Ana Rosa Lopera","Tienda y Licores Alejo","3178187438","Cra 1a5 - # 76 -05"
"SI","168","Cali","TAT","Ana Rosa Lopera","Arnaldo Monte. Super Tienda la sorpresa","4412223","cra 15 # 35 -19"
"SI","169","Cali","TAT","Ana Rosa Lopera","Carlos Gonzales Supermerke valle del lili","3480941","cra 91 # 42 - 111"
"SI","170","Cali","TAT","Ana Rosa Lopera","comercialziadora el gangazo","8895541","calle 23 # 11- 03"
"SI","171","Cali","TAT","Ana Rosa Lopera","Duque Garcia alirio - Tienda Mixta","3122232832","cra 42 # 26 b 68"
"SI","172","Cali","TAT","Ana Rosa Lopera","Edgar Andres Bedoya cano - Licores la 22","3167405422","cra 22 # 1 - 44"
"SI","173","Cali","TAT","Ana Rosa Lopera","Torres jirafa alonso de jesus - Tienda la 75","3238702","cra 75 # 1bis 45oeste"
"SI","174","Cali","TAT","Ana Rosa Lopera","Lopez Yepes Juan franciso - Miscelanea Yepes","3073246","cra 70  # 2b - 06"
"SI","175","Cali","TAT","Ana Rosa Lopera","Daza Mercado eviliana - Tienda mixta","3174386915","Av 7 n # 53 -01"
"SI","176","Cali","TAT","Ana Rosa Lopera","Cocha Aide - Licores Dila","3104254005","calle 102g - # 23 - 100"
"SI","177","Cali","TAT","Ana Rosa Lopera","Jurado Guzman Carlos Andres - Tienda la Mona","3005082848","calle 10 oeste #2a - 16"
"SI","178","Cali","TAT","Ana Rosa Lopera","Widelmar mafla - Tienda la Familia","3116092604","cra 3a 0este # 9- 270"
"SI","179","Cali","TAT","Ana Rosa Lopera","Robledo Garcia Lina Maria Licores JM","3182222546","CRA 13 #5-23"
"SI","180","Cali","TAT","Ana Rosa Lopera","Nlfy Fonseca Polo","3206540970","cra 6 N 42 a  03"
"SI","181","Tuluá","Licorera","Lina Colonia","Licores VIP","3216605343","Calle 40 # 24 - 78"'

datos_originales <- read.csv(text = texto_csv, stringsAsFactors = FALSE)

# Se asignan nombres de columna sin tildes ni caracteres especiales,
# respetando el orden original de la base de datos
colnames(datos_originales) <- c("Activo", "Numero", "Ciudad", "Canal",
                                 "Responsable", "Cliente",
                                 "Linea_Domicilio", "Direccion")

datos <- datos_originales

# Creación de las variables cuantitativas derivadas
datos <- datos %>%
  mutate(
    Ciudad      = as.character(Ciudad),
    Canal       = as.character(Canal),
    Responsable = as.character(Responsable),
    Cliente     = as.character(Cliente),
    Direccion   = as.character(Direccion),
    Longitud_Cliente   = nchar(Cliente),
    Longitud_Direccion = ifelse(is.na(Direccion) | Direccion == "",
                                 NA_integer_, nchar(Direccion))
  )

glimpse(datos)
## Rows: 128
## Columns: 10
## $ Activo             <chr> "SI", "SI", "SI", "SI", "SI", "SI", "SI", "SI", "SI…
## $ Numero             <int> 1, 2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1…
## $ Ciudad             <chr> "La Unión", "Rozo", "Guacarí", "Cali", "Cali", "Cal…
## $ Canal              <chr> "Supermercado", "Licorera", "Mayorista", "Mayorista…
## $ Responsable        <chr> "Jhenny Romero", "Katherine Rengifo", "Katherine Re…
## $ Cliente            <chr> "Supermercado MercaPlaza", "Estanco Blanco del Vall…
## $ Linea_Domicilio    <chr> "2023491", "3122475697", "3216537169", "4415918 - 3…
## $ Direccion          <chr> "Calle 14 # 15 - 13", "Calle 10 # 9A- 29", "Carrera…
## $ Longitud_Cliente   <int> 23, 24, 18, 19, 19, 5, 14, 11, 12, 10, 18, 11, 20, …
## $ Longitud_Direccion <int> 18, 17, 18, 16, 16, 17, 20, 20, 20, 17, 16, 16, 3, …

4.1 Vista general de la base de datos

kable(head(datos %>%
             select(Numero, Ciudad, Canal, Responsable, Cliente,
                    Longitud_Cliente, Longitud_Direccion), 10),
      caption = "Primeros 10 registros de la base de datos") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE)
Primeros 10 registros de la base de datos
Numero Ciudad Canal Responsable Cliente Longitud_Cliente Longitud_Direccion
1 La Unión Supermercado Jhenny Romero Supermercado MercaPlaza 23 18
2 Rozo Licorera Katherine Rengifo Estanco Blanco del Valle 24 17
3 Guacarí Mayorista Katherine Rengifo Licores Los Paisas 18 18
7 Cali Mayorista Edwin Polanco Los Paisas de la 44 19 16
8 Cali Mayorista Edwin Polanco Brisas de Juanchito 19 16
9 Cali Mayorista Edwin Polanco La 66 5 17
10 Cali Mayorista Edwin Polanco Villa del Lago 14 20
11 Cali Mayorista Edwin Polanco Los Panchos 11 20
12 Cali Mayorista Edwin Polanco La Mayorista 12 20
13 Cali Mayorista Edwin Polanco El Poblado 10 17
n_registros <- nrow(datos)
n_variables <- ncol(datos_originales)

resumen_na <- data.frame(
  Variable = c("Ciudad", "Canal", "Responsable", "Cliente",
               "Linea_Domicilio", "Direccion"),
  Valores_faltantes = c(
    sum(is.na(datos$Ciudad) | datos$Ciudad == ""),
    sum(is.na(datos$Canal) | datos$Canal == ""),
    sum(is.na(datos$Responsable) | datos$Responsable == ""),
    sum(is.na(datos$Cliente) | datos$Cliente == ""),
    sum(is.na(datos$Linea_Domicilio) | datos$Linea_Domicilio == ""),
    sum(is.na(datos$Direccion) | datos$Direccion == "")
  )
)

kable(resumen_na, caption = "Valores faltantes por variable") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Valores faltantes por variable
Variable Valores_faltantes
Ciudad 0
Canal 0
Responsable 0
Cliente 0
Linea_Domicilio 1
Direccion 2

La base de datos cuenta con 128 puntos de distribución registrados y 8 variables originales, todas ellas con la condición “Activo = SI”, es decir, corresponden a puntos vigentes de la red de distribución de la ILV.

5 Análisis de variables cualitativas

5.1 Variable: Canal de distribución

tabla_canal <- datos %>%
  count(Canal, name = "Frecuencia_Absoluta") %>%
  arrange(desc(Frecuencia_Absoluta)) %>%
  mutate(
    Frecuencia_Relativa  = round(Frecuencia_Absoluta / sum(Frecuencia_Absoluta), 4),
    Porcentaje           = percent(Frecuencia_Relativa, accuracy = 0.1),
    Frecuencia_Acumulada = cumsum(Frecuencia_Absoluta),
    Porcentaje_Acumulado = percent(cumsum(Frecuencia_Relativa), accuracy = 0.1)
  )

kable(tabla_canal,
      col.names = c("Canal", "Frec. Absoluta", "Frec. Relativa",
                    "Porcentaje", "Frec. Acumulada", "% Acumulado"),
      caption = "Tabla de frecuencias - Variable Canal") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE)
Tabla de frecuencias - Variable Canal
Canal Frec. Absoluta Frec. Relativa Porcentaje Frec. Acumulada % Acumulado
TAT 66 0.5156 51.6% 66 51.6%
Mayorista 46 0.3594 35.9% 112 87.5%
Licorera 9 0.0703 7.0% 121 94.5%
Supermercado 7 0.0547 5.5% 128 100.0%
ggplot(tabla_canal, aes(x = fct_reorder(Canal, Frecuencia_Absoluta),
                         y = Frecuencia_Absoluta, fill = Canal)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = Frecuencia_Absoluta), hjust = -0.3, fontface = "bold") +
  coord_flip() +
  scale_fill_manual(values = paleta_ilv) +
  labs(title = "Distribución de puntos de venta según canal",
       x = "Canal", y = "Número de puntos de distribución") +
  expand_limits(y = max(tabla_canal$Frecuencia_Absoluta) * 1.15)

ggplot(tabla_canal, aes(x = "", y = Frecuencia_Absoluta, fill = Canal)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  scale_fill_manual(values = paleta_ilv) +
  geom_text(aes(label = percent(Frecuencia_Relativa, accuracy = 0.1)),
            position = position_stack(vjust = 0.5), color = "white",
            fontface = "bold", size = 4) +
  labs(title = "Participación porcentual por canal de distribución", fill = "Canal") +
  theme_void() +
  theme(plot.title = element_text(face = "bold", hjust = 0.5),
        legend.position = "bottom")

Interpretación: el canal TAT concentra la mayor proporción de puntos de distribución (51.6%), seguido por el canal Mayorista (35.9%). Entre ambos canales agrupan cerca del 87.5% del total de puntos de venta activos, lo que evidencia una fuerte concentración comercial en estos dos canales.

5.2 Variable: Ciudad

tabla_ciudad <- datos %>%
  count(Ciudad, name = "Frecuencia_Absoluta") %>%
  arrange(desc(Frecuencia_Absoluta)) %>%
  mutate(
    Frecuencia_Relativa  = round(Frecuencia_Absoluta / sum(Frecuencia_Absoluta), 4),
    Porcentaje           = percent(Frecuencia_Relativa, accuracy = 0.1),
    Frecuencia_Acumulada = cumsum(Frecuencia_Absoluta),
    Porcentaje_Acumulado = percent(cumsum(Frecuencia_Relativa), accuracy = 0.1)
  )

kable(tabla_ciudad,
      col.names = c("Ciudad", "Frec. Absoluta", "Frec. Relativa",
                    "Porcentaje", "Frec. Acumulada", "% Acumulado"),
      caption = "Tabla de frecuencias - Variable Ciudad (orden descendente)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  scroll_box(height = "350px")
Tabla de frecuencias - Variable Ciudad (orden descendente)
Ciudad Frec. Absoluta Frec. Relativa Porcentaje Frec. Acumulada % Acumulado
Cali 74 0.5781 57.8% 74 57.8%
Tuluá 13 0.1016 10.2% 87 68.0%
Buga 6 0.0469 4.7% 93 72.7%
Palmira 6 0.0469 4.7% 99 77.4%
Cartago 4 0.0312 3.1% 103 80.5%
Poblado Campestre 3 0.0234 2.3% 106 82.8%
Buenaventura 2 0.0156 1.6% 108 84.4%
La Unión 2 0.0156 1.6% 110 85.9%
Pradera 2 0.0156 1.6% 112 87.5%
Alcalá 1 0.0078 0.8% 113 88.3%
Andalucía 1 0.0078 0.8% 114 89.0%
Candelaria 1 0.0078 0.8% 115 89.8%
Cerrito 1 0.0078 0.8% 116 90.6%
El Placer 1 0.0078 0.8% 117 91.4%
Florida 1 0.0078 0.8% 118 92.2%
Ginebra 1 0.0078 0.8% 119 92.9%
Guacarí 1 0.0078 0.8% 120 93.7%
La Paila 1 0.0078 0.8% 121 94.5%
Restrepo 1 0.0078 0.8% 122 95.3%
Roldanillo 1 0.0078 0.8% 123 96.1%
Rozo 1 0.0078 0.8% 124 96.8%
San Pedro 1 0.0078 0.8% 125 97.6%
Trujillo 1 0.0078 0.8% 126 98.4%
Villagorgona 1 0.0078 0.8% 127 99.2%
Zarzal 1 0.0078 0.8% 128 100.0%
n_top <- min(8, nrow(tabla_ciudad) - 1)
ciudad_top   <- tabla_ciudad[1:n_top, c("Ciudad", "Frecuencia_Absoluta")]
otras_suma   <- sum(tabla_ciudad$Frecuencia_Absoluta[(n_top + 1):nrow(tabla_ciudad)])
ciudad_graf  <- rbind(ciudad_top,
                      data.frame(Ciudad = "Otras ciudades",
                                 Frecuencia_Absoluta = otras_suma))

ggplot(ciudad_graf, aes(x = fct_reorder(Ciudad, Frecuencia_Absoluta),
                        y = Frecuencia_Absoluta, fill = Ciudad)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = Frecuencia_Absoluta), hjust = -0.3, fontface = "bold") +
  coord_flip() +
  scale_fill_manual(values = rep(paleta_ilv, length.out = nrow(ciudad_graf))) +
  labs(title = "Ciudades con mayor número de puntos de distribución",
       subtitle = paste("Top", n_top, "ciudades; el resto se agrupa en 'Otras ciudades'"),
       x = "Ciudad", y = "Número de puntos de distribución") +
  expand_limits(y = max(ciudad_graf$Frecuencia_Absoluta) * 1.15)

Interpretación: Cali concentra la mayor cantidad de puntos de distribución, con 74 puntos (57.8% del total), lo cual es consistente con ser el principal centro urbano y comercial del departamento. El resto de los puntos se distribuye de forma dispersa entre 24 municipios adicionales, muchos de ellos con un único punto de distribución registrado.

5.3 Análisis complementario: Responsable comercial

tabla_resp <- datos %>%
  count(Responsable, name = "Frecuencia_Absoluta") %>%
  arrange(desc(Frecuencia_Absoluta)) %>%
  mutate(Porcentaje = percent(Frecuencia_Absoluta / sum(Frecuencia_Absoluta), accuracy = 0.1))

kable(tabla_resp, col.names = c("Responsable", "Frec. Absoluta", "Porcentaje"),
      caption = "Puntos de distribución atendidos por cada responsable comercial") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Puntos de distribución atendidos por cada responsable comercial
Responsable Frec. Absoluta Porcentaje
Ana Rosa Lopera 66 51.6%
Lina Colonia 23 18.0%
Katherine Rengifo 16 12.5%
Edwin Polanco 13 10.2%
Jhenny Romero 10 7.8%
ggplot(tabla_resp, aes(x = fct_reorder(Responsable, Frecuencia_Absoluta),
                        y = Frecuencia_Absoluta, fill = Responsable)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = Frecuencia_Absoluta), hjust = -0.3, fontface = "bold") +
  coord_flip() +
  scale_fill_manual(values = paleta_ilv) +
  labs(title = "Número de puntos de distribución por responsable comercial",
       x = "Responsable", y = "Número de puntos") +
  expand_limits(y = max(tabla_resp$Frecuencia_Absoluta) * 1.15)

Interpretación: Ana Rosa Lopera es quien gestiona el mayor número de puntos de distribución (66, equivalente al 51.6% del total), lo que sugiere una carga operativa considerablemente mayor frente a los demás responsables comerciales.

6 Análisis de variables cuantitativas

Para el análisis cuantitativo se define primero una función auxiliar para calcular la moda, indicador no incluido por defecto en R base.

moda <- function(x) {
  x <- x[!is.na(x)]
  tabla_frec <- table(x)
  as.numeric(names(tabla_frec)[tabla_frec == max(tabla_frec)])
}

6.1 Variable: Longitud del nombre del cliente (caracteres)

x <- datos$Longitud_Cliente
n_x      <- sum(!is.na(x))
media_x  <- mean(x, na.rm = TRUE)
mediana_x<- median(x, na.rm = TRUE)
moda_x   <- paste(moda(x), collapse = ", ")
sd_x     <- sd(x, na.rm = TRUE)
var_x    <- var(x, na.rm = TRUE)
min_x    <- min(x, na.rm = TRUE)
max_x    <- max(x, na.rm = TRUE)
q1_x     <- as.numeric(quantile(x, 0.25, na.rm = TRUE))
q3_x     <- as.numeric(quantile(x, 0.75, na.rm = TRUE))
rango_x  <- max_x - min_x
ric_x    <- q3_x - q1_x
cv_x     <- round(sd_x / media_x * 100, 2)

tabla_stats_cliente <- data.frame(
  Indicador = c("n (valores válidos)", "Media", "Mediana", "Moda",
                "Desviación estándar", "Varianza", "Mínimo", "Q1 (25%)",
                "Q3 (75%)", "Máximo", "Rango", "Rango intercuartílico (RIC)",
                "Coeficiente de variación (%)"),
  Valor = c(n_x, round(media_x, 2), mediana_x, moda_x, round(sd_x, 2),
            round(var_x, 2), min_x, q1_x, q3_x, max_x, rango_x, ric_x,
            paste0(cv_x, "%"))
)

kable(tabla_stats_cliente,
      caption = "Indicadores estadísticos - Longitud del nombre del cliente") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Indicadores estadísticos - Longitud del nombre del cliente
Indicador Valor
n (valores válidos) 128
Media 19.73
Mediana 19
Moda 18, 19, 20
Desviación estándar 7.93
Varianza 62.92
Mínimo 5
Q1 (25%) 14
Q3 (75%) 22.25
Máximo 44
Rango 39
Rango intercuartílico (RIC) 8.25
Coeficiente de variación (%) 40.2%
ggplot(datos, aes(x = Longitud_Cliente)) +
  geom_histogram(binwidth = 3, fill = color_principal, color = "white",
                 boundary = 0) +
  geom_vline(xintercept = media_x, color = color_secundario,
              linetype = "dashed", linewidth = 1) +
  labs(title = "Distribución de la longitud del nombre del cliente",
       subtitle = "La línea punteada indica la media",
       x = "Número de caracteres", y = "Frecuencia (número de puntos)")

ggplot(datos, aes(x = "", y = Longitud_Cliente)) +
  geom_boxplot(fill = color_principal, alpha = 0.75, width = 0.35,
               outlier.color = color_secundario) +
  labs(title = "Diagrama de caja - Longitud del nombre del cliente",
       x = "", y = "Número de caracteres") +
  theme(axis.ticks.x = element_blank())

Interpretación: en promedio, el nombre de los clientes registrados tiene 19.7 caracteres (mediana = 19), con una desviación estándar de 7.9 caracteres y un coeficiente de variación de 40.2%, lo que indica una dispersión alta respecto a la media. El 50% central de los nombres se encuentra entre 14 y 22.25 caracteres.

6.2 Variable: Longitud de la dirección registrada (caracteres)

y <- datos$Longitud_Direccion
n_y      <- sum(!is.na(y))
media_y  <- mean(y, na.rm = TRUE)
mediana_y<- median(y, na.rm = TRUE)
moda_y   <- paste(moda(y), collapse = ", ")
sd_y     <- sd(y, na.rm = TRUE)
var_y    <- var(y, na.rm = TRUE)
min_y    <- min(y, na.rm = TRUE)
max_y    <- max(y, na.rm = TRUE)
q1_y     <- as.numeric(quantile(y, 0.25, na.rm = TRUE))
q3_y     <- as.numeric(quantile(y, 0.75, na.rm = TRUE))
rango_y  <- max_y - min_y
ric_y    <- q3_y - q1_y
cv_y     <- round(sd_y / media_y * 100, 2)

tabla_stats_direccion <- data.frame(
  Indicador = c("n (valores válidos)", "Media", "Mediana", "Moda",
                "Desviación estándar", "Varianza", "Mínimo", "Q1 (25%)",
                "Q3 (75%)", "Máximo", "Rango", "Rango intercuartílico (RIC)",
                "Coeficiente de variación (%)"),
  Valor = c(n_y, round(media_y, 2), mediana_y, moda_y, round(sd_y, 2),
            round(var_y, 2), min_y, q1_y, q3_y, max_y, rango_y, ric_y,
            paste0(cv_y, "%"))
)

kable(tabla_stats_direccion,
      caption = "Indicadores estadísticos - Longitud de la dirección registrada") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Indicadores estadísticos - Longitud de la dirección registrada
Indicador Valor
n (valores válidos) 126
Media 17.21
Mediana 16.5
Moda 16
Desviación estándar 4.58
Varianza 21
Mínimo 3
Q1 (25%) 15
Q3 (75%) 18.75
Máximo 50
Rango 47
Rango intercuartílico (RIC) 3.75
Coeficiente de variación (%) 26.62%
ggplot(datos %>% filter(!is.na(Longitud_Direccion)), aes(x = Longitud_Direccion)) +
  geom_histogram(binwidth = 3, fill = color_secundario, color = "white",
                 boundary = 0) +
  geom_vline(xintercept = media_y, color = color_principal,
              linetype = "dashed", linewidth = 1) +
  labs(title = "Distribución de la longitud de la dirección registrada",
       subtitle = "La línea punteada indica la media",
       x = "Número de caracteres", y = "Frecuencia (número de puntos)")

ggplot(datos %>% filter(!is.na(Longitud_Direccion)), aes(x = "", y = Longitud_Direccion)) +
  geom_boxplot(fill = color_secundario, alpha = 0.75, width = 0.35,
               outlier.color = color_principal) +
  labs(title = "Diagrama de caja - Longitud de la dirección registrada",
       x = "", y = "Número de caracteres") +
  theme(axis.ticks.x = element_blank())

Interpretación: las direcciones registradas tienen en promedio 17.2 caracteres (mediana = 16.5), con una desviación estándar de 4.6 caracteres y un coeficiente de variación de 26.62%. Se identificaron 2 registros sin dirección (marcados como pedidos exclusivamente por App o sin dato), los cuales fueron excluidos del cálculo.

7 Análisis cruzado entre variables

7.1 Longitud del nombre del cliente según canal de distribución

ggplot(datos, aes(x = fct_reorder(Canal, Longitud_Cliente, .fun = median),
                   y = Longitud_Cliente, fill = Canal)) +
  geom_boxplot(show.legend = FALSE, alpha = 0.85) +
  scale_fill_manual(values = paleta_ilv) +
  labs(title = "Longitud del nombre del cliente según canal de distribución",
       x = "Canal", y = "Número de caracteres del nombre del cliente")

resumen_canal_cliente <- datos %>%
  group_by(Canal) %>%
  summarise(
    n = n(),
    Media = round(mean(Longitud_Cliente, na.rm = TRUE), 1),
    Mediana = median(Longitud_Cliente, na.rm = TRUE),
    DE = round(sd(Longitud_Cliente, na.rm = TRUE), 1)
  ) %>%
  arrange(desc(Media))

kable(resumen_canal_cliente,
      col.names = c("Canal", "n", "Media", "Mediana", "Desv. Estándar"),
      caption = "Longitud del nombre del cliente por canal de distribución") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Longitud del nombre del cliente por canal de distribución
Canal n Media Mediana Desv. Estándar
TAT 66 21.4 19.0 8.9
Supermercado 7 19.0 20.0 6.8
Licorera 9 18.9 20.0 3.8
Mayorista 46 17.6 17.5 6.6

Interpretación: el canal TAT presenta, en promedio, los nombres de cliente más largos (21.4 caracteres), lo que puede explicarse por el uso de razones sociales más descriptivas (por ejemplo, “Supermercado …” o “Distribuidora …”) frente a nombres comerciales más cortos usados en otros canales.

7.2 Relación entre las dos variables cuantitativas

correlacion <- cor(datos$Longitud_Cliente, datos$Longitud_Direccion,
                    use = "complete.obs")

ggplot(datos, aes(x = Longitud_Cliente, y = Longitud_Direccion)) +
  geom_point(color = color_principal, alpha = 0.7, size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = color_secundario,
              linetype = "dashed") +
  labs(title = "Relación entre la longitud del nombre del cliente y de la dirección",
       subtitle = paste("Coeficiente de correlación de Pearson: r =",
                         round(correlacion, 3)),
       x = "Longitud del nombre del cliente (caracteres)",
       y = "Longitud de la dirección (caracteres)")

Interpretación: el coeficiente de correlación obtenido fue de 0.047, lo cual indica una relación lineal prácticamente nula entre la longitud del nombre del cliente y la longitud de la dirección registrada. Esto sugiere que ambas variables se comportan de manera independiente: que un punto de venta tenga un nombre más largo no implica que su dirección también esté descrita con mayor nivel de detalle.

8 Conclusiones

  • El canal TAT es el predominante en la red de distribución de la ILV, con 66 puntos (51.6% del total), seguido por Mayorista (35.9%). Entre ambos concentran el 87.5% de los puntos activos, mostrando una fuerte dependencia comercial en estos dos canales.

  • Cali es, por amplio margen, el municipio con mayor número de puntos de distribución (74, equivalente al 57.8%), mientras que el resto de los 24 municipios presentan una cobertura mucho más reducida, en su mayoría con un solo punto registrado.

  • El responsable comercial Ana Rosa Lopera administra la mayor carga de puntos de venta (66, 51.6%), lo que podría representar una oportunidad para evaluar el balance de cargas de trabajo entre el equipo comercial.

  • En cuanto a las variables cuantitativas derivadas, el nombre del cliente tiene en promedio 19.7 caracteres (CV = 40.2%) y la dirección registrada 17.2 caracteres (CV = 26.62%). La correlación entre ambas variables (0.047) resultó prácticamente nula, confirmando que el nivel de detalle registrado en cada campo depende de quién diligencia la información y no de las características del punto de venta en sí.

  • Se evidenció que 2 puntos de venta no cuentan con una dirección física registrada (atendidos únicamente por App u otro medio), lo cual es un hallazgo relevante para la calidad del dato y la logística de entregas.

9 Recomendaciones

  1. Reforzar el registro de direcciones físicas completas en los puntos que actualmente dependen solo de contacto por aplicación, con el fin de mejorar la trazabilidad logística.
  2. Evaluar la redistribución de puntos de venta entre responsables comerciales, dado el desbalance identificado en la carga de trabajo.
  3. Priorizar estrategias comerciales diferenciadas para el canal TAT, dado su peso predominante dentro de la red de distribución.
  4. Analizar oportunidades de expansión en los municipios con baja cobertura actual (un solo punto de distribución), evaluando el potencial de mercado de cada zona.

10 Anexo: pasos para publicar este informe en RPubs desde RStudio

  1. Abrir este archivo .Rmd en RStudio.
  2. Hacer clic en el botón Knit (parte superior del editor) y seleccionar Knit to HTML. Esto generará el archivo .html con todo el informe.
  3. Una vez generada la vista previa del documento, en la ventana de vista previa (Viewer) buscar el botón Publish (ícono azul, parte superior derecha del panel).
  4. Seleccionar RPubs como plataforma de destino e iniciar sesión o crear una cuenta gratuita si es la primera vez.
  5. Asignar un título y una URL personalizada al informe y confirmar la publicación.
  6. Copiar el enlace URL generado por RPubs y pegarlo en la actividad correspondiente dentro de la plataforma Brightspace.
## Informe generado con R version 4.6.1 (2026-06-24 ucrt)