Cambios a la base de datos

A la base de datos se le hicieron los siguientes cambios:

1. Se cambió el formato a fecha corta.

2. Se duplicaron los primeros 5 registros.

3. Se cambió le formato a hora (español México).

4. Se cambió el formato a código de barras (para que salga completo).

5. Se guardó como CSV UTF 8 (Delimitado por comas).

Cargar librerias

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching packages
## ───────────────────────────────────────
## tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.8     ✔ stringr 1.4.1
## ✔ tidyr   1.2.0     ✔ forcats 0.5.2
## ✔ readr   2.1.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(tidyr)
library(lubridate)
## 
## Attaching package: 'lubridate'
## 
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Importar base de datos

bd<-read.csv("C:\\Users\\jimen\\Downloads\\Abarrotes_Ventas-4 (1).csv")
colnames(bd)
##  [1] "vcClaveTienda"      "DescGiro"           "Codigo.Barras"     
##  [4] "PLU"                "Fecha"              "Hora"              
##  [7] "Marca"              "Fabricante"         "Producto"          
## [10] "Precio"             "Ult.Costo"          "Unidades"          
## [13] "F.Ticket"           "NombreDepartamento" "NombreFamilia"     
## [16] "NombreCategoria"    "Estado"             "Mts.2"             
## [19] "Tipo.ubicación"     "Giro"               "Hora.inicio"       
## [22] "Hora.cierre"

Entender base de datos

#summary(bd)
#count(bd, ï..vcClaveTienda, sort=TRUE)
#count(bd,DescGiro, sort=TRUE)
#count(bd,Marca, sort=TRUE)
#count(bd,Fabricante, sort=TRUE)
#count(bd,Producto, sort=TRUE)
#count(bd,NombreDepartamento, sort=TRUE)
#count(bd,NombreFamilia, sort=TRUE)
#count(bd,NombreCategoria, sort=TRUE)
#count(bd,Estado, sort=TRUE)
#count(bd,Mts.2, sort=TRUE)
#count(bd, Tipo.ubicación, sort=TRUE)
#count(bd,Giro, sort=TRUE)
#count(bd,Hora.inicio, sort=TRUE)
#count(bd,Hora.cierre, sort=TRUE)

Observaciones

1. Casi ningun registro cuenta con PLU.
2. El formato de fecha ya sale con el cambio previo.
3. El formato de hora ya sale con el cambio previo.
4. Hay precios negativos.
5. Hay unidades menores a 1.

Tidyverse

