#install.packages("tidyverse") # Manipulación de datos
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#install.packages("dplyr") # Gramática de funciones de manipulación
library(dplyr)
#install.packages("janitor") # Limpieza de datos
library(janitor)
##
## Attaching package: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
#install.packages("lubridate")
library(lubridate)
#install.packages("plyr")
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## Attaching package: 'plyr'
##
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
##
## The following object is masked from 'package:purrr':
##
## compact
#install.packages("Matrix")
library(Matrix)
##
## Attaching package: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
#install.packages("arules")
library(arules)
##
## Attaching package: 'arules'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following objects are masked from 'package:base':
##
## abbreviate, write
#install.packages("arulesViz")
library(arulesViz)
#install.packages("datasets")
library(datasets)
options(repos = c(CRAN = "www.xquartz.org"))
df <- read.csv("abarrotes.csv")
# Para explorar variables numéricas
summary(df)
## vcClaveTienda DescGiro Codigo.Barras PLU
## Length:200625 Length:200625 Min. :8.347e+05 Min. : 1.00
## Class :character Class :character 1st Qu.:7.501e+12 1st Qu.: 1.00
## Mode :character Mode :character Median :7.501e+12 Median : 1.00
## Mean :5.950e+12 Mean : 2.11
## 3rd Qu.:7.501e+12 3rd Qu.: 1.00
## Max. :1.750e+13 Max. :30.00
## NA's :199188
## Fecha Hora Marca Fabricante
## Length:200625 Length:200625 Length:200625 Length:200625
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Producto Precio Ult.Costo Unidades
## Length:200625 Min. :-147.00 Min. : 0.38 Min. : 0.200
## Class :character 1st Qu.: 11.00 1st Qu.: 8.46 1st Qu.: 1.000
## Mode :character Median : 16.00 Median : 12.31 Median : 1.000
## Mean : 19.42 Mean : 15.31 Mean : 1.262
## 3rd Qu.: 25.00 3rd Qu.: 19.23 3rd Qu.: 1.000
## Max. :1000.00 Max. :769.23 Max. :96.000
##
## F.Ticket NombreDepartamento NombreFamilia NombreCategoria
## Min. : 1 Length:200625 Length:200625 Length:200625
## 1st Qu.: 33964 Class :character Class :character Class :character
## Median :105993 Mode :character Mode :character Mode :character
## Mean :193990
## 3rd Qu.:383005
## Max. :450040
##
## Estado Mts.2 Tipo.ubicación Giro
## Length:200625 Min. :47.0 Length:200625 Length:200625
## Class :character 1st Qu.:53.0 Class :character Class :character
## Mode :character Median :60.0 Mode :character Mode :character
## Mean :56.6
## 3rd Qu.:60.0
## Max. :62.0
##
## Hora.inicio Hora.cierre
## Length:200625 Length:200625
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
# Para explorar variables de texto
count(df, vcClaveTienda, sort = TRUE) # Sort hace que la más repetida este arriba, menos abajo
count(df, Hora.cierre, sort = TRUE)
count(df, Hora.inicio, sort = TRUE)
count(df, Giro, sort = TRUE)
count(df, Tipo.ubicación, sort = TRUE)
count(df, Estado, sort = TRUE)
count(df, NombreCategoria, sort = TRUE)
count(df, NombreFamilia, sort = TRUE)
count(df, NombreDepartamento, sort = TRUE)
count(df, Producto, sort = TRUE)
count(df, Fabricante, sort = TRUE)
count(df, Marca, sort = TRUE)
count(df, Hora, sort = TRUE)
count(df, Fecha, sort = TRUE)
count(df, DescGiro, sort = TRUE)
# Para ver los primeros valores y el tipo de datos por variables
tibble(df)
## # A tibble: 200,625 × 22
## vcClaveTienda DescGiro Codigo.Barras PLU Fecha Hora Marca Fabricante
## <chr> <chr> <dbl> <int> <chr> <chr> <chr> <chr>
## 1 MX001 Abarrotes 7501020540666 NA 19/06/2020 08:1… NUTR… MEXILAC
## 2 MX001 Abarrotes 7501032397906 NA 19/06/2020 08:2… DAN … DANONE DE…
## 3 MX001 Abarrotes 7501000112845 NA 19/06/2020 08:2… BIMBO GRUPO BIM…
## 4 MX001 Abarrotes 7501031302741 NA 19/06/2020 08:2… PEPSI PEPSI-COL…
## 5 MX001 Abarrotes 7501026027543 NA 19/06/2020 08:2… BLAN… FABRICA D…
## 6 MX001 Abarrotes 7501020540666 NA 19/06/2020 08:1… NUTR… MEXILAC
## 7 MX001 Abarrotes 7501032397906 NA 19/06/2020 08:2… DAN … DANONE DE…
## 8 MX001 Abarrotes 7501000112845 NA 19/06/2020 08:2… BIMBO GRUPO BIM…
## 9 MX001 Abarrotes 7501031302741 NA 19/06/2020 08:2… PEPSI PEPSI-COL…
## 10 MX001 Abarrotes 7501026027543 NA 19/06/2020 08:2… BLAN… FABRICA D…
## # ℹ 200,615 more rows
## # ℹ 14 more variables: Producto <chr>, Precio <dbl>, Ult.Costo <dbl>,
## # Unidades <dbl>, F.Ticket <int>, NombreDepartamento <chr>,
## # NombreFamilia <chr>, NombreCategoria <chr>, Estado <chr>, Mts.2 <int>,
## # Tipo.ubicación <chr>, Giro <chr>, Hora.inicio <chr>, Hora.cierre <chr>
str(df)
## 'data.frame': 200625 obs. of 22 variables:
## $ vcClaveTienda : chr "MX001" "MX001" "MX001" "MX001" ...
## $ DescGiro : chr "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Codigo.Barras : num 7.5e+12 7.5e+12 7.5e+12 7.5e+12 7.5e+12 ...
## $ PLU : int NA NA NA NA NA NA NA NA NA NA ...
## $ Fecha : chr "19/06/2020" "19/06/2020" "19/06/2020" "19/06/2020" ...
## $ Hora : chr "08:16:21" "08:23:33" "08:24:33" "08:24:33" ...
## $ Marca : chr "NUTRI LECHE" "DAN UP" "BIMBO" "PEPSI" ...
## $ Fabricante : chr "MEXILAC" "DANONE DE MEXICO" "GRUPO BIMBO" "PEPSI-COLA MEXICANA" ...
## $ Producto : chr "Nutri Leche 1 Litro" "DANUP STRAWBERRY P/BEBER 350GR NAL" "Rebanadas Bimbo 2Pz" "Pepsi N.R. 400Ml" ...
## $ Precio : num 16 14 5 8 19.5 16 14 5 8 19.5 ...
## $ Ult.Costo : num 12.3 14 5 8 15 ...
## $ Unidades : num 1 1 1 1 1 1 1 1 1 1 ...
## $ F.Ticket : int 1 2 3 3 4 1 2 3 3 4 ...
## $ NombreDepartamento: chr "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ NombreFamilia : chr "Lacteos y Refrigerados" "Lacteos y Refrigerados" "Pan y Tortilla" "Bebidas" ...
## $ NombreCategoria : chr "Leche" "Yogurt" "Pan Dulce Empaquetado" "Refrescos Plástico (N.R.)" ...
## $ Estado : chr "Nuevo León" "Nuevo León" "Nuevo León" "Nuevo León" ...
## $ Mts.2 : int 60 60 60 60 60 60 60 60 60 60 ...
## $ Tipo.ubicación : chr "Esquina" "Esquina" "Esquina" "Esquina" ...
## $ Giro : chr "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Hora.inicio : chr "08:00" "08:00" "08:00" "08:00" ...
## $ Hora.cierre : chr "22:00" "22:00" "22:00" "22:00" ...
# Generar una subtabla de Tienda y Departamento
tabyl(df, Estado, NombreDepartamento)
## Estado Abarrotes Bebes e Infantiles Carnes Farmacia Ferretería Mercería
## Chiapas 4026 15 0 2 8 0
## Jalisco 6590 21 0 4 10 0
## Nuevo León 95415 515 1 147 245 28
## Quintana Roo 10014 0 0 0 0 0
## Sinaloa 82234 932 0 102 114 16
## Papelería Productos a Eliminar Vinos y Licores
## 0 0 0
## 0 0 4
## 35 3 80
## 7 0 0
## 32 5 20
tabyl(df, Estado, Hora.cierre)
## Estado 21:00 22:00 23:00
## Chiapas 0 0 4051
## Jalisco 0 6629 0
## Nuevo León 0 96469 0
## Quintana Roo 10021 0 0
## Sinaloa 0 0 83455
tabyl(df, Estado, Hora.inicio)
## Estado 07:00 08:00 09:00
## Chiapas 4051 0 0
## Jalisco 0 0 6629
## Nuevo León 0 96469 0
## Quintana Roo 0 10021 0
## Sinaloa 83455 0 0
Observaciones:
# Eliminar columnas
df1 <- df
df1 <- subset(df1, select = -c(Codigo.Barras, PLU))
# Eliminar renglones
df2 <- df1
df2 <- df2[df2$Precio > 0, ]
summary(df2$Precio)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.50 11.00 16.00 19.45 25.00 1000.00
# ¿Cuántos renglones duplicados tenemos?
df2[duplicated(df2),]
## vcClaveTienda DescGiro Fecha Hora Marca
## 6 MX001 Abarrotes 19/06/2020 08:16:21 NUTRI LECHE
## 7 MX001 Abarrotes 19/06/2020 08:23:33 DAN UP
## 8 MX001 Abarrotes 19/06/2020 08:24:33 BIMBO
## 9 MX001 Abarrotes 19/06/2020 08:24:33 PEPSI
## 10 MX001 Abarrotes 19/06/2020 08:26:28 BLANCA NIEVES (DETERGENTE)
## Fabricante Producto Precio
## 6 MEXILAC Nutri Leche 1 Litro 16.0
## 7 DANONE DE MEXICO DANUP STRAWBERRY P/BEBER 350GR NAL 14.0
## 8 GRUPO BIMBO Rebanadas Bimbo 2Pz 5.0
## 9 PEPSI-COLA MEXICANA Pepsi N.R. 400Ml 8.0
## 10 FABRICA DE JABON LA CORONA Detergente Blanca Nieves 500G 19.5
## Ult.Costo Unidades F.Ticket NombreDepartamento NombreFamilia
## 6 12.31 1 1 Abarrotes Lacteos y Refrigerados
## 7 14.00 1 2 Abarrotes Lacteos y Refrigerados
## 8 5.00 1 3 Abarrotes Pan y Tortilla
## 9 8.00 1 3 Abarrotes Bebidas
## 10 15.00 1 4 Abarrotes Limpieza del Hogar
## NombreCategoria Estado Mts.2 Tipo.ubicación Giro
## 6 Leche Nuevo León 60 Esquina Abarrotes
## 7 Yogurt Nuevo León 60 Esquina Abarrotes
## 8 Pan Dulce Empaquetado Nuevo León 60 Esquina Abarrotes
## 9 Refrescos Plástico (N.R.) Nuevo León 60 Esquina Abarrotes
## 10 Lavandería Nuevo León 60 Esquina Abarrotes
## Hora.inicio Hora.cierre
## 6 08:00 22:00
## 7 08:00 22:00
## 8 08:00 22:00
## 9 08:00 22:00
## 10 08:00 22:00
sum(duplicated(df2))
## [1] 5
# Eliminar renflones duplicados
df3 <- df2
df3 <- distinct(df3) # Checar que tenga 5 renglones menos que df2
# Precios en absoluto (no se va a utilizar)
df4 <- df1
df4$Precio <- abs(df4$Precio)
summary(df4$Precio)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.50 11.00 16.00 19.45 25.00 1000.00
# Cantidades en (no se va a utilizar)
df5 <- df1
df5$Unidades <- ceiling(df5$Unidades)
summary(df5$Unidades)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 1.000 1.262 1.000 96.000
# Convertir de character a fecha
df6 <- df3
df6$Fecha <- as.Date(df6$Fecha, format = "%d/%m/%Y")
# Convertir de character a hora
df7 <- df6
df7$Hora <- strptime(df7$Hora, format = "%H:%M:%S")
df7$Hora <- format(df7$Hora, "%H")
df7$Hora <- as.integer(df7$Hora)
str(df7)
## 'data.frame': 200473 obs. of 20 variables:
## $ vcClaveTienda : chr "MX001" "MX001" "MX001" "MX001" ...
## $ DescGiro : chr "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Fecha : Date, format: "2020-06-19" "2020-06-19" ...
## $ Hora : int 8 8 8 8 8 8 8 8 8 15 ...
## $ Marca : chr "NUTRI LECHE" "DAN UP" "BIMBO" "PEPSI" ...
## $ Fabricante : chr "MEXILAC" "DANONE DE MEXICO" "GRUPO BIMBO" "PEPSI-COLA MEXICANA" ...
## $ Producto : chr "Nutri Leche 1 Litro" "DANUP STRAWBERRY P/BEBER 350GR NAL" "Rebanadas Bimbo 2Pz" "Pepsi N.R. 400Ml" ...
## $ Precio : num 16 14 5 8 19.5 9.5 11 9.5 23.5 12 ...
## $ Ult.Costo : num 12.3 14 5 8 15 ...
## $ Unidades : num 1 1 1 1 1 1 1 1 1 1 ...
## $ F.Ticket : int 1 2 3 3 4 4 4 4 4 5 ...
## $ NombreDepartamento: chr "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ NombreFamilia : chr "Lacteos y Refrigerados" "Lacteos y Refrigerados" "Pan y Tortilla" "Bebidas" ...
## $ NombreCategoria : chr "Leche" "Yogurt" "Pan Dulce Empaquetado" "Refrescos Plástico (N.R.)" ...
## $ Estado : chr "Nuevo León" "Nuevo León" "Nuevo León" "Nuevo León" ...
## $ Mts.2 : int 60 60 60 60 60 60 60 60 60 60 ...
## $ Tipo.ubicación : chr "Esquina" "Esquina" "Esquina" "Esquina" ...
## $ Giro : chr "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Hora.inicio : chr "08:00" "08:00" "08:00" "08:00" ...
## $ Hora.cierre : chr "22:00" "22:00" "22:00" "22:00" ...
tabyl(df7, Estado, Hora)
## Estado 0 1 2 3 7 8 9 10 11 12 13 14 15 16
## Chiapas 0 0 0 0 0 15 355 456 492 640 546 483 338 105
## Jalisco 0 0 0 0 0 0 102 380 416 434 449 411 526 511
## Nuevo León 3312 518 57 2 0 1532 2782 3460 4241 5059 4857 4599 4801 5755
## Quintana Roo 387 164 1 0 0 0 0 41 85 256 395 543 661 778
## Sinaloa 0 0 0 0 598 2720 3881 4651 5102 5401 5224 5316 4859 3970
## 17 18 19 20 21 22 23
## 88 88 81 186 147 27 4
## 548 515 505 622 721 467 22
## 6350 6455 7369 8649 9722 9296 7501
## 969 757 965 1118 1219 1053 629
## 5111 6208 7158 8317 8783 5837 319
# ¿Cuántos NA tengo en la base de datos?
sum(is.na(df7))
## [1] 0
sum(is.na(df))
## [1] 199188
# ¿Cuántos NA tengo por variable?
sapply(df, function (x) sum(is.na(x)))
## vcClaveTienda DescGiro Codigo.Barras PLU
## 0 0 0 199188
## Fecha Hora Marca Fabricante
## 0 0 0 0
## Producto Precio Ult.Costo Unidades
## 0 0 0 0
## F.Ticket NombreDepartamento NombreFamilia NombreCategoria
## 0 0 0 0
## Estado Mts.2 Tipo.ubicación Giro
## 0 0 0 0
## Hora.inicio Hora.cierre
## 0 0
# Borrar todos los NA
df8 <- df
df8 <- na.omit(df8)
# Reemplazar los NA por CEROS (afecta resultados estadísticos)
df9 <- df
df9[is.na(df9)] <- 0
summary(df9$PLU)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00000 0.00000 0.00000 0.01513 0.00000 30.00000
# Reemplazar los NA con el PROMEDIO (no afecta resultados estadísticos)
df10 <- df
df10$PLU[is.na(df10$PLU)] <- mean(df10$PLU, na.rm = TRUE)
summary(df10$PLU)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 2.112 2.112 2.112 2.112 30.000
df11 <- df7
boxplot(df11$Precio, horizontal = TRUE)
boxplot(df11$Unidades, horizontal = TRUE)
head(df11)
## vcClaveTienda DescGiro Fecha Hora Marca
## 1 MX001 Abarrotes 2020-06-19 8 NUTRI LECHE
## 2 MX001 Abarrotes 2020-06-19 8 DAN UP
## 3 MX001 Abarrotes 2020-06-19 8 BIMBO
## 4 MX001 Abarrotes 2020-06-19 8 PEPSI
## 5 MX001 Abarrotes 2020-06-19 8 BLANCA NIEVES (DETERGENTE)
## 6 MX001 Abarrotes 2020-06-19 8 FLASH
## Fabricante Producto Precio
## 1 MEXILAC Nutri Leche 1 Litro 16.0
## 2 DANONE DE MEXICO DANUP STRAWBERRY P/BEBER 350GR NAL 14.0
## 3 GRUPO BIMBO Rebanadas Bimbo 2Pz 5.0
## 4 PEPSI-COLA MEXICANA Pepsi N.R. 400Ml 8.0
## 5 FABRICA DE JABON LA CORONA Detergente Blanca Nieves 500G 19.5
## 6 ALEN Flash Xtra Brisa Marina 500Ml 9.5
## Ult.Costo Unidades F.Ticket NombreDepartamento NombreFamilia
## 1 12.31 1 1 Abarrotes Lacteos y Refrigerados
## 2 14.00 1 2 Abarrotes Lacteos y Refrigerados
## 3 5.00 1 3 Abarrotes Pan y Tortilla
## 4 8.00 1 3 Abarrotes Bebidas
## 5 15.00 1 4 Abarrotes Limpieza del Hogar
## 6 7.31 1 4 Abarrotes Limpieza del Hogar
## NombreCategoria Estado Mts.2 Tipo.ubicación Giro
## 1 Leche Nuevo León 60 Esquina Abarrotes
## 2 Yogurt Nuevo León 60 Esquina Abarrotes
## 3 Pan Dulce Empaquetado Nuevo León 60 Esquina Abarrotes
## 4 Refrescos Plástico (N.R.) Nuevo León 60 Esquina Abarrotes
## 5 Lavandería Nuevo León 60 Esquina Abarrotes
## 6 Limpiadores Líquidos Nuevo León 60 Esquina Abarrotes
## Hora.inicio Hora.cierre
## 1 08:00 22:00
## 2 08:00 22:00
## 3 08:00 22:00
## 4 08:00 22:00
## 5 08:00 22:00
## 6 08:00 22:00
df11$Dia_de_la_Semana <- wday(df11$Fecha)
summary(df11)
## vcClaveTienda DescGiro Fecha Hora
## Length:200473 Length:200473 Min. :2020-05-01 Min. : 0.00
## Class :character Class :character 1st Qu.:2020-06-06 1st Qu.:13.00
## Mode :character Mode :character Median :2020-07-11 Median :17.00
## Mean :2020-07-18 Mean :16.23
## 3rd Qu.:2020-08-29 3rd Qu.:20.00
## Max. :2020-11-11 Max. :23.00
## Marca Fabricante Producto Precio
## Length:200473 Length:200473 Length:200473 Min. : 0.50
## Class :character Class :character Class :character 1st Qu.: 11.00
## Mode :character Mode :character Mode :character Median : 16.00
## Mean : 19.45
## 3rd Qu.: 25.00
## Max. :1000.00
## Ult.Costo Unidades F.Ticket NombreDepartamento
## Min. : 0.38 Min. : 0.200 Min. : 1 Length:200473
## 1st Qu.: 8.46 1st Qu.: 1.000 1st Qu.: 33978 Class :character
## Median : 12.31 Median : 1.000 Median :106035 Mode :character
## Mean : 15.31 Mean : 1.261 Mean :194101
## 3rd Qu.: 19.23 3rd Qu.: 1.000 3rd Qu.:383065
## Max. :769.23 Max. :96.000 Max. :450040
## NombreFamilia NombreCategoria Estado Mts.2
## Length:200473 Length:200473 Length:200473 Min. :47.0
## Class :character Class :character Class :character 1st Qu.:53.0
## Mode :character Mode :character Mode :character Median :60.0
## Mean :56.6
## 3rd Qu.:60.0
## Max. :62.0
## Tipo.ubicación Giro Hora.inicio Hora.cierre
## Length:200473 Length:200473 Length:200473 Length:200473
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Dia_de_la_Semana
## Min. :1.000
## 1st Qu.:2.000
## Median :4.000
## Mean :3.911
## 3rd Qu.:6.000
## Max. :7.000
df11$Subtotal <- df11$Precio * df11$Unidades
summary(df11)
## vcClaveTienda DescGiro Fecha Hora
## Length:200473 Length:200473 Min. :2020-05-01 Min. : 0.00
## Class :character Class :character 1st Qu.:2020-06-06 1st Qu.:13.00
## Mode :character Mode :character Median :2020-07-11 Median :17.00
## Mean :2020-07-18 Mean :16.23
## 3rd Qu.:2020-08-29 3rd Qu.:20.00
## Max. :2020-11-11 Max. :23.00
## Marca Fabricante Producto Precio
## Length:200473 Length:200473 Length:200473 Min. : 0.50
## Class :character Class :character Class :character 1st Qu.: 11.00
## Mode :character Mode :character Mode :character Median : 16.00
## Mean : 19.45
## 3rd Qu.: 25.00
## Max. :1000.00
## Ult.Costo Unidades F.Ticket NombreDepartamento
## Min. : 0.38 Min. : 0.200 Min. : 1 Length:200473
## 1st Qu.: 8.46 1st Qu.: 1.000 1st Qu.: 33978 Class :character
## Median : 12.31 Median : 1.000 Median :106035 Mode :character
## Mean : 15.31 Mean : 1.261 Mean :194101
## 3rd Qu.: 19.23 3rd Qu.: 1.000 3rd Qu.:383065
## Max. :769.23 Max. :96.000 Max. :450040
## NombreFamilia NombreCategoria Estado Mts.2
## Length:200473 Length:200473 Length:200473 Min. :47.0
## Class :character Class :character Class :character 1st Qu.:53.0
## Mode :character Mode :character Mode :character Median :60.0
## Mean :56.6
## 3rd Qu.:60.0
## Max. :62.0
## Tipo.ubicación Giro Hora.inicio Hora.cierre
## Length:200473 Length:200473 Length:200473 Length:200473
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Dia_de_la_Semana Subtotal
## Min. :1.000 Min. : 1.0
## 1st Qu.:2.000 1st Qu.: 12.0
## Median :4.000 Median : 18.0
## Mean :3.911 Mean : 24.3
## 3rd Qu.:6.000 3rd Qu.: 27.0
## Max. :7.000 Max. :2496.0
df11$Utilidad <- df11$Precio * df11$Ult.Costo
summary(df11)
## vcClaveTienda DescGiro Fecha Hora
## Length:200473 Length:200473 Min. :2020-05-01 Min. : 0.00
## Class :character Class :character 1st Qu.:2020-06-06 1st Qu.:13.00
## Mode :character Mode :character Median :2020-07-11 Median :17.00
## Mean :2020-07-18 Mean :16.23
## 3rd Qu.:2020-08-29 3rd Qu.:20.00
## Max. :2020-11-11 Max. :23.00
## Marca Fabricante Producto Precio
## Length:200473 Length:200473 Length:200473 Min. : 0.50
## Class :character Class :character Class :character 1st Qu.: 11.00
## Mode :character Mode :character Mode :character Median : 16.00
## Mean : 19.45
## 3rd Qu.: 25.00
## Max. :1000.00
## Ult.Costo Unidades F.Ticket NombreDepartamento
## Min. : 0.38 Min. : 0.200 Min. : 1 Length:200473
## 1st Qu.: 8.46 1st Qu.: 1.000 1st Qu.: 33978 Class :character
## Median : 12.31 Median : 1.000 Median :106035 Mode :character
## Mean : 15.31 Mean : 1.261 Mean :194101
## 3rd Qu.: 19.23 3rd Qu.: 1.000 3rd Qu.:383065
## Max. :769.23 Max. :96.000 Max. :450040
## NombreFamilia NombreCategoria Estado Mts.2
## Length:200473 Length:200473 Length:200473 Min. :47.0
## Class :character Class :character Class :character 1st Qu.:53.0
## Mode :character Mode :character Mode :character Median :60.0
## Mean :56.6
## 3rd Qu.:60.0
## Max. :62.0
## Tipo.ubicación Giro Hora.inicio Hora.cierre
## Length:200473 Length:200473 Length:200473 Length:200473
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Dia_de_la_Semana Subtotal Utilidad
## Min. :1.000 Min. : 1.0 Min. : 0.2
## 1st Qu.:2.000 1st Qu.: 12.0 1st Qu.: 93.1
## Median :4.000 Median : 18.0 Median : 197.0
## Mean :3.911 Mean : 24.3 Mean : 459.6
## 3rd Qu.:6.000 3rd Qu.: 27.0 3rd Qu.: 480.8
## Max. :7.000 Max. :2496.0 Max. :769230.0
bd_limpia <- df11
write.csv(bd_limpia, file = "abarrotes_bd_limpia.csv", row.names = FALSE)
El análisis llevado a cabo en este proyecto ha revelado conclusiones clave sobre el conjunto de datos de abarrotes. Durante este proceso, se identificaron varios problemas, como valores nulos, duplicados y formatos incorrectos en fechas y horas, así como valores negativos en los precios. Mediante diversas técnicas de limpieza de datos, como la eliminación de registros irrelevantes y la corrección de errores tipográficos, se logró preparar una base de datos más coherente y confiable. Además, se llevó a cabo un análisis visual de los datos** y se agregaron nuevas columnas para enriquecer la información. Por último, la exportación de la base de datos limpia garantiza su utilidad para futuros análisis. Este proceso demuestra la importancia de la limpieza y preparación adecuada de los datos para obtener resultados precisos en cualquier proyecto de análisis.