VISUALIZACIÓN DE DATOS
PROYECTO GRUPAL FINAL · PARTE 1
Docente: Carlos Amortegui
El presente informe tiene como propósito realizar una exploración inicial de los datos históricos de ventas de trajes, con el fin de evaluar su estructura, calidad y utilidad para la elaboración del presupuesto de ventas de 2027.
El análisis se enfocará en las cantidades y los valores de venta, así como en su comportamiento por periodo, línea de producto y color.
Para realizar la exploración de los datos se utilizarán paquetes de R que permiten importar archivos, organizar la información y realizar cálculos estadísticos.
El siguiente código instala los paquetes necesarios para trabajar con archivos Excel y CSV, manipular datos y elaborar gráficos.
install.packages("readxl") # Lectura de archivos Excel
install.packages("readr") # Lectura de archivos CSV
install.packages("dplyr") # Manipulación y transformación de datos
install.packages("tidyr") # Organización de los datos
install.packages("ggplot2") # Elaboración de gráficos
install.packages("knitr") # Presentación de tablas
Una vez instalados, los paquetes se cargan para poder utilizar sus funciones durante el análisis.
library(readxl) # Importación de archivos Excel
library(readr) # Importación de archivos CSV
library(dplyr) # Manipulación de datos
library(ggplot2) # Gráficos exploratorios
library(knitr) # Presentación de tablas
Para realizar la exploración se utilizarán dos fuentes de información. La primera corresponde a los reportes históricos de ventas, almacenados en archivos Excel separados por mes. La segunda corresponde a la base consolidada de artículos, almacenada en formato TXT, que contiene características descriptivas de los productos.
Los reportes mensuales de ventas se integrarán en una sola base de datos para facilitar el análisis del comportamiento histórico. Posteriormente, se revisará la estructura de ambas fuentes antes de realizar su integración y los análisis descriptivos.
El siguiente código permite identificar los archivos Excel ubicados en la carpeta que contiene los reportes mensuales.
# Ruta de la carpeta que contiene los reportes mensuales
ruta_ventas <- "C:/Users/jerso/OneDrive/Documentos/Educacion/R Markdown/Proyecto_Visualizacion/_ventasHistoricas"
# Identificar los archivos Excel de la carpeta
archivos_ventas <- list.files(
path = ruta_ventas,
pattern = "\\.xlsx$",
full.names = TRUE,
ignore.case = TRUE
)
# Consultar la cantidad de archivos encontrados
length(archivos_ventas)
## [1] 2
# Mostrar los nombres de los archivos encontrados
basename(archivos_ventas)
## [1] "201904.xlsx" "Reporte de ventas - unificado.xlsx"
Una vez identificados los archivos, podemos leerlos y unirlos verticalmente. Este código supone que los reportes tienen una estructura compatible y que los datos están en la primera hoja de cada archivo.
(Los datos se garantizan desde la descarga que tiene el mismo formato y campos)
# Leer cada archivo Excel desde la hoja "Sheet1"
# y consolidar los registros en una sola base
ventas <- bind_rows(
lapply(archivos_ventas, function(archivo) {
read_excel(
path = archivo,
sheet = "Sheet1"
)
})
)
# Consultar las dimensiones de la base consolidada
dim(ventas)
## [1] 36244 35
# Visualizar los primeros registros
head(ventas)
| Bodega | Desc. C.O. | Desc. bodega | Referencia | Desc. item | Detalle ext. 1 | Desc. detalle ext. 1 | Detalle ext. 2 | U.M. | GRUPO | SUB GRUPO | LINEA | SILUETA | CATEGORIA | PRESUPUESTO | MATERIAL | DESCRIPCION MATERIAL | DISEÑO PRENDA | PAIS DE ORIGEN | PROVEEDOR | Clase docto. | Tipo docto. | SATELITE | Nro documento | Desc. lista de precios | Desc. causal devol. | Cantidad | Fecha | Valor neto local | Valor subtotal local | Valor descuentos local | Grupo dscto. cliente | Obsequio | Fecha y hora creación | Estado |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 67591-1 | PANTALON INF AZUL MED CN | 027 | AZUL MEDI | 32 | UND | 2 - INFORMAL | NA | 1 - CN | 2 - REGULAR | 13 - PANTALON | 042 - PANTALON INFORMAL | NA | 01 - UNICOLOR | 018 - BOLSILLOS SESGADOS | 002 - ESPAÑA | 034 - CONFECCIONES NALO SA | Boutique | FV1 | NA | FV1-00005121 | GENERAL | NA | 1 | 2019-06-28 | 239990 | 201672 | 0 | NA | No | 2019-06-28 12:09:13 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 67591-1 | PANTALON INF AZUL MED CN | 027 | AZUL MEDI | 36 | UND | 2 - INFORMAL | NA | 1 - CN | 2 - REGULAR | 13 - PANTALON | 042 - PANTALON INFORMAL | NA | 01 - UNICOLOR | 018 - BOLSILLOS SESGADOS | 002 - ESPAÑA | 034 - CONFECCIONES NALO SA | Boutique | FV1 | NA | FV1-00005120 | GENERAL | NA | 1 | 2019-06-28 | 239990 | 201672 | 0 | NA | No | 2019-06-28 12:06:40 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 67591-1 | PANTALON INF AZUL MED CN | 027 | AZUL MEDI | 38 | UND | 2 - INFORMAL | NA | 1 - CN | 2 - REGULAR | 13 - PANTALON | 042 - PANTALON INFORMAL | NA | 01 - UNICOLOR | 018 - BOLSILLOS SESGADOS | 002 - ESPAÑA | 034 - CONFECCIONES NALO SA | Boutique | FV1 | NA | FV1-00005119 | GENERAL | NA | 1 | 2019-06-27 | 239990 | 201672 | 0 | NA | No | 2019-06-27 18:14:31 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 6686103 | UNDER BOXER CORTO BLANCO ALGODON CN | NA | NA | NA | UND | 2 - INFORMAL | NA | 1 - CN | 8 - NO APLICA | 04 - ROPA INTERIOR | 061 - UNDER BOXER CORTO | NA | NA | NA | NA | 037 - CORPOTEX DE COLOMBIA SAS | Boutique | FV1 | 016 - CORPOTEX | FV1-00005125 | GENERAL | NA | 1 | 2019-06-29 | 45990 | 38647 | 0 | NA | No | 2019-06-29 11:41:26 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 11048 | 1901-517 JEAN AZUL MEDIO | 027 | AZUL MEDI | 36 | UND | 2 - INFORMAL | NA | 1 - CN | 4 - SLIM | 13 - PANTALON | 027 - JEANS | 12 - INDIGO | 01 - UNICOLOR | 017 - CINCO BOLSILLOS | 015 - COLOMBIA | 170 - PROJECT DENIM | Boutique | FV1 | 009 - PROJECT DENIM | FV1-00005041 | GENERAL | NA | 1 | 2019-06-10 | 298990 | 251252 | 0 | NA | No | 2019-06-10 12:54:04 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 11048 | 1901-517 JEAN AZUL MEDIO | 027 | AZUL MEDI | 38 | UND | 2 - INFORMAL | NA | 1 - CN | 4 - SLIM | 13 - PANTALON | 027 - JEANS | 12 - INDIGO | 01 - UNICOLOR | 017 - CINCO BOLSILLOS | 015 - COLOMBIA | 170 - PROJECT DENIM | Boutique | FV1 | 009 - PROJECT DENIM | FV1-00005037 | GENERAL | NA | 1 | 2019-06-09 | 298990 | 251252 | 0 | NA | No | 2019-06-09 14:29:27 | Aprobada |
El maestro de artículos se encuentra almacenado en un archivo de texto (TXT) cuyos campos están separados por tabulaciones. Después de su importación, se realizará una revisión de los registros duplicados. Cuando dos o más filas sean completamente idénticas en todas sus columnas, se conservará una sola copia. Este procedimiento permitirá reducir redundancias sin eliminar registros que presenten diferencias en sus atributos.
La base original importada se conservará y la depuración se aplicará sobre una copia de trabajo, garantizando la trazabilidad del procedimiento.
# Definir la ruta del archivo maestro
ruta_articulos <- "C:/Users/jerso/OneDrive/Documentos/Educacion/R Markdown/Proyecto_Visualizacion/_maestroArticulos/Reporte articulos.txt"
# Importar el archivo TXT separado por tabulaciones
articulos <- read_delim(
file = ruta_articulos,
delim = "\t",
locale = locale(encoding = "Windows-1252"),
trim_ws = TRUE,
show_col_types = FALSE
)
# Contar las filas completamente duplicadas
duplicados_exactos <- sum(duplicated(articulos))
# Crear una base depurada, conservando una sola copia
# de cada fila completamente idéntica
articulos_limpio <- articulos %>%
distinct()
# Resumir los resultados
resumen_depuracion <- data.frame(
Registros_originales = nrow(articulos),
Duplicados_exactos = duplicados_exactos,
Registros_despues_depuracion = nrow(articulos_limpio)
)
knitr::kable(
resumen_depuracion,
caption = "Resumen de la depuración de duplicados exactos"
)
| Registros_originales | Duplicados_exactos | Registros_despues_depuracion |
|---|---|---|
| 71684 | 38249 | 33435 |
# Mostrar los primeros registros de la base depurada
head(articulos_limpio)
| Referencia | Desc. item | Ext. 1 detalle | Desc. ext. 1 | CATEGORIA | PRESUPUESTO | LINEA | SILUETA | DISEÑO PRENDA | …10 | …11 | …12 | …13 | …14 | …15 | …16 | …17 | …18 | …19 | …20 | …21 | …22 | …23 | …24 | …25 | …26 | …27 | …28 | …29 | …30 | …31 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0014633 | SUÉTER GRIS OSCURO CERRADO | 035 | COL PREN | 19 - PUNTO | 054 - SUETER CERRADO | 1 - CN | 2 - REGULAR | 121 - CUELLO TORTUGA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 0014634 | SUÉTER AZUL OSCURO CERRADO | 028 | COL PREN | 19 - PUNTO | 054 - SUETER CERRADO | 1 - CN | 2 - REGULAR | 121 - CUELLO TORTUGA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 0014635 | SUÉTER NEGRO CERRADO | 036 | COL PREN | 19 - PUNTO | 054 - SUETER CERRADO | 1 - CN | 2 - REGULAR | 121 - CUELLO TORTUGA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 240-554 | ATLAS MERINOS 100 | NA | NA | NA | NA | 0 - N/A | 8 - NO APLICA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 16-040 | DYSATEX UV | NA | NA | NA | NA | 0 - N/A | 8 - NO APLICA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 0014650 | SERVICIO DE CONFECCION BOLSAS ZAPATOS | NA | NA | 15 - NO VENTA | 125 - NO VENTA | 0 - N/A | 8 - NO APLICA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
Una vez importadas las fuentes de información, se realizará una revisión inicial de su estructura para identificar la cantidad de registros, las variables disponibles y los tipos de datos de cada base. Esta revisión permitirá reconocer las características generales de la información y detectar posibles ajustes necesarios antes de realizar el análisis exploratorio.
Las dimensiones permiten conocer el número de registros y variables disponibles en cada fuente de información.
# Cantidad de filas y columnas de la base de ventas
dim(ventas)
## [1] 36244 35
# Cantidad de filas y columnas del maestro de artículos
dim(articulos_limpio)
## [1] 33435 31
# Variables disponibles en la base de ventas
names(ventas)
## [1] "Bodega" "Desc. C.O." "Desc. bodega"
## [4] "Referencia" "Desc. item" "Detalle ext. 1"
## [7] "Desc. detalle ext. 1" "Detalle ext. 2" "U.M."
## [10] "GRUPO" "SUB GRUPO" "LINEA"
## [13] "SILUETA" "CATEGORIA" "PRESUPUESTO"
## [16] "MATERIAL" "DESCRIPCION MATERIAL" "DISEÑO PRENDA"
## [19] "PAIS DE ORIGEN" "PROVEEDOR" "Clase docto."
## [22] "Tipo docto." "SATELITE" "Nro documento"
## [25] "Desc. lista de precios" "Desc. causal devol." "Cantidad"
## [28] "Fecha" "Valor neto local" "Valor subtotal local"
## [31] "Valor descuentos local" "Grupo dscto. cliente" "Obsequio"
## [34] "Fecha y hora creación" "Estado"
# Variables disponibles en el maestro de artículos
names(articulos_limpio)
## [1] "Referencia" "Desc. item" "Ext. 1 detalle" "Desc. ext. 1"
## [5] "CATEGORIA" "PRESUPUESTO" "LINEA" "SILUETA"
## [9] "DISEÑO PRENDA" "...10" "...11" "...12"
## [13] "...13" "...14" "...15" "...16"
## [17] "...17" "...18" "...19" "...20"
## [21] "...21" "...22" "...23" "...24"
## [25] "...25" "...26" "...27" "...28"
## [29] "...29" "...30" "...31"
# Estructura de la base de ventas
glimpse(ventas)
## Rows: 36,244
## Columns: 35
## $ Bodega <chr> "191", "191", "191", "191", "191", "191", "19…
## $ `Desc. C.O.` <chr> "VILLAVICENCIO", "VILLAVICENCIO", "VILLAVICEN…
## $ `Desc. bodega` <chr> "PV VILLAVICENCIO", "PV VILLAVICENCIO", "PV V…
## $ Referencia <chr> "67591-1", "67591-1", "67591-1", "6686103", "…
## $ `Desc. item` <chr> "PANTALON INF AZUL MED CN", "PANTALON INF AZU…
## $ `Detalle ext. 1` <chr> "027", "027", "027", NA, "027", "027", NA, NA…
## $ `Desc. detalle ext. 1` <chr> "AZUL MEDI", "AZUL MEDI", "AZUL MEDI", NA, "A…
## $ `Detalle ext. 2` <chr> "32", "36", "38", NA, "36", "38", NA, NA, NA,…
## $ U.M. <chr> "UND", "UND", "UND", "UND", "UND", "UND", "UN…
## $ GRUPO <chr> "2 - INFORMAL", "2 - INFORMAL", "2 - INFORMAL…
## $ `SUB GRUPO` <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ LINEA <chr> "1 - CN", "1 - CN", "1 - CN", "1 - CN", "1 - …
## $ SILUETA <chr> "2 - REGULAR", "2 - REGULAR", "2 - REGULAR", …
## $ CATEGORIA <chr> "13 - PANTALON", "13 - PANTALON", "13 - PANTA…
## $ PRESUPUESTO <chr> "042 - PANTALON INFORMAL", "042 - PANTALON IN…
## $ MATERIAL <chr> NA, NA, NA, NA, "12 - INDIGO", "12 - INDIGO",…
## $ `DESCRIPCION MATERIAL` <chr> "01 - UNICOLOR", "01 - UNICOLOR", "01 - UNICO…
## $ `DISEÑO PRENDA` <chr> "018 - BOLSILLOS SESGADOS", "018 - BOLSILLOS …
## $ `PAIS DE ORIGEN` <chr> "002 - ESPAÑA", "002 - ESPAÑA", "002 - ESPAÑA…
## $ PROVEEDOR <chr> "034 - CONFECCIONES NALO SA", "034 - CONFECCI…
## $ `Clase docto.` <chr> "Boutique", "Boutique", "Boutique", "Boutique…
## $ `Tipo docto.` <chr> "FV1", "FV1", "FV1", "FV1", "FV1", "FV1", "FV…
## $ SATELITE <chr> NA, NA, NA, "016 - CORPOTEX", "009 - PROJECT …
## $ `Nro documento` <chr> "FV1-00005121", "FV1-00005120", "FV1-00005119…
## $ `Desc. lista de precios` <chr> "GENERAL", "GENERAL", "GENERAL", "GENERAL", "…
## $ `Desc. causal devol.` <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ Cantidad <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Fecha <dttm> 2019-06-28, 2019-06-28, 2019-06-27, 2019-06-…
## $ `Valor neto local` <dbl> 239990, 239990, 239990, 45990, 298990, 298990…
## $ `Valor subtotal local` <dbl> 201672, 201672, 201672, 38647, 251252, 251252…
## $ `Valor descuentos local` <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ `Grupo dscto. cliente` <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ Obsequio <chr> "No", "No", "No", "No", "No", "No", "No", "No…
## $ `Fecha y hora creación` <dttm> 2019-06-28 12:09:13, 2019-06-28 12:06:40, 20…
## $ Estado <chr> "Aprobada", "Aprobada", "Aprobada", "Aprobada…
# Estructura del maestro de artículos
glimpse(articulos_limpio)
## Rows: 33,435
## Columns: 31
## $ Referencia <chr> "0014633", "0014634", "0014635", "240-554", "16-040",…
## $ `Desc. item` <chr> "SUÉTER GRIS OSCURO CERRADO", "SUÉTER AZUL OSCURO CER…
## $ `Ext. 1 detalle` <chr> "035", "028", "036", NA, NA, NA, "027", "028", "026",…
## $ `Desc. ext. 1` <chr> "COL PREN", "COL PREN", "COL PREN", NA, NA, NA, "COL …
## $ CATEGORIA <chr> "19 - PUNTO", "19 - PUNTO", "19 - PUNTO", NA, NA, "15…
## $ PRESUPUESTO <chr> "054 - SUETER CERRADO", "054 - SUETER CERRADO", "054 …
## $ LINEA <chr> "1 - CN", "1 - CN", "1 - CN", "0 - N/A", "0 - N/A", "…
## $ SILUETA <chr> "2 - REGULAR", "2 - REGULAR", "2 - REGULAR", "8 - NO …
## $ `DISEÑO PRENDA` <chr> "121 - CUELLO TORTUGA", "121 - CUELLO TORTUGA", "121 …
## $ ...10 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...11 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...12 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...13 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...14 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...15 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...16 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...17 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...18 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...19 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...20 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...21 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...22 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...23 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...24 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...25 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...26 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...27 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...28 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...29 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...30 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ ...31 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
# Primeros registros de ventas
head(ventas)
| Bodega | Desc. C.O. | Desc. bodega | Referencia | Desc. item | Detalle ext. 1 | Desc. detalle ext. 1 | Detalle ext. 2 | U.M. | GRUPO | SUB GRUPO | LINEA | SILUETA | CATEGORIA | PRESUPUESTO | MATERIAL | DESCRIPCION MATERIAL | DISEÑO PRENDA | PAIS DE ORIGEN | PROVEEDOR | Clase docto. | Tipo docto. | SATELITE | Nro documento | Desc. lista de precios | Desc. causal devol. | Cantidad | Fecha | Valor neto local | Valor subtotal local | Valor descuentos local | Grupo dscto. cliente | Obsequio | Fecha y hora creación | Estado |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 67591-1 | PANTALON INF AZUL MED CN | 027 | AZUL MEDI | 32 | UND | 2 - INFORMAL | NA | 1 - CN | 2 - REGULAR | 13 - PANTALON | 042 - PANTALON INFORMAL | NA | 01 - UNICOLOR | 018 - BOLSILLOS SESGADOS | 002 - ESPAÑA | 034 - CONFECCIONES NALO SA | Boutique | FV1 | NA | FV1-00005121 | GENERAL | NA | 1 | 2019-06-28 | 239990 | 201672 | 0 | NA | No | 2019-06-28 12:09:13 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 67591-1 | PANTALON INF AZUL MED CN | 027 | AZUL MEDI | 36 | UND | 2 - INFORMAL | NA | 1 - CN | 2 - REGULAR | 13 - PANTALON | 042 - PANTALON INFORMAL | NA | 01 - UNICOLOR | 018 - BOLSILLOS SESGADOS | 002 - ESPAÑA | 034 - CONFECCIONES NALO SA | Boutique | FV1 | NA | FV1-00005120 | GENERAL | NA | 1 | 2019-06-28 | 239990 | 201672 | 0 | NA | No | 2019-06-28 12:06:40 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 67591-1 | PANTALON INF AZUL MED CN | 027 | AZUL MEDI | 38 | UND | 2 - INFORMAL | NA | 1 - CN | 2 - REGULAR | 13 - PANTALON | 042 - PANTALON INFORMAL | NA | 01 - UNICOLOR | 018 - BOLSILLOS SESGADOS | 002 - ESPAÑA | 034 - CONFECCIONES NALO SA | Boutique | FV1 | NA | FV1-00005119 | GENERAL | NA | 1 | 2019-06-27 | 239990 | 201672 | 0 | NA | No | 2019-06-27 18:14:31 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 6686103 | UNDER BOXER CORTO BLANCO ALGODON CN | NA | NA | NA | UND | 2 - INFORMAL | NA | 1 - CN | 8 - NO APLICA | 04 - ROPA INTERIOR | 061 - UNDER BOXER CORTO | NA | NA | NA | NA | 037 - CORPOTEX DE COLOMBIA SAS | Boutique | FV1 | 016 - CORPOTEX | FV1-00005125 | GENERAL | NA | 1 | 2019-06-29 | 45990 | 38647 | 0 | NA | No | 2019-06-29 11:41:26 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 11048 | 1901-517 JEAN AZUL MEDIO | 027 | AZUL MEDI | 36 | UND | 2 - INFORMAL | NA | 1 - CN | 4 - SLIM | 13 - PANTALON | 027 - JEANS | 12 - INDIGO | 01 - UNICOLOR | 017 - CINCO BOLSILLOS | 015 - COLOMBIA | 170 - PROJECT DENIM | Boutique | FV1 | 009 - PROJECT DENIM | FV1-00005041 | GENERAL | NA | 1 | 2019-06-10 | 298990 | 251252 | 0 | NA | No | 2019-06-10 12:54:04 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 11048 | 1901-517 JEAN AZUL MEDIO | 027 | AZUL MEDI | 38 | UND | 2 - INFORMAL | NA | 1 - CN | 4 - SLIM | 13 - PANTALON | 027 - JEANS | 12 - INDIGO | 01 - UNICOLOR | 017 - CINCO BOLSILLOS | 015 - COLOMBIA | 170 - PROJECT DENIM | Boutique | FV1 | 009 - PROJECT DENIM | FV1-00005037 | GENERAL | NA | 1 | 2019-06-09 | 298990 | 251252 | 0 | NA | No | 2019-06-09 14:29:27 | Aprobada |
# Primeros registros del maestro de artículos
head(articulos_limpio)
| Referencia | Desc. item | Ext. 1 detalle | Desc. ext. 1 | CATEGORIA | PRESUPUESTO | LINEA | SILUETA | DISEÑO PRENDA | …10 | …11 | …12 | …13 | …14 | …15 | …16 | …17 | …18 | …19 | …20 | …21 | …22 | …23 | …24 | …25 | …26 | …27 | …28 | …29 | …30 | …31 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0014633 | SUÉTER GRIS OSCURO CERRADO | 035 | COL PREN | 19 - PUNTO | 054 - SUETER CERRADO | 1 - CN | 2 - REGULAR | 121 - CUELLO TORTUGA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 0014634 | SUÉTER AZUL OSCURO CERRADO | 028 | COL PREN | 19 - PUNTO | 054 - SUETER CERRADO | 1 - CN | 2 - REGULAR | 121 - CUELLO TORTUGA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 0014635 | SUÉTER NEGRO CERRADO | 036 | COL PREN | 19 - PUNTO | 054 - SUETER CERRADO | 1 - CN | 2 - REGULAR | 121 - CUELLO TORTUGA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 240-554 | ATLAS MERINOS 100 | NA | NA | NA | NA | 0 - N/A | 8 - NO APLICA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 16-040 | DYSATEX UV | NA | NA | NA | NA | 0 - N/A | 8 - NO APLICA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 0014650 | SERVICIO DE CONFECCION BOLSAS ZAPATOS | NA | NA | 15 - NO VENTA | 125 - NO VENTA | 0 - N/A | 8 - NO APLICA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
Con el propósito de delimitar la información relevante para el proyecto, se identificarán los artículos clasificados en la categoría 16 - TRAJE.
Posteriormente, se revisarán sus subdivisiones presupuestales para distinguir las líneas 058 - TRAJE y 060 - TRAJE LINO, de acuerdo con la clasificación registrada en el maestro de artículos.
# Filtrar los trajes desde el maestro ya depurado
articulos_trajes <- articulos_limpio %>%
filter(CATEGORIA == "16 - TRAJE")
# Consultar las dimensiones de la base filtrada
dim(articulos_trajes)
## [1] 3216 31
# Mostrar los primeros registros
head(articulos_trajes)
| Referencia | Desc. item | Ext. 1 detalle | Desc. ext. 1 | CATEGORIA | PRESUPUESTO | LINEA | SILUETA | DISEÑO PRENDA | …10 | …11 | …12 | …13 | …14 | …15 | …16 | …17 | …18 | …19 | …20 | …21 | …22 | …23 | …24 | …25 | …26 | …27 | …28 | …29 | …30 | …31 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 6692539 | TRAJE AZUL O 2 BOT LAB CUADROS | NA | NA | 16 - TRAJE | 058 - TRAJE | 1 - CN | 4 - SLIM | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 6704146 | TRAJE GRIS MEDIO 2 BOT PLATINO | NA | NA | 16 - TRAJE | 058 - TRAJE | 3 - PLATINO | 2 - REGULAR | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 6704546 | TRAJE GRIS OSCURO 2 BOT PLATINO | NA | NA | 16 - TRAJE | 058 - TRAJE | 3 - PLATINO | 2 - REGULAR | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 33208 | TRAJE 2 BT AZUL OSC CUADROS LONG | 028 | COL PREN | 16 - TRAJE | 058 - TRAJE | 1 - CN | 5 - REGULAR LONG | 011 - DOS BOTONES | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 33210 | TRAJE 2 BT GRIS OSC CUADROS LONG | 035 | COL PREN | 16 - TRAJE | 058 - TRAJE | 1 - CN | 5 - REGULAR LONG | 011 - DOS BOTONES | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 33212 | TRAJE 2 BT GRIS OSC JASPE LONG | 035 | COL PREN | 16 - TRAJE | 058 - TRAJE | 1 - CN | 5 - REGULAR LONG | 011 - DOS BOTONES | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
# Filtrar las ventas de las referencias identificadas como trajes
ventas_trajes <- ventas %>%
filter(Referencia %in% articulos_trajes$Referencia)
# Consultar las dimensiones de la base filtrada
dim(ventas_trajes)
## [1] 3304 35
# Revisar los primeros registros
head(ventas_trajes)
| Bodega | Desc. C.O. | Desc. bodega | Referencia | Desc. item | Detalle ext. 1 | Desc. detalle ext. 1 | Detalle ext. 2 | U.M. | GRUPO | SUB GRUPO | LINEA | SILUETA | CATEGORIA | PRESUPUESTO | MATERIAL | DESCRIPCION MATERIAL | DISEÑO PRENDA | PAIS DE ORIGEN | PROVEEDOR | Clase docto. | Tipo docto. | SATELITE | Nro documento | Desc. lista de precios | Desc. causal devol. | Cantidad | Fecha | Valor neto local | Valor subtotal local | Valor descuentos local | Grupo dscto. cliente | Obsequio | Fecha y hora creación | Estado |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 6681838 | TRAJE AZUL MEDIO 2 BOT LAB | NA | NA | NA | UND | 1 - FORMAL | NA | 1 - CN | 4 - SLIM | 16 - TRAJE | 058 - TRAJE | NA | NA | NA | NA | 173 - CAPELHI D UOMO | Boutique | FV1 | 017 - CAPHELI | FV1-00004935 | GENERAL | NA | 1 | 2019-05-03 | 759990 | 638647 | 0 | NA | No | 2019-05-03 20:19:11 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 6681742 | TRAJE NEGRO 2 BOT LAB | NA | NA | NA | UND | 1 - FORMAL | NA | 1 - CN | 4 - SLIM | 16 - TRAJE | 058 - TRAJE | NA | NA | NA | NA | 173 - CAPELHI D UOMO | Boutique | FV1 | 017 - CAPHELI | FV1-00004875 | GENERAL | NA | 1 | 2019-04-13 | 759990 | 638647 | 0 | NA | No | 2019-04-13 19:34:42 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 6681940 | TRAJE GRIS MEDIO 2 BOT LAB | NA | NA | NA | UND | 1 - FORMAL | NA | 1 - CN | 4 - SLIM | 16 - TRAJE | 058 - TRAJE | NA | NA | NA | NA | 173 - CAPELHI D UOMO | Boutique | FV1 | 017 - CAPHELI | FV1-00004868 | GENERAL | NA | 1 | 2019-04-10 | 759990 | 638647 | 0 | NA | No | 2019-04-10 20:25:48 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 6468140 | TRAJE LINO MARFIL 2 BOT CN REGULAR FIT | NA | NA | NA | UND | 2 - INFORMAL | NA | 1 - CN | 2 - REGULAR | 16 - TRAJE | 060 - TRAJE LINO | NA | NA | NA | NA | 035 - CONFECCOES LANCA | Boutique | FV1 | 003 - CONFECCOES LANCA | FV1-00004939 | GENERAL | NA | 1 | 2019-05-04 | 1298990 | 1091588 | 0 | NA | No | 2019-05-04 16:10:10 | Aprobada |
| 191 | VILLAVICENCIO | PV VILLAVICENCIO | 33209 | TRAJE 2BOT CN GRIS OSC CUADROS | 035 | GRIS OSCU | 43 | UND | 1 - FORMAL | NA | 1 - CN | 2 - REGULAR | 16 - TRAJE | 058 - TRAJE | 06 - LANA | 03 - CUADROS | 011 - DOS BOTONES | 004 - CHINA | 132 - RSK TRADING CO LTD | Boutique | FV1 | 022 - CONFECCIONES ROSDI | FV1-00005020 | GENERAL | NA | 1 | 2019-06-01 | 959990 | 806714 | 0 | NA | No | 2019-06-01 14:45:25 | Aprobada |
| 091 | GRAN ESTACION | PV GRAN ESTACION | 6744740 | TRAJE NEGRO 2 BOT CN | NA | NA | NA | UND | 1 - FORMAL | NA | 1 - CN | 2 - REGULAR | 16 - TRAJE | 058 - TRAJE | NA | NA | NA | NA | 035 - CONFECCOES LANCA | Boutique | FV1 | 003 - CONFECCOES LANCA | FV1-00077307 | GENERAL | NA | 1 | 2019-06-15 | 1389990 | 1168059 | 0 | NA | No | 2019-06-15 12:23:27 | Aprobada |
La revisión de la calidad de los datos permite identificar posibles problemas en la información antes de realizar los análisis exploratorios. En esta etapa se evaluará la presencia de valores faltantes y registros duplicados en la base de ventas de trajes. Estos procedimientos permitirán conocer el estado general de los datos y determinar si es necesario realizar ajustes antes de continuar con el análisis. No se eliminarán registros automáticamente, ya que primero se debe evaluar su naturaleza y relevancia.
Los valores faltantes corresponden a registros en los que una o varias variables no contienen información. Su identificación permite reconocer posibles limitaciones en la integridad de los datos y determinar si las variables disponibles son adecuadas para los análisis posteriores.
# Contar los valores faltantes por variable
faltantes_ventas <- data.frame(
Variable = names(ventas_trajes),
Cantidad_faltante = sapply(
ventas_trajes,
function(x) sum(is.na(x))
)
)
# Calcular el porcentaje de valores faltantes por variable
faltantes_ventas$Porcentaje_faltante <- round(
faltantes_ventas$Cantidad_faltante /
nrow(ventas_trajes) * 100,
2
)
# Presentar las variables con valores faltantes
faltantes_ventas %>%
filter(Cantidad_faltante > 0) %>%
arrange(desc(Cantidad_faltante)) %>%
knitr::kable(
caption = "Valores faltantes en la base de ventas de trajes"
)
| Variable | Cantidad_faltante | Porcentaje_faltante | |
|---|---|---|---|
| SUB GRUPO | SUB GRUPO | 3301 | 99.91 |
| Grupo dscto. cliente | Grupo dscto. cliente | 3289 | 99.55 |
| Desc. causal devol. | Desc. causal devol. | 3156 | 95.52 |
| Detalle ext. 1 | Detalle ext. 1 | 1853 | 56.08 |
| Desc. detalle ext. 1 | Desc. detalle ext. 1 | 1853 | 56.08 |
| Detalle ext. 2 | Detalle ext. 2 | 1853 | 56.08 |
| PAIS DE ORIGEN | PAIS DE ORIGEN | 1813 | 54.87 |
| MATERIAL | MATERIAL | 1810 | 54.78 |
| DESCRIPCION MATERIAL | DESCRIPCION MATERIAL | 1809 | 54.75 |
| DISEÑO PRENDA | DISEÑO PRENDA | 1808 | 54.72 |
| PROVEEDOR | PROVEEDOR | 621 | 18.80 |
| SATELITE | SATELITE | 125 | 3.78 |
| GRUPO | GRUPO | 89 | 2.69 |
La identificación de registros duplicados permite detectar filas que presentan exactamente los mismos valores en todas sus variables. Su revisión contribuye a prevenir posibles distorsiones en los resultados; sin embargo, la existencia de filas idénticas no implica necesariamente que correspondan a errores. Por esta razón, en esta etapa únicamente se identificarán los posibles duplicados, sin eliminarlos de la base.
# Contar las filas completamente duplicadas
duplicados_ventas <- sum(duplicated(ventas_trajes))
# Resumir los resultados de la revisión
resumen_duplicados <- data.frame(
Total_registros = nrow(ventas_trajes),
Registros_duplicados = duplicados_ventas,
Porcentaje_duplicados = round(
duplicados_ventas / nrow(ventas_trajes) * 100,
2
)
)
# Presentar la tabla de resultados
knitr::kable(
resumen_duplicados,
caption = "Revisión de registros duplicados en las ventas de trajes"
)
| Total_registros | Registros_duplicados | Porcentaje_duplicados |
|---|---|---|
| 3304 | 0 | 0 |
Para preparar la información destinada al análisis histórico y a la elaboración del presupuesto de ventas de 2027, se revisarán las variables disponibles en la base de ventas de trajes. Esta revisión permitirá identificar los campos relacionados con la fecha de la operación, las cantidades vendidas, los valores de venta y los atributos de los productos, como el color.
Se consultarán los nombres de las variables de la base de ventas de trajes y del maestro de artículos para identificar los campos que se utilizarán en las siguientes etapas del análisis.
# Variables de la base de ventas de trajes
names(ventas_trajes)
## [1] "Bodega" "Desc. C.O." "Desc. bodega"
## [4] "Referencia" "Desc. item" "Detalle ext. 1"
## [7] "Desc. detalle ext. 1" "Detalle ext. 2" "U.M."
## [10] "GRUPO" "SUB GRUPO" "LINEA"
## [13] "SILUETA" "CATEGORIA" "PRESUPUESTO"
## [16] "MATERIAL" "DESCRIPCION MATERIAL" "DISEÑO PRENDA"
## [19] "PAIS DE ORIGEN" "PROVEEDOR" "Clase docto."
## [22] "Tipo docto." "SATELITE" "Nro documento"
## [25] "Desc. lista de precios" "Desc. causal devol." "Cantidad"
## [28] "Fecha" "Valor neto local" "Valor subtotal local"
## [31] "Valor descuentos local" "Grupo dscto. cliente" "Obsequio"
## [34] "Fecha y hora creación" "Estado"
# Variables del maestro de artículos
names(articulos_trajes)
## [1] "Referencia" "Desc. item" "Ext. 1 detalle" "Desc. ext. 1"
## [5] "CATEGORIA" "PRESUPUESTO" "LINEA" "SILUETA"
## [9] "DISEÑO PRENDA" "...10" "...11" "...12"
## [13] "...13" "...14" "...15" "...16"
## [17] "...17" "...18" "...19" "...20"
## [21] "...21" "...22" "...23" "...24"
## [25] "...25" "...26" "...27" "...28"
## [29] "...29" "...30" "...31"
La selección de variables se realizó de acuerdo con los objetivos del proyecto y la utilidad de cada campo para la elaboración del presupuesto de ventas de 2027. Se priorizarán la fecha de la operación, la referencia del artículo, la talla y la cantidad vendida. A partir del maestro de artículos se incorporarán los atributos descriptivos actuales del producto, incluyendo la línea, el color, la categoría, el presupuesto, la silueta y el diseño de la prenda.
Se conservará la referencia como campo de relación entre las fuentes de información. La talla se mantendrá desde los registros históricos de ventas, debido a que permite distinguir las unidades vendidas por talla, mientras que el maestro aporta la clasificación general y actualizada del artículo.
Los valores monetarios y otros campos que no forman parte del alcance principal se excluirán de la base de análisis. Asimismo, se revisará el estado de los registros para excluir las operaciones canceladas, una vez identificada su denominación exacta en los datos de origen.
# 1. Seleccionar las variables necesarias de las ventas de trajes
ventas_seleccion <- ventas_trajes %>%
select(
Referencia,
`Detalle ext. 2`,
Fecha,
Cantidad,
Estado
)
# 2. Seleccionar los atributos actuales del maestro de trajes
articulos_seleccion <- articulos_trajes %>%
select(
Referencia,
`Desc. item`,
`Ext. 1 detalle`,
`Desc. ext. 1`,
CATEGORIA,
PRESUPUESTO,
LINEA,
SILUETA,
`DISEÑO PRENDA`
)
# 3. Revisar los estados de los registros de ventas
ventas_seleccion %>%
count(Estado, sort = TRUE) %>%
knitr::kable(
caption = "Distribución de registros por estado"
)
| Estado | n |
|---|---|
| Aprobada | 3304 |
# 4. Identificar referencias que aparecen varias veces
referencias_repetidas <- articulos_seleccion %>%
count(Referencia, name = "Numero_registros") %>%
filter(Numero_registros > 1) %>%
arrange(desc(Numero_registros))
# Mostrar las primeras 20 referencias repetidas
head(referencias_repetidas, 20) %>%
knitr::kable(
caption = "Referencias repetidas en el maestro de trajes"
)
| Referencia | Numero_registros |
|---|---|
| 0015939 | 4 |
| 0015935 | 3 |
| 0015936 | 3 |
| 0015937 | 3 |
| 0014287 | 2 |
| 0015536 | 2 |
| 0015615 | 2 |
| 0015932 | 2 |
| 0015938 | 2 |
| 0017007 | 2 |
| 0017008 | 2 |
| 0019538 | 2 |
| 0020256 | 2 |
| 0020258 | 2 |
| 0020261 | 2 |
| 0020813 | 2 |
| 0021315 | 2 |
| 0023047 | 2 |
| 0023048 | 2 |
| 0023607 | 2 |
# 5. Resumir la revisión de referencias
data.frame(
Referencias_unicas = n_distinct(articulos_seleccion$Referencia),
Referencias_repetidas = nrow(referencias_repetidas)
) %>%
knitr::kable(
caption = "Resumen de la revisión de referencias"
)
| Referencias_unicas | Referencias_repetidas |
|---|---|
| 3164 | 47 |