tibble(bd)
## # A tibble: 200,620 × 22
##    vcClaveTienda DescGiro Codig…¹   PLU Fecha Hora  Marca Fabri…² Produ…³ Precio
##    <chr>         <chr>      <dbl> <int> <chr> <chr> <chr> <chr>   <chr>    <dbl>
##  1 MX001         Abarrot… 7.50e12    NA 19/0… 8:16… NUTR… MEXILAC Nutri …   16  
##  2 MX001         Abarrot… 7.50e12    NA 19/0… 8:23… DAN … DANONE… DANUP …   14  
##  3 MX001         Abarrot… 7.50e12    NA 19/0… 8:24… BIMBO GRUPO … Rebana…    5  
##  4 MX001         Abarrot… 7.50e12    NA 19/0… 8:24… PEPSI PEPSI-… Pepsi …    8  
##  5 MX001         Abarrot… 7.50e12    NA 19/0… 8:26… BLAN… FABRIC… Deterg…   19.5
##  6 MX001         Abarrot… 7.50e12    NA 19/0… 8:26… FLASH ALEN    Flash …    9.5
##  7 MX001         Abarrot… 7.50e12    NA 19/0… 8:26… VARI… DANONE… Danone…   11  
##  8 MX001         Abarrot… 7.50e12    NA 19/0… 8:26… ZOTE  FABRIC… Jabon …    9.5
##  9 MX001         Abarrot… 7.51e12    NA 19/0… 8:26… ALWA… PROCTE… T Feme…   23.5
## 10 MX001         Abarrot… 3.22e10    NA 19/0… 15:2… JUMEX JUMEX   Jugo D…   12  
## # … with 200,610 more rows, 12 more variables: 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>, and abbreviated variable
## #   names ¹​Codigo.Barras, ²​Fabricante, ³​Producto
str(bd)
## 'data.frame':    200620 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  "8:16:21" "8:23:33" "8:24:33" "8: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 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  "8:00" "8:00" "8:00" "8:00" ...
##  $ Hora.cierre       : chr  "22:00" "22:00" "22:00" "22:00" ...
head(bd, 7)
##   vcClaveTienda  DescGiro Codigo.Barras PLU      Fecha    Hora
## 1         MX001 Abarrotes  7.501021e+12  NA 19/06/2020 8:16:21
## 2         MX001 Abarrotes  7.501032e+12  NA 19/06/2020 8:23:33
## 3         MX001 Abarrotes  7.501000e+12  NA 19/06/2020 8:24:33
## 4         MX001 Abarrotes  7.501031e+12  NA 19/06/2020 8:24:33
## 5         MX001 Abarrotes  7.501026e+12  NA 19/06/2020 8:26:28
## 6         MX001 Abarrotes  7.501025e+12  NA 19/06/2020 8:26:28
## 7         MX001 Abarrotes  7.501032e+12  NA 19/06/2020 8:26:28
##                        Marca                 Fabricante
## 1                NUTRI LECHE                    MEXILAC
## 2                     DAN UP           DANONE DE MEXICO
## 3                      BIMBO                GRUPO BIMBO
## 4                      PEPSI        PEPSI-COLA MEXICANA
## 5 BLANCA NIEVES (DETERGENTE) FABRICA DE JABON LA CORONA
## 6                      FLASH                       ALEN
## 7              VARIOS DANONE           DANONE DE MEXICO
##                              Producto Precio Ult.Costo Unidades F.Ticket
## 1                 Nutri Leche 1 Litro   16.0     12.31        1        1
## 2  DANUP STRAWBERRY P/BEBER 350GR NAL   14.0     14.00        1        2
## 3                 Rebanadas Bimbo 2Pz    5.0      5.00        1        3
## 4                    Pepsi N.R. 400Ml    8.0      8.00        1        3
## 5       Detergente Blanca Nieves 500G   19.5     15.00        1        4
## 6       Flash Xtra Brisa Marina 500Ml    9.5      7.31        1        4
## 7 Danone Bipack Fresa Chocoarroz 130G   11.0     11.00        1        4
##   NombreDepartamento          NombreFamilia           NombreCategoria
## 1          Abarrotes Lacteos y Refrigerados                     Leche
## 2          Abarrotes Lacteos y Refrigerados                    Yogurt
## 3          Abarrotes         Pan y Tortilla     Pan Dulce Empaquetado
## 4          Abarrotes                Bebidas Refrescos Plástico (N.R.)
## 5          Abarrotes     Limpieza del Hogar                Lavandería
## 6          Abarrotes     Limpieza del Hogar      Limpiadores Líquidos
## 7          Abarrotes Lacteos y Refrigerados      Postres Refrigerados
##       Estado Mts.2 Tipo.ubicación      Giro Hora.inicio Hora.cierre
## 1 Nuevo León    60        Esquina Abarrotes        8:00       22:00
## 2 Nuevo León    60        Esquina Abarrotes        8:00       22:00
## 3 Nuevo León    60        Esquina Abarrotes        8:00       22:00
## 4 Nuevo León    60        Esquina Abarrotes        8:00       22:00
## 5 Nuevo León    60        Esquina Abarrotes        8:00       22:00
## 6 Nuevo León    60        Esquina Abarrotes        8:00       22:00
## 7 Nuevo León    60        Esquina Abarrotes        8:00       22:00
tail(bd)
##        vcClaveTienda DescGiro Codigo.Barras PLU      Fecha     Hora
## 200615         MX005 Depósito   7.62221e+12  NA 12/07/2020  1:08:25
## 200616         MX005 Depósito   7.62221e+12  NA 23/10/2020 22:17:37
## 200617         MX005 Depósito   7.62221e+12  NA 10/10/2020 20:30:20
## 200618         MX005 Depósito   7.62221e+12  NA 10/10/2020 22:40:43
## 200619         MX005 Depósito   7.62221e+12  NA 27/06/2020 22:30:19
## 200620         MX005 Depósito   7.62221e+12  NA 26/06/2020 23:43:34
##                    Marca    Fabricante                          Producto Precio
## 200615 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200616 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200617 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200618 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200619 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200620 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
##        Ult.Costo Unidades F.Ticket NombreDepartamento NombreFamilia
## 200615      6.92        1   103100          Abarrotes      Dulcería
## 200616      6.92        1   116598          Abarrotes      Dulcería
## 200617      6.92        1   114886          Abarrotes      Dulcería
## 200618      6.92        1   114955          Abarrotes      Dulcería
## 200619      6.92        1   101121          Abarrotes      Dulcería
## 200620      6.92        1   100879          Abarrotes      Dulcería
##        NombreCategoria       Estado Mts.2 Tipo.ubicación       Giro Hora.inicio
## 200615 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200616 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200617 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200618 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200619 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200620 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
##        Hora.cierre
## 200615       21:00
## 200616       21:00
## 200617       21:00
## 200618       21:00
## 200619       21:00
## 200620       21:00

