library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.3 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ 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
library(readr)
library(dplyr)
library(janitor)
##
## Attaching package: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
df <- read_csv("abarrotes.csv")
## Rows: 200625 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (12): vcClaveTienda, DescGiro, Fecha, Marca, Fabricante, Producto, Nomb...
## dbl (7): Codigo Barras, PLU, Precio, Ult.Costo, Unidades, F.Ticket, Mts 2
## time (3): Hora, Hora inicio, Hora cierre
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Para explorar variables de texto
resumen <- summary(df)
resumen
## 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 Class1:hms Class :character Class :character
## Mode :character Class2:difftime Mode :character Mode :character
## Mode :numeric
##
##
##
## 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
## Class1:hms Class1:hms
## Class2:difftime Class2:difftime
## Mode :numeric Mode :numeric
##
##
##
tibble(df)
## # A tibble: 200,625 × 22
## vcClaveTienda DescGiro `Codigo Barras` PLU Fecha Hora Marca Fabricante
## <chr> <chr> <dbl> <dbl> <chr> <time> <chr> <chr>
## 1 MX001 Abarrotes 7501020540666 NA 19/0… 08:16:21 NUTR… MEXILAC
## 2 MX001 Abarrotes 7501032397906 NA 19/0… 08:23:33 DAN … DANONE DE…
## 3 MX001 Abarrotes 7501000112845 NA 19/0… 08:24:33 BIMBO GRUPO BIM…
## 4 MX001 Abarrotes 7501031302741 NA 19/0… 08:24:33 PEPSI PEPSI-COL…
## 5 MX001 Abarrotes 7501026027543 NA 19/0… 08:26:28 BLAN… FABRICA D…
## 6 MX001 Abarrotes 7501020540666 NA 19/0… 08:16:21 NUTR… MEXILAC
## 7 MX001 Abarrotes 7501032397906 NA 19/0… 08:23:33 DAN … DANONE DE…
## 8 MX001 Abarrotes 7501000112845 NA 19/0… 08:24:33 BIMBO GRUPO BIM…
## 9 MX001 Abarrotes 7501031302741 NA 19/0… 08:24:33 PEPSI PEPSI-COL…
## 10 MX001 Abarrotes 7501026027543 NA 19/0… 08:26:28 BLAN… FABRICA D…
## # ℹ 200,615 more rows
## # ℹ 14 more variables: Producto <chr>, Precio <dbl>, Ult.Costo <dbl>,
## # Unidades <dbl>, F.Ticket <dbl>, NombreDepartamento <chr>,
## # NombreFamilia <chr>, NombreCategoria <chr>, Estado <chr>, `Mts 2` <dbl>,
## # `Tipo ubicación` <chr>, Giro <chr>, `Hora inicio` <time>,
## # `Hora cierre` <time>
str(df)
## spc_tbl_ [200,625 × 22] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ vcClaveTienda : chr [1:200625] "MX001" "MX001" "MX001" "MX001" ...
## $ DescGiro : chr [1:200625] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Codigo Barras : num [1:200625] 7.5e+12 7.5e+12 7.5e+12 7.5e+12 7.5e+12 ...
## $ PLU : num [1:200625] NA NA NA NA NA NA NA NA NA NA ...
## $ Fecha : chr [1:200625] "19/06/2020" "19/06/2020" "19/06/2020" "19/06/2020" ...
## $ Hora : 'hms' num [1:200625] 08:16:21 08:23:33 08:24:33 08:24:33 ...
## ..- attr(*, "units")= chr "secs"
## $ Marca : chr [1:200625] "NUTRI LECHE" "DAN UP" "BIMBO" "PEPSI" ...
## $ Fabricante : chr [1:200625] "MEXILAC" "DANONE DE MEXICO" "GRUPO BIMBO" "PEPSI-COLA MEXICANA" ...
## $ Producto : chr [1:200625] "Nutri Leche 1 Litro" "DANUP STRAWBERRY P/BEBER 350GR NAL" "Rebanadas Bimbo 2Pz" "Pepsi N.R. 400Ml" ...
## $ Precio : num [1:200625] 16 14 5 8 19.5 16 14 5 8 19.5 ...
## $ Ult.Costo : num [1:200625] 12.3 14 5 8 15 ...
## $ Unidades : num [1:200625] 1 1 1 1 1 1 1 1 1 1 ...
## $ F.Ticket : num [1:200625] 1 2 3 3 4 1 2 3 3 4 ...
## $ NombreDepartamento: chr [1:200625] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ NombreFamilia : chr [1:200625] "Lacteos y Refrigerados" "Lacteos y Refrigerados" "Pan y Tortilla" "Bebidas" ...
## $ NombreCategoria : chr [1:200625] "Leche" "Yogurt" "Pan Dulce Empaquetado" "Refrescos Plástico (N.R.)" ...
## $ Estado : chr [1:200625] "Nuevo León" "Nuevo León" "Nuevo León" "Nuevo León" ...
## $ Mts 2 : num [1:200625] 60 60 60 60 60 60 60 60 60 60 ...
## $ Tipo ubicación : chr [1:200625] "Esquina" "Esquina" "Esquina" "Esquina" ...
## $ Giro : chr [1:200625] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Hora inicio : 'hms' num [1:200625] 08:00:00 08:00:00 08:00:00 08:00:00 ...
## ..- attr(*, "units")= chr "secs"
## $ Hora cierre : 'hms' num [1:200625] 22:00:00 22:00:00 22:00:00 22:00:00 ...
## ..- attr(*, "units")= chr "secs"
## - attr(*, "spec")=
## .. cols(
## .. vcClaveTienda = col_character(),
## .. DescGiro = col_character(),
## .. `Codigo Barras` = col_double(),
## .. PLU = col_double(),
## .. Fecha = col_character(),
## .. Hora = col_time(format = ""),
## .. Marca = col_character(),
## .. Fabricante = col_character(),
## .. Producto = col_character(),
## .. Precio = col_double(),
## .. Ult.Costo = col_double(),
## .. Unidades = col_double(),
## .. F.Ticket = col_double(),
## .. NombreDepartamento = col_character(),
## .. NombreFamilia = col_character(),
## .. NombreCategoria = col_character(),
## .. Estado = col_character(),
## .. `Mts 2` = col_double(),
## .. `Tipo ubicación` = col_character(),
## .. Giro = col_character(),
## .. `Hora inicio` = col_time(format = ""),
## .. `Hora cierre` = col_time(format = "")
## .. )
## - attr(*, "problems")=<externalptr>
head(df, n=7)
## # A tibble: 7 × 22
## vcClaveTienda DescGiro `Codigo Barras` PLU Fecha Hora Marca Fabricante
## <chr> <chr> <dbl> <dbl> <chr> <time> <chr> <chr>
## 1 MX001 Abarrotes 7501020540666 NA 19/06… 08:16:21 NUTR… MEXILAC
## 2 MX001 Abarrotes 7501032397906 NA 19/06… 08:23:33 DAN … DANONE DE…
## 3 MX001 Abarrotes 7501000112845 NA 19/06… 08:24:33 BIMBO GRUPO BIM…
## 4 MX001 Abarrotes 7501031302741 NA 19/06… 08:24:33 PEPSI PEPSI-COL…
## 5 MX001 Abarrotes 7501026027543 NA 19/06… 08:26:28 BLAN… FABRICA D…
## 6 MX001 Abarrotes 7501020540666 NA 19/06… 08:16:21 NUTR… MEXILAC
## 7 MX001 Abarrotes 7501032397906 NA 19/06… 08:23:33 DAN … DANONE DE…
## # ℹ 14 more variables: Producto <chr>, Precio <dbl>, Ult.Costo <dbl>,
## # Unidades <dbl>, F.Ticket <dbl>, NombreDepartamento <chr>,
## # NombreFamilia <chr>, NombreCategoria <chr>, Estado <chr>, `Mts 2` <dbl>,
## # `Tipo ubicación` <chr>, Giro <chr>, `Hora inicio` <time>,
## # `Hora cierre` <time>
tail(df)
## # A tibble: 6 × 22
## vcClaveTienda DescGiro `Codigo Barras` PLU Fecha Hora Marca Fabricante
## <chr> <chr> <dbl> <dbl> <chr> <time> <chr> <chr>
## 1 MX005 Depósito 7622210464811 NA 12/07/… 01:08:25 TRID… CADBURY A…
## 2 MX005 Depósito 7622210464811 NA 23/10/… 22:17:37 TRID… CADBURY A…
## 3 MX005 Depósito 7622210464811 NA 10/10/… 20:30:20 TRID… CADBURY A…
## 4 MX005 Depósito 7622210464811 NA 10/10/… 22:40:43 TRID… CADBURY A…
## 5 MX005 Depósito 7622210464811 NA 27/06/… 22:30:19 TRID… CADBURY A…
## 6 MX005 Depósito 7622210464811 NA 26/06/… 23:43:34 TRID… CADBURY A…
## # ℹ 14 more variables: Producto <chr>, Precio <dbl>, Ult.Costo <dbl>,
## # Unidades <dbl>, F.Ticket <dbl>, NombreDepartamento <chr>,
## # NombreFamilia <chr>, NombreCategoria <chr>, Estado <chr>, `Mts 2` <dbl>,
## # `Tipo ubicación` <chr>, Giro <chr>, `Hora inicio` <time>,
## # `Hora cierre` <time>
# Para explorar variables de texto
count(df, vcClaveTienda, sort = TRUE)
## # A tibble: 5 × 2
## vcClaveTienda n
## <chr> <int>
## 1 MX001 96469
## 2 MX004 83455
## 3 MX005 10021
## 4 MX002 6629
## 5 MX003 4051
count(df, DescGiro, sort = TRUE)
## # A tibble: 3 × 2
## DescGiro n
## <chr> <int>
## 1 Abarrotes 100520
## 2 Carnicería 83455
## 3 Depósito 16650
#count(df, Fecha, sort = TRUE)
#count(df, Hora, sort = TRUE)
#count(df, Marca, sort = TRUE)
#count(df, Fabricante, sort = TRUE)
#count(df, Producto, sort = TRUE)
count(df, Giro, sort = TRUE)
## # A tibble: 2 × 2
## Giro n
## <chr> <int>
## 1 Abarrotes 183975
## 2 Mini súper 16650
count(df, NombreDepartamento, sort = TRUE)
## # A tibble: 9 × 2
## NombreDepartamento n
## <chr> <int>
## 1 Abarrotes 198279
## 2 Bebes e Infantiles 1483
## 3 Ferretería 377
## 4 Farmacia 255
## 5 Vinos y Licores 104
## 6 Papelería 74
## 7 Mercería 44
## 8 Productos a Eliminar 8
## 9 Carnes 1
#count(df, NombreFamilia, sort = TRUE)
#count(df, NombreCategoria, sort = TRUE)
count(df, Estado, sort = TRUE)
## # A tibble: 5 × 2
## Estado n
## <chr> <int>
## 1 Nuevo León 96469
## 2 Sinaloa 83455
## 3 Quintana Roo 10021
## 4 Jalisco 6629
## 5 Chiapas 4051
count(df, Precio, sort = TRUE)
## # A tibble: 206 × 2
## Precio n
## <dbl> <int>
## 1 10 14782
## 2 18 13436
## 3 12 12749
## 4 13 12433
## 5 15 8898
## 6 5 8303
## 7 8 8263
## 8 27 7937
## 9 14 7339
## 10 22 7078
## # ℹ 196 more rows
#count(df, Hora.inicio, sort=TRUE)
#count(df, Hora.cierre, sort=TRUE)
#count(df, Tipo.Ubicación, sort=TRUE)
#count(df, Codigo.Barras, sort=TRUE)
# Generar subtabla de tienda y departamento
tabyl(df, vcClaveTienda, NombreDepartamento)
## vcClaveTienda Abarrotes Bebes e Infantiles Carnes Farmacia Ferretería Mercería
## MX001 95415 515 1 147 245 28
## MX002 6590 21 0 4 10 0
## MX003 4026 15 0 2 8 0
## MX004 82234 932 0 102 114 16
## MX005 10014 0 0 0 0 0
## Papelería Productos a Eliminar Vinos y Licores
## 35 3 80
## 0 0 4
## 0 0 0
## 32 5 20
## 7 0 0
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)
#tabyl(df, Estado, Hora inicio)
# Tienda 1 es Nuevo León, abre a las 8 y cierra a las 22
# Tienda 2 es Jalisco, abre a las 9 y cierra a las 22
# Tienda 3 es Chiapas, abre a las 7 y cierra a las 23
# Tienda 4 es Sinaloa, abre a las 7 y cierra a las 23
# Tienda 5 es Quintana Roo, abre a las 8 y cierra a las 21
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),]
## # A tibble: 5 × 22
## vcClaveTienda DescGiro `Codigo Barras` PLU Fecha Hora Marca Fabricante
## <chr> <chr> <dbl> <dbl> <chr> <time> <chr> <chr>
## 1 MX001 Abarrotes 7501020540666 NA 19/06… 08:16:21 NUTR… MEXILAC
## 2 MX001 Abarrotes 7501032397906 NA 19/06… 08:23:33 DAN … DANONE DE…
## 3 MX001 Abarrotes 7501000112845 NA 19/06… 08:24:33 BIMBO GRUPO BIM…
## 4 MX001 Abarrotes 7501031302741 NA 19/06… 08:24:33 PEPSI PEPSI-COL…
## 5 MX001 Abarrotes 7501026027543 NA 19/06… 08:26:28 BLAN… FABRICA D…
## # ℹ 14 more variables: Producto <chr>, Precio <dbl>, Ult.Costo <dbl>,
## # Unidades <dbl>, F.Ticket <dbl>, NombreDepartamento <chr>,
## # NombreFamilia <chr>, NombreCategoria <chr>, Estado <chr>, `Mts 2` <dbl>,
## # `Tipo ubicación` <chr>, Giro <chr>, `Hora inicio` <time>,
## # `Hora cierre` <time>
sum(duplicated(df2))
## [1] 5
# Eliminar renglones duplicados
df3 <- df2
df3 <- distinct(df3)
# Precios en absoluto
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
# No se va a utilizar en este ejercicio
# Cantidades en enteros
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
# No se va a utilizar en este ejercicio
# Convertir de Caracter a fecha
df6 <- df3
df6$Fecha <- as.Date(df6$Fecha, format = "%d/%m/%Y")
str(df6)
## tibble [200,473 × 22] (S3: tbl_df/tbl/data.frame)
## $ vcClaveTienda : chr [1:200473] "MX001" "MX001" "MX001" "MX001" ...
## $ DescGiro : chr [1:200473] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Codigo Barras : num [1:200473] 7.5e+12 7.5e+12 7.5e+12 7.5e+12 7.5e+12 ...
## $ PLU : num [1:200473] NA NA NA NA NA NA NA NA NA NA ...
## $ Fecha : Date[1:200473], format: "2020-06-19" "2020-06-19" ...
## $ Hora : 'hms' num [1:200473] 08:16:21 08:23:33 08:24:33 08:24:33 ...
## ..- attr(*, "units")= chr "secs"
## $ Marca : chr [1:200473] "NUTRI LECHE" "DAN UP" "BIMBO" "PEPSI" ...
## $ Fabricante : chr [1:200473] "MEXILAC" "DANONE DE MEXICO" "GRUPO BIMBO" "PEPSI-COLA MEXICANA" ...
## $ Producto : chr [1:200473] "Nutri Leche 1 Litro" "DANUP STRAWBERRY P/BEBER 350GR NAL" "Rebanadas Bimbo 2Pz" "Pepsi N.R. 400Ml" ...
## $ Precio : num [1:200473] 16 14 5 8 19.5 9.5 11 9.5 23.5 12 ...
## $ Ult.Costo : num [1:200473] 12.3 14 5 8 15 ...
## $ Unidades : num [1:200473] 1 1 1 1 1 1 1 1 1 1 ...
## $ F.Ticket : num [1:200473] 1 2 3 3 4 4 4 4 4 5 ...
## $ NombreDepartamento: chr [1:200473] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ NombreFamilia : chr [1:200473] "Lacteos y Refrigerados" "Lacteos y Refrigerados" "Pan y Tortilla" "Bebidas" ...
## $ NombreCategoria : chr [1:200473] "Leche" "Yogurt" "Pan Dulce Empaquetado" "Refrescos Plástico (N.R.)" ...
## $ Estado : chr [1:200473] "Nuevo León" "Nuevo León" "Nuevo León" "Nuevo León" ...
## $ Mts 2 : num [1:200473] 60 60 60 60 60 60 60 60 60 60 ...
## $ Tipo ubicación : chr [1:200473] "Esquina" "Esquina" "Esquina" "Esquina" ...
## $ Giro : chr [1:200473] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Hora inicio : 'hms' num [1:200473] 08:00:00 08:00:00 08:00:00 08:00:00 ...
## ..- attr(*, "units")= chr "secs"
## $ Hora cierre : 'hms' num [1:200473] 22:00:00 22:00:00 22:00:00 22:00:00 ...
## ..- attr(*, "units")= chr "secs"
# Convertir de caracter a hora
df7 <- df6
df7$Hora <- as.POSIXct(df7$Hora, format = "%H:%M:%S")
df7$Hora <- format(df7$Hora, "%H")
df7$Hora <- as.integer(df7$Hora)
str(df7)
## tibble [200,473 × 22] (S3: tbl_df/tbl/data.frame)
## $ vcClaveTienda : chr [1:200473] "MX001" "MX001" "MX001" "MX001" ...
## $ DescGiro : chr [1:200473] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Codigo Barras : num [1:200473] 7.5e+12 7.5e+12 7.5e+12 7.5e+12 7.5e+12 ...
## $ PLU : num [1:200473] NA NA NA NA NA NA NA NA NA NA ...
## $ Fecha : Date[1:200473], format: "2020-06-19" "2020-06-19" ...
## $ Hora : int [1:200473] 8 8 8 8 8 8 8 8 8 15 ...
## $ Marca : chr [1:200473] "NUTRI LECHE" "DAN UP" "BIMBO" "PEPSI" ...
## $ Fabricante : chr [1:200473] "MEXILAC" "DANONE DE MEXICO" "GRUPO BIMBO" "PEPSI-COLA MEXICANA" ...
## $ Producto : chr [1:200473] "Nutri Leche 1 Litro" "DANUP STRAWBERRY P/BEBER 350GR NAL" "Rebanadas Bimbo 2Pz" "Pepsi N.R. 400Ml" ...
## $ Precio : num [1:200473] 16 14 5 8 19.5 9.5 11 9.5 23.5 12 ...
## $ Ult.Costo : num [1:200473] 12.3 14 5 8 15 ...
## $ Unidades : num [1:200473] 1 1 1 1 1 1 1 1 1 1 ...
## $ F.Ticket : num [1:200473] 1 2 3 3 4 4 4 4 4 5 ...
## $ NombreDepartamento: chr [1:200473] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ NombreFamilia : chr [1:200473] "Lacteos y Refrigerados" "Lacteos y Refrigerados" "Pan y Tortilla" "Bebidas" ...
## $ NombreCategoria : chr [1:200473] "Leche" "Yogurt" "Pan Dulce Empaquetado" "Refrescos Plástico (N.R.)" ...
## $ Estado : chr [1:200473] "Nuevo León" "Nuevo León" "Nuevo León" "Nuevo León" ...
## $ Mts 2 : num [1:200473] 60 60 60 60 60 60 60 60 60 60 ...
## $ Tipo ubicación : chr [1:200473] "Esquina" "Esquina" "Esquina" "Esquina" ...
## $ Giro : chr [1:200473] "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
## $ Hora inicio : 'hms' num [1:200473] 08:00:00 08:00:00 08:00:00 08:00:00 ...
## ..- attr(*, "units")= chr "secs"
## $ Hora cierre : 'hms' num [1:200473] 22:00:00 22:00:00 22:00:00 22:00:00 ...
## ..- attr(*, "units")= chr "secs"
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] 199036
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 registros con NA de la tabla
df8 <- df
df8 <- na.omit(df8)
# Reemplazar NA con CEROS
df9 <- df
df9[is.na(df)] <- 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 PROMEDIO
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)
# <span style="color: red;">Agregar columnas</span>
df11$Dia_de_la_Semana <- wday(df11$Fecha)
summary(df11)
## vcClaveTienda DescGiro Codigo Barras PLU
## Length:200473 Length:200473 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 :199036
## Fecha Hora Marca Fabricante
## Min. :2020-05-01 Min. : 0.00 Length:200473 Length:200473
## 1st Qu.:2020-06-06 1st Qu.:13.00 Class :character Class :character
## Median :2020-07-11 Median :17.00 Mode :character Mode :character
## Mean :2020-07-18 Mean :16.23
## 3rd Qu.:2020-08-29 3rd Qu.:20.00
## Max. :2020-11-11 Max. :23.00
##
## Producto Precio Ult.Costo Unidades
## Length:200473 Min. : 0.50 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.45 Mean : 15.31 Mean : 1.261
## 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:200473 Length:200473 Length:200473
## 1st Qu.: 33978 Class :character Class :character Class :character
## Median :106035 Mode :character Mode :character Mode :character
## Mean :194101
## 3rd Qu.:383065
## Max. :450040
##
## Estado Mts 2 Tipo ubicación Giro
## Length:200473 Min. :47.0 Length:200473 Length:200473
## 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 Dia_de_la_Semana
## Length:200473 Length:200473 Min. :1.000
## Class1:hms Class1:hms 1st Qu.:2.000
## Class2:difftime Class2:difftime Median :4.000
## Mode :numeric Mode :numeric Mean :3.911
## 3rd Qu.:6.000
## Max. :7.000
##
df11$Subtotal <- df11$Precio * df11$Unidades
summary(df11)
## vcClaveTienda DescGiro Codigo Barras PLU
## Length:200473 Length:200473 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 :199036
## Fecha Hora Marca Fabricante
## Min. :2020-05-01 Min. : 0.00 Length:200473 Length:200473
## 1st Qu.:2020-06-06 1st Qu.:13.00 Class :character Class :character
## Median :2020-07-11 Median :17.00 Mode :character Mode :character
## Mean :2020-07-18 Mean :16.23
## 3rd Qu.:2020-08-29 3rd Qu.:20.00
## Max. :2020-11-11 Max. :23.00
##
## Producto Precio Ult.Costo Unidades
## Length:200473 Min. : 0.50 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.45 Mean : 15.31 Mean : 1.261
## 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:200473 Length:200473 Length:200473
## 1st Qu.: 33978 Class :character Class :character Class :character
## Median :106035 Mode :character Mode :character Mode :character
## Mean :194101
## 3rd Qu.:383065
## Max. :450040
##
## Estado Mts 2 Tipo ubicación Giro
## Length:200473 Min. :47.0 Length:200473 Length:200473
## 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 Dia_de_la_Semana Subtotal
## Length:200473 Length:200473 Min. :1.000 Min. : 1.0
## Class1:hms Class1:hms 1st Qu.:2.000 1st Qu.: 12.0
## Class2:difftime Class2:difftime Median :4.000 Median : 18.0
## Mode :numeric Mode :numeric 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 Codigo Barras PLU
## Length:200473 Length:200473 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 :199036
## Fecha Hora Marca Fabricante
## Min. :2020-05-01 Min. : 0.00 Length:200473 Length:200473
## 1st Qu.:2020-06-06 1st Qu.:13.00 Class :character Class :character
## Median :2020-07-11 Median :17.00 Mode :character Mode :character
## Mean :2020-07-18 Mean :16.23
## 3rd Qu.:2020-08-29 3rd Qu.:20.00
## Max. :2020-11-11 Max. :23.00
##
## Producto Precio Ult.Costo Unidades
## Length:200473 Min. : 0.50 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.45 Mean : 15.31 Mean : 1.261
## 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:200473 Length:200473 Length:200473
## 1st Qu.: 33978 Class :character Class :character Class :character
## Median :106035 Mode :character Mode :character Mode :character
## Mean :194101
## 3rd Qu.:383065
## Max. :450040
##
## Estado Mts 2 Tipo ubicación Giro
## Length:200473 Min. :47.0 Length:200473 Length:200473
## 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 Dia_de_la_Semana Subtotal
## Length:200473 Length:200473 Min. :1.000 Min. : 1.0
## Class1:hms Class1:hms 1st Qu.:2.000 1st Qu.: 12.0
## Class2:difftime Class2:difftime Median :4.000 Median : 18.0
## Mode :numeric Mode :numeric Mean :3.911 Mean : 24.3
## 3rd Qu.:6.000 3rd Qu.: 27.0
## Max. :7.000 Max. :2496.0
##
## Utilidad
## Min. : 0.000
## 1st Qu.: 2.310
## Median : 3.230
## Mean : 4.141
## 3rd Qu.: 5.420
## Max. :230.770
##
bd_limpia <- df11
write.csv(bd_limpia, file="abarrotes_bd_limpia.csv", row.names = FALSE)
2 Se realizó un análisis exhaustivo de la base de datos de abarrotes proporcionada, incluyendo limpieza, transfromación y generación de nuevas variables. Se exploró la base de datos para identificar variables con NA, valores negativos, formatos incorrectos y otras inconsistencias. Finalmente se encontraron patrones y tendencias en ventas, precios, productos y clientes.