Técnicas para limpieza de datos

Técnica 1. Remover valores irrelevantes

Eliminar columnas
bd1<-bd
bd1<-subset(bd1,select= -c(PLU,Codigo.Barras))
summary(bd1)
##  vcClaveTienda        DescGiro            Fecha               Hora          
##  Length:200620      Length:200620      Length:200620      Length:200620     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     Marca            Fabricante          Producto             Precio       
##  Length:200620      Length:200620      Length:200620      Min.   :-147.00  
##  Class :character   Class :character   Class :character   1st Qu.:  11.00  
##  Mode  :character   Mode  :character   Mode  :character   Median :  16.00  
##                                                           Mean   :  19.42  
##                                                           3rd Qu.:  25.00  
##                                                           Max.   :1000.00  
##    Ult.Costo         Unidades         F.Ticket      NombreDepartamento
##  Min.   :  0.38   Min.   : 0.200   Min.   :     1   Length:200620     
##  1st Qu.:  8.46   1st Qu.: 1.000   1st Qu.: 33967   Class :character  
##  Median : 12.31   Median : 1.000   Median :105996   Mode  :character  
##  Mean   : 15.31   Mean   : 1.262   Mean   :193994                     
##  3rd Qu.: 19.23   3rd Qu.: 1.000   3rd Qu.:383009                     
##  Max.   :769.23   Max.   :96.000   Max.   :450040                     
##  NombreFamilia      NombreCategoria       Estado              Mts.2     
##  Length:200620      Length:200620      Length:200620      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:200620      Length:200620      Length:200620      Length:200620     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
## 
Eliminar renglones
bd2 <-bd1
bd2 <- bd2[bd2$Precio>0,]
summary(bd2)
##  vcClaveTienda        DescGiro            Fecha               Hora          
##  Length:200473      Length:200473      Length:200473      Length:200473     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     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  
##                                                                             
##                                                                             
## 
#Esto no se utilizara puesto que utilizaremos los valores negativos como absolutos.

Técnica2. Remover valores duplicados

¿Cuantos renglones duplicados tenemos?
bd1[duplicated(bd1),]
##  [1] vcClaveTienda      DescGiro           Fecha              Hora              
##  [5] Marca              Fabricante         Producto           Precio            
##  [9] Ult.Costo          Unidades           F.Ticket           NombreDepartamento
## [13] NombreFamilia      NombreCategoria    Estado             Mts.2             
## [17] Tipo.ubicación     Giro               Hora.inicio        Hora.cierre       
## <0 rows> (or 0-length row.names)
sum(duplicated(bd1))
## [1] 0
Eliminar renglones duplicados
bd3<-bd1
bd3<-distinct(bd3)

Técnica 3. Errores tipográficos y errores similares

Precios en absoluto
bd4<-bd3
bd4$Precio<-abs(bd4$Precio)
unique(bd4$Precio)
##   [1]   16.00   14.00    5.00    8.00   19.50    9.50   11.00   23.50   12.00
##  [10]   27.00   33.00   13.00    6.00   20.00   21.00   44.00   10.00   12.50
##  [19]   14.50   49.00   29.00   10.50   28.00    9.00   32.00   34.00   18.00
##  [28]   37.00    3.50   35.00   22.50    2.00   24.00   22.00    7.00    1.50
##  [37]   25.00   19.00   39.00  115.00   30.50   31.50    6.50   36.00   16.50
##  [46]   26.00   11.50    4.00   63.00    4.50   60.00   58.00   40.50   15.00
##  [55]   17.00   30.00   50.00   56.00   13.50    3.00   40.00   15.50   20.50
##  [64]   23.00  260.00   29.50   36.50   18.50   21.50    5.50   68.00   53.00
##  [73]   27.50   38.00   41.00   47.00   45.00   28.50    7.50   48.00   38.50
##  [82]    1.00   65.00   17.50    8.50   31.00   43.00   55.00   26.50   25.50
##  [91]   33.50  135.50  130.00   24.50   35.50  110.00   75.00    2.50   34.50
## [100]   69.00   57.00   76.00   39.50  113.00   81.00  125.00   50.50   55.50
## [109]   73.00   32.50   53.50  147.00   70.00  200.00   64.50   43.50   80.00
## [118]  105.00   54.00  140.00   42.00  100.00   61.00   37.50  250.00 1000.00
## [127]   74.00   52.00  135.00  129.00  148.00   66.00  126.00   59.00  145.00
## [136]    0.50   44.50  134.50   72.00  170.00   47.50   42.50   85.00  120.00
## [145]   46.00   12.90   14.17  175.00  122.00  108.00  173.50   51.00   46.50
## [154]  134.00  150.00  197.00   98.00   90.00  116.00  103.00   62.00   77.00
## [163]  155.00   67.00
Cantidades en enteros
bd5<-bd4
bd5$Unidades<-ceiling(bd5$Unidades)
unique(bd5$Unidades)
##  [1]  1  2  3  5 14  6  4 15 10 11 25 12 18  9 20  8  7 24 61 16 50 60 48 36 13
## [26] 46 80 44 40 17 26 22 23 32 33 72 56 30 37 29 96 27

Técnica 4. Convertir tipos de datos

Convertir de caracter a fecha
bd6<-bd5
bd6$Fecha<-as.Date(bd6$Fecha, format = "%d/%m/%Y")
tibble(bd6)
## # A tibble: 200,620 × 20
##    vcCla…¹ DescG…² Fecha      Hora  Marca Fabri…³ Produ…⁴ Precio Ult.C…⁵ Unida…⁶
##    <chr>   <chr>   <date>     <chr> <chr> <chr>   <chr>    <dbl>   <dbl>   <dbl>
##  1 MX001   Abarro… 2020-06-19 8:16… NUTR… MEXILAC Nutri …   16     12.3        1
##  2 MX001   Abarro… 2020-06-19 8:23… DAN … DANONE… DANUP …   14     14          1
##  3 MX001   Abarro… 2020-06-19 8:24… BIMBO GRUPO … Rebana…    5      5          1
##  4 MX001   Abarro… 2020-06-19 8:24… PEPSI PEPSI-… Pepsi …    8      8          1
##  5 MX001   Abarro… 2020-06-19 8:26… BLAN… FABRIC… Deterg…   19.5   15          1
##  6 MX001   Abarro… 2020-06-19 8:26… FLASH ALEN    Flash …    9.5    7.31       1
##  7 MX001   Abarro… 2020-06-19 8:26… VARI… DANONE… Danone…   11     11          1
##  8 MX001   Abarro… 2020-06-19 8:26… ZOTE  FABRIC… Jabon …    9.5    7.31       1
##  9 MX001   Abarro… 2020-06-19 8:26… ALWA… PROCTE… T Feme…   23.5   18.1        1
## 10 MX001   Abarro… 2020-06-19 15:2… JUMEX JUMEX   Jugo D…   12     12          1
## # … with 200,610 more rows, 10 more variables: 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>, and abbreviated variable names
## #   ¹​vcClaveTienda, ²​DescGiro, ³​Fabricante, ⁴​Producto, ⁵​Ult.Costo, ⁶​Unidades
Convertir de caracter a entero
bd7<-bd6
bd7$Hora<-substr(bd7$Hora, start=1,stop=2)
tibble(bd7)
## # A tibble: 200,620 × 20
##    vcCla…¹ DescG…² Fecha      Hora  Marca Fabri…³ Produ…⁴ Precio Ult.C…⁵ Unida…⁶
##    <chr>   <chr>   <date>     <chr> <chr> <chr>   <chr>    <dbl>   <dbl>   <dbl>
##  1 MX001   Abarro… 2020-06-19 8:    NUTR… MEXILAC Nutri …   16     12.3        1
##  2 MX001   Abarro… 2020-06-19 8:    DAN … DANONE… DANUP …   14     14          1
##  3 MX001   Abarro… 2020-06-19 8:    BIMBO GRUPO … Rebana…    5      5          1
##  4 MX001   Abarro… 2020-06-19 8:    PEPSI PEPSI-… Pepsi …    8      8          1
##  5 MX001   Abarro… 2020-06-19 8:    BLAN… FABRIC… Deterg…   19.5   15          1
##  6 MX001   Abarro… 2020-06-19 8:    FLASH ALEN    Flash …    9.5    7.31       1
##  7 MX001   Abarro… 2020-06-19 8:    VARI… DANONE… Danone…   11     11          1
##  8 MX001   Abarro… 2020-06-19 8:    ZOTE  FABRIC… Jabon …    9.5    7.31       1
##  9 MX001   Abarro… 2020-06-19 8:    ALWA… PROCTE… T Feme…   23.5   18.1        1
## 10 MX001   Abarro… 2020-06-19 15    JUMEX JUMEX   Jugo D…   12     12          1
## # … with 200,610 more rows, 10 more variables: 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>, and abbreviated variable names
## #   ¹​vcClaveTienda, ²​DescGiro, ³​Fabricante, ⁴​Producto, ⁵​Ult.Costo, ⁶​Unidades
bd7$Hora<- as.integer(bd7$Hora)
## Warning: NAs introduced by coercion
str(bd7)
## 'data.frame':    200620 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  NA NA NA NA NA NA NA NA NA 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  "8:00" "8:00" "8:00" "8:00" ...
##  $ Hora.cierre       : chr  "22:00" "22:00" "22:00" "22:00" ...

Técnica 5.Valores Faltantes

¿Cuántos NA tengo en la base de datos
sum(is.na(bd7))
## [1] 16440
sum(is.na(bd))
## [1] 199183
¿Cuántos NA tengo por variable?

Aquí estamos calculando los NA’s del primer bd, y de bd7, ya que la primera si tiene la columna PLU que contiene muchos NA’s y la segunda ya no tiene esta columna.

sapply(bd7, function(x) sum(is.na(x)))
##      vcClaveTienda           DescGiro              Fecha               Hora 
##                  0                  0                  0              16440 
##              Marca         Fabricante           Producto             Precio 
##                  0                  0                  0                  0 
##          Ult.Costo           Unidades           F.Ticket NombreDepartamento 
##                  0                  0                  0                  0 
##      NombreFamilia    NombreCategoria             Estado              Mts.2 
##                  0                  0                  0                  0 
##     Tipo.ubicación               Giro        Hora.inicio        Hora.cierre 
##                  0                  0                  0                  0
sapply(bd, function(x) sum(is.na(x)))
##      vcClaveTienda           DescGiro      Codigo.Barras                PLU 
##                  0                  0                  0             199183 
##              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 NA de una tabla
bd8<-bd
bd8<-na.omit(bd8)
summary(bd8)
##  vcClaveTienda        DescGiro         Codigo.Barras            PLU        
##  Length:1437        Length:1437        Min.   :6.750e+08   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:6.750e+08   1st Qu.: 1.000  
##  Mode  :character   Mode  :character   Median :6.750e+08   Median : 1.000  
##                                        Mean   :2.616e+11   Mean   : 2.112  
##                                        3rd Qu.:6.750e+08   3rd Qu.: 1.000  
##                                        Max.   :7.501e+12   Max.   :30.000  
##     Fecha               Hora              Marca            Fabricante       
##  Length:1437        Length:1437        Length:1437        Length:1437       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##    Producto             Precio        Ult.Costo        Unidades    
##  Length:1437        Min.   :30.00   Min.   : 1.00   Min.   :1.000  
##  Class :character   1st Qu.:90.00   1st Qu.:64.62   1st Qu.:1.000  
##  Mode  :character   Median :90.00   Median :64.62   Median :1.000  
##                     Mean   :87.94   Mean   :56.65   Mean   :1.124  
##                     3rd Qu.:90.00   3rd Qu.:64.62   3rd Qu.:1.000  
##                     Max.   :90.00   Max.   :64.62   Max.   :7.000  
##     F.Ticket      NombreDepartamento NombreFamilia      NombreCategoria   
##  Min.   :   772   Length:1437        Length:1437        Length:1437       
##  1st Qu.: 99955   Class :character   Class :character   Class :character  
##  Median :102493   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :100595                                                           
##  3rd Qu.:106546                                                           
##  Max.   :118356                                                           
##     Estado              Mts.2       Tipo.ubicación         Giro          
##  Length:1437        Min.   :58.00   Length:1437        Length:1437       
##  Class :character   1st Qu.:58.00   Class :character   Class :character  
##  Mode  :character   Median :58.00   Mode  :character   Mode  :character  
##                     Mean   :58.07                                        
##                     3rd Qu.:58.00                                        
##                     Max.   :60.00                                        
##  Hora.inicio        Hora.cierre       
##  Length:1437        Length:1437       
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
Remplazar NA con ceros
bd9<- bd
bd9[is.na(bd9)]<-0
summary(bd9)
##  vcClaveTienda        DescGiro         Codigo.Barras            PLU          
##  Length:200620      Length:200620      Min.   :8.347e+05   Min.   : 0.00000  
##  Class :character   Class :character   1st Qu.:7.501e+12   1st Qu.: 0.00000  
##  Mode  :character   Mode  :character   Median :7.501e+12   Median : 0.00000  
##                                        Mean   :5.950e+12   Mean   : 0.01513  
##                                        3rd Qu.:7.501e+12   3rd Qu.: 0.00000  
##                                        Max.   :1.750e+13   Max.   :30.00000  
##     Fecha               Hora              Marca            Fabricante       
##  Length:200620      Length:200620      Length:200620      Length:200620     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##    Producto             Precio          Ult.Costo         Unidades     
##  Length:200620      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:200620      Length:200620      Length:200620     
##  1st Qu.: 33967   Class :character   Class :character   Class :character  
##  Median :105996   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :193994                                                           
##  3rd Qu.:383009                                                           
##  Max.   :450040                                                           
##     Estado              Mts.2      Tipo.ubicación         Giro          
##  Length:200620      Min.   :47.0   Length:200620      Length:200620     
##  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:200620      Length:200620     
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
Remplazar NA con el promedio
bd10<-bd
bd10$PLU[is.na(bd10$PLU)]<-mean(bd10$PLU, na.rm=TRUE)
summary(bd10)
##  vcClaveTienda        DescGiro         Codigo.Barras            PLU        
##  Length:200620      Length:200620      Min.   :8.347e+05   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:7.501e+12   1st Qu.: 2.112  
##  Mode  :character   Mode  :character   Median :7.501e+12   Median : 2.112  
##                                        Mean   :5.950e+12   Mean   : 2.112  
##                                        3rd Qu.:7.501e+12   3rd Qu.: 2.112  
##                                        Max.   :1.750e+13   Max.   :30.000  
##     Fecha               Hora              Marca            Fabricante       
##  Length:200620      Length:200620      Length:200620      Length:200620     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##    Producto             Precio          Ult.Costo         Unidades     
##  Length:200620      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:200620      Length:200620      Length:200620     
##  1st Qu.: 33967   Class :character   Class :character   Class :character  
##  Median :105996   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :193994                                                           
##  3rd Qu.:383009                                                           
##  Max.   :450040                                                           
##     Estado              Mts.2      Tipo.ubicación         Giro          
##  Length:200620      Min.   :47.0   Length:200620      Length:200620     
##  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:200620      Length:200620     
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
Remplazar negativos con cero
bd11<-bd
bd11[bd11<0]<-0
summary(bd11)
##  vcClaveTienda        DescGiro         Codigo.Barras            PLU        
##  Length:200620      Length:200620      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   :199183  
##     Fecha               Hora              Marca            Fabricante       
##  Length:200620      Length:200620      Length:200620      Length:200620     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##    Producto             Precio          Ult.Costo         Unidades     
##  Length:200620      Min.   :   0.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.44   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:200620      Length:200620      Length:200620     
##  1st Qu.: 33967   Class :character   Class :character   Class :character  
##  Median :105996   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :193994                                                           
##  3rd Qu.:383009                                                           
##  Max.   :450040                                                           
##                                                                           
##     Estado              Mts.2      Tipo.ubicación         Giro          
##  Length:200620      Min.   :47.0   Length:200620      Length:200620     
##  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:200620      Length:200620     
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
##                                       
## 

Técnica 6. Método estadístico

bd12<-bd7
boxplot(bd12$Precio,horixontal=TRUE)

boxplot(bd12$Unidades,horizontal=TRUE)

Agregar columnas

bd12$Dia_de_la_semana<-wday(bd12$Fecha)


bd12$Subtotal<-bd12$Precio * bd12$Unidades


bd12$Utilidad<-bd12$Precio-bd12$Ult.Costo

bd13<-select(bd12, Dia_de_la_semana, Subtotal,Utilidad)
head(bd13)
##   Dia_de_la_semana Subtotal Utilidad
## 1                6     16.0     3.69
## 2                6     14.0     0.00
## 3                6      5.0     0.00
## 4                6      8.0     0.00
## 5                6     19.5     4.50
## 6                6      9.5     2.19

Exportar base de datos limpia

bd_limpia<-bd12

write.csv(bd_limpia,file = "abarrotes_bd_limpia.csv", row.names = FALSE)

Conclusión

Los datos hoy en dia verdaderamente pueden ser catalogados como oro, pero pueden tornarse obsoletos al momento de no saber manejarlos ni maniobrarlos. Una parte clave de el manejo de los datos, es la limpieza de los mismos, ya que de esta manera se puede optimizar el uso de estos, logrando hacer un analisis mas profundo y certero.