Paso 1. Importar base de datos

# file.choose()

abarrotes <- read.csv ( "C:\\Users\\danyc\\OneDrive - Instituto Tecnologico y de Estudios Superiores de Monterrey\\Desktop\\Excel y CSV\\abarrotes_ventas-2 .csv")

Notas previas: Modificación a Excel

Cambios en base de datos: Formato de fecha a corta, formato de hora a 01:05:00 en español mexico, se agregaron 5 lineas arriba y se duplicaron primeros 5 registros, se cambio lo del codigo de barras a numeros sin decimal, se cambió a csv UTF8.

Paso 2. Entender la base de datos

#summary(abarrotes)

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
#count(abarrotes,  vcClaveTienda, sort =TRUE)
#count(abarrotes,  DescGiro         , sort =TRUE)
#count(abarrotes,  Marca         , sort =TRUE)
#count(abarrotes,  Producto                   , sort =TRUE)
#count(abarrotes,  NombreDepartamento                    , sort =TRUE)
#count(abarrotes,  NombreFamilia                          , sort =TRUE)
#count(abarrotes,  NombreCategoria                                 , sort =TRUE)
#count(abarrotes,  Estado                                               , sort =TRUE)
#count(abarrotes,  Hora.inicio  , sort =TRUE)
#count(abarrotes,  Hora.cierre  , sort =TRUE)
#count(abarrotes,  Giro , sort =TRUE)

#install.packages("tidyverse")
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()
tibble(abarrotes)
## # A tibble: 200,625 × 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… 08:1… NUTR… MEXILAC Nutri …   16  
##  2 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… DAN … DANONE… DANUP …   14  
##  3 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… BIMBO GRUPO … Rebana…    5  
##  4 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… PEPSI PEPSI-… Pepsi …    8  
##  5 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… BLAN… FABRIC… Deterg…   19.5
##  6 MX001         Abarrot… 7.50e12    NA 19/0… 08:1… NUTR… MEXILAC Nutri …   16  
##  7 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… DAN … DANONE… DANUP …   14  
##  8 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… BIMBO GRUPO … Rebana…    5  
##  9 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… PEPSI PEPSI-… Pepsi …    8  
## 10 MX001         Abarrot… 7.50e12    NA 19/0… 08:2… BLAN… FABRIC… Deterg…   19.5
## # … with 200,615 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(abarrotes)
## '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 a. m." "08:23:33 a. m." "08:24:33 a. m." "08:24:33 a. m." ...
##  $ 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  "8:00" "8:00" "8:00" "8:00" ...
##  $ Hora.cierre       : chr  "22:00" "22:00" "22:00" "22:00" ...
head(abarrotes)
##   vcClaveTienda  DescGiro Codigo.Barras PLU      Fecha           Hora
## 1         MX001 Abarrotes  7.501021e+12  NA 19/06/2020 08:16:21 a. m.
## 2         MX001 Abarrotes  7.501032e+12  NA 19/06/2020 08:23:33 a. m.
## 3         MX001 Abarrotes  7.501000e+12  NA 19/06/2020 08:24:33 a. m.
## 4         MX001 Abarrotes  7.501031e+12  NA 19/06/2020 08:24:33 a. m.
## 5         MX001 Abarrotes  7.501026e+12  NA 19/06/2020 08:26:28 a. m.
## 6         MX001 Abarrotes  7.501021e+12  NA 19/06/2020 08:16:21 a. m.
##                        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                NUTRI LECHE                    MEXILAC
##                             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                Nutri Leche 1 Litro   16.0     12.31        1        1
##   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 Lacteos y Refrigerados                     Leche
##       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
head(abarrotes, n=7)
##   vcClaveTienda  DescGiro Codigo.Barras PLU      Fecha           Hora
## 1         MX001 Abarrotes  7.501021e+12  NA 19/06/2020 08:16:21 a. m.
## 2         MX001 Abarrotes  7.501032e+12  NA 19/06/2020 08:23:33 a. m.
## 3         MX001 Abarrotes  7.501000e+12  NA 19/06/2020 08:24:33 a. m.
## 4         MX001 Abarrotes  7.501031e+12  NA 19/06/2020 08:24:33 a. m.
## 5         MX001 Abarrotes  7.501026e+12  NA 19/06/2020 08:26:28 a. m.
## 6         MX001 Abarrotes  7.501021e+12  NA 19/06/2020 08:16:21 a. m.
## 7         MX001 Abarrotes  7.501032e+12  NA 19/06/2020 08:23:33 a. m.
##                        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                NUTRI LECHE                    MEXILAC
## 7                     DAN UP           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                Nutri Leche 1 Litro   16.0     12.31        1        1
## 7 DANUP STRAWBERRY P/BEBER 350GR NAL   14.0     14.00        1        2
##   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 Lacteos y Refrigerados                     Leche
## 7          Abarrotes Lacteos y Refrigerados                    Yogurt
##       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(abarrotes)
##        vcClaveTienda DescGiro Codigo.Barras PLU      Fecha           Hora
## 200620         MX005 Depósito   7.62221e+12  NA 12/07/2020 01:08:25 a. m.
## 200621         MX005 Depósito   7.62221e+12  NA 23/10/2020 10:17:37 p. m.
## 200622         MX005 Depósito   7.62221e+12  NA 10/10/2020 08:30:20 p. m.
## 200623         MX005 Depósito   7.62221e+12  NA 10/10/2020 10:40:43 p. m.
## 200624         MX005 Depósito   7.62221e+12  NA 27/06/2020 10:30:19 p. m.
## 200625         MX005 Depósito   7.62221e+12  NA 26/06/2020 11:43:34 p. m.
##                    Marca    Fabricante                          Producto Precio
## 200620 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200621 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200622 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200623 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200624 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
## 200625 TRIDENT XTRA CARE CADBURY ADAMS Trident Xtracare Freshmint 16.32G      9
##        Ult.Costo Unidades F.Ticket NombreDepartamento NombreFamilia
## 200620      6.92        1   103100          Abarrotes      Dulcería
## 200621      6.92        1   116598          Abarrotes      Dulcería
## 200622      6.92        1   114886          Abarrotes      Dulcería
## 200623      6.92        1   114955          Abarrotes      Dulcería
## 200624      6.92        1   101121          Abarrotes      Dulcería
## 200625      6.92        1   100879          Abarrotes      Dulcería
##        NombreCategoria       Estado Mts.2 Tipo.ubicación       Giro Hora.inicio
## 200620 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200621 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200622 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200623 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200624 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
## 200625 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper        8:00
##        Hora.cierre
## 200620       21:00
## 200621       21:00
## 200622       21:00
## 200623       21:00
## 200624       21:00
## 200625       21:00
#install.packages("janitor")
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
tabyl(abarrotes,  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

Herramienta “El Generador de Valor de Datos”

Paso 1. Definir el área del negocio que buscamos impactar o mejorar y su KPI

El área serían directamente las ventas de nuestros productos.

Los KPI´s a impactar son:

a. Ventas de productos

Paso 2. Seleccionar plantilla(-s) para crear valor a partir de los datos de los clientes.

Visión / Segmentación / Personalización / Contextualización

Paso 3. Generar ideas o conceptos específicos.

Crear una limpieza de bases de datos para eliminar conceptos no utilizados o errores dentro de la misma base.

Paso 4. Reunir los datos requeridos.

Se necesitan ventas, productos, buena base de datos limpia.

Paso 5. Plan de ejecución.

Ver los productos más vendidos y crear junto con los departamentos de logística, compras y ventas un plan para incrementar la rotación de inventarios y poder de esta manera sacar la máxima productividad, estar alimentando la base de datos e ir limpiando cada vez que se alimente la misma.

Observaciones:

1991 registros en PLU sin datos. Fecha viene en formato carácter, hay que cambiarlo. Hora cambiar formato. No debería de haber precios negativos. no puede haber 0.2 unidades.

Técnicas de limpieza de datos

Técnica 1: Remover valores irrelevantes

Eliminar columnas

bd1 <- abarrotes
  bd1 <- subset(bd1, select =-c (PLU, Codigo.Barras))

Eliminar renglones

    bd2<-bd1
    bd2 <- bd2[bd2$Precio> 0, ]
    summary (bd1)
##  vcClaveTienda        DescGiro            Fecha               Hora          
##  Length:200625      Length:200625      Length:200625      Length:200625     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     Marca            Fabricante          Producto             Precio       
##  Length:200625      Length:200625      Length:200625      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:200625     
##  1st Qu.:  8.46   1st Qu.: 1.000   1st Qu.: 33964   Class :character  
##  Median : 12.31   Median : 1.000   Median :105993   Mode  :character  
##  Mean   : 15.31   Mean   : 1.262   Mean   :193990                     
##  3rd Qu.: 19.23   3rd Qu.: 1.000   3rd Qu.:383005                     
##  Max.   :769.23   Max.   :96.000   Max.   :450040                     
##  NombreFamilia      NombreCategoria       Estado              Mts.2     
##  Length:200625      Length:200625      Length:200625      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:200625      Length:200625      Length:200625      Length:200625     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
## 
    summary(bd2)
##  vcClaveTienda        DescGiro            Fecha               Hora          
##  Length:200478      Length:200478      Length:200478      Length:200478     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     Marca            Fabricante          Producto             Precio       
##  Length:200478      Length:200478      Length:200478      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:200478     
##  1st Qu.:  8.46   1st Qu.: 1.000   1st Qu.: 33977   Class :character  
##  Median : 12.31   Median : 1.000   Median :106034   Mode  :character  
##  Mean   : 15.31   Mean   : 1.261   Mean   :194096                     
##  3rd Qu.: 19.23   3rd Qu.: 1.000   3rd Qu.:383062                     
##  Max.   :769.23   Max.   :96.000   Max.   :450040                     
##  NombreFamilia      NombreCategoria       Estado              Mts.2     
##  Length:200478      Length:200478      Length:200478      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:200478      Length:200478      Length:200478      Length:200478     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
## 
    #Esto no lo usaremos, pondremos precios negativos como absolutos

Técnica 2: Remover valores duplicados

¿Cuantos renglones tenemos duplicados?

bd1[duplicated(bd1),]
##    vcClaveTienda  DescGiro      Fecha           Hora                      Marca
## 6          MX001 Abarrotes 19/06/2020 08:16:21 a. m.                NUTRI LECHE
## 7          MX001 Abarrotes 19/06/2020 08:23:33 a. m.                     DAN UP
## 8          MX001 Abarrotes 19/06/2020 08:24:33 a. m.                      BIMBO
## 9          MX001 Abarrotes 19/06/2020 08:24:33 a. m.                      PEPSI
## 10         MX001 Abarrotes 19/06/2020 08:26:28 a. m. 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         8:00       22:00
## 7         8:00       22:00
## 8         8:00       22:00
## 9         8:00       22:00
## 10        8:00       22:00
    sum(duplicated(bd1))
## [1] 5

Eliminar renglones duplicados

bd3<- bd1
    library(dplyr)
    bd3<- distinct(bd3)

Técnica 3: Errores de tipografía y errores similares

Precios en absoluto

 bd4<-bd3
    bd4$Precio <- abs(bd4$Precio)
summary(bd4) 
##  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.   :   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: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  
##                                                                             
##                                                                             
## 

Cantidades en enteros

bd5<-bd4
bd5$Unidades<- ceiling (bd5$Unidades)
summary(bd5)
##  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.   :   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.   : 1.000   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  
##                                                                             
##                                                                             
## 

Técnica 4. Convertir tipos de datos

Convertir de carácter a fecha

bd6<-bd5
bd6$Fecha<- as.Date(bd6$Fecha, format= "%d/%m/%Y")
summary(bd6)
##  vcClaveTienda        DescGiro             Fecha                Hora          
##  Length:200620      Length:200620      Min.   :2020-05-01   Length:200620     
##  Class :character   Class :character   1st Qu.:2020-06-06   Class :character  
##  Mode  :character   Mode  :character   Median :2020-07-11   Mode  :character  
##                                        Mean   :2020-07-18                     
##                                        3rd Qu.:2020-08-29                     
##                                        Max.   :2020-11-11                     
##     Marca            Fabricante          Producto             Precio       
##  Length:200620      Length:200620      Length:200620      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.   : 1.000   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  
##                                                                             
##                                                                             
## 
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 08:1… NUTR… MEXILAC Nutri …   16     12.3        1
##  2 MX001   Abarro… 2020-06-19 08:2… DAN … DANONE… DANUP …   14     14          1
##  3 MX001   Abarro… 2020-06-19 08:2… BIMBO GRUPO … Rebana…    5      5          1
##  4 MX001   Abarro… 2020-06-19 08:2… PEPSI PEPSI-… Pepsi …    8      8          1
##  5 MX001   Abarro… 2020-06-19 08:2… BLAN… FABRIC… Deterg…   19.5   15          1
##  6 MX001   Abarro… 2020-06-19 08:2… FLASH ALEN    Flash …    9.5    7.31       1
##  7 MX001   Abarro… 2020-06-19 08:2… VARI… DANONE… Danone…   11     11          1
##  8 MX001   Abarro… 2020-06-19 08:2… ZOTE  FABRIC… Jabon …    9.5    7.31       1
##  9 MX001   Abarro… 2020-06-19 08:2… ALWA… PROCTE… T Feme…   23.5   18.1        1
## 10 MX001   Abarro… 2020-06-19 03: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 08    NUTR… MEXILAC Nutri …   16     12.3        1
##  2 MX001   Abarro… 2020-06-19 08    DAN … DANONE… DANUP …   14     14          1
##  3 MX001   Abarro… 2020-06-19 08    BIMBO GRUPO … Rebana…    5      5          1
##  4 MX001   Abarro… 2020-06-19 08    PEPSI PEPSI-… Pepsi …    8      8          1
##  5 MX001   Abarro… 2020-06-19 08    BLAN… FABRIC… Deterg…   19.5   15          1
##  6 MX001   Abarro… 2020-06-19 08    FLASH ALEN    Flash …    9.5    7.31       1
##  7 MX001   Abarro… 2020-06-19 08    VARI… DANONE… Danone…   11     11          1
##  8 MX001   Abarro… 2020-06-19 08    ZOTE  FABRIC… Jabon …    9.5    7.31       1
##  9 MX001   Abarro… 2020-06-19 08    ALWA… PROCTE… T Feme…   23.5   18.1        1
## 10 MX001   Abarro… 2020-06-19 03    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)
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  8 8 8 8 8 8 8 8 8 3 ...
##  $ 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 N/A tengo en mi base de datos?

sum(is.na(bd7))
## [1] 0
sum(is.na(abarrotes))
## [1] 199188
sapply(bd7, function(x) sum(is.na(x)))
##      vcClaveTienda           DescGiro              Fecha               Hora 
##                  0                  0                  0                  0 
##              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(abarrotes, 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
# ?sapply

Borrar todos los registros NA de una tabla

bd8<-abarrotes
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  
##                                       
##                                       
## 

Reemplazar NA con ceros

bd9<-abarrotes
bd9[is.na(bd9)]<-0
summary(bd9)
##  vcClaveTienda        DescGiro         Codigo.Barras            PLU          
##  Length:200625      Length:200625      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: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  
##                                       
##                                       
## 

Reemplazar NA con el promedio

bd10<-abarrotes
bd10$PLU[is.na(bd10$PLU)]<-mean(bd10$PLU, na.rm =TRUE)
summary(bd10)
##  vcClaveTienda        DescGiro         Codigo.Barras            PLU        
##  Length:200625      Length:200625      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: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  
##                                       
##                                       
## 

Reemplazar negativos con cero

bd11<-abarrotes
bd11[bd11<0]<-0
summary(bd11)
##  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.   :   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: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  
##                                       
##                                       
##                                       
## 

Técnica 6. Método estadístico

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

boxplot(bd12$Unidades, horizontal=TRUE)

Agregar columnas

#install.packages("lubridate")
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
bd12$Dia_de_la_Semana<- wday(bd12$Fecha)
summary(bd12)
##  vcClaveTienda        DescGiro             Fecha                 Hora       
##  Length:200620      Length:200620      Min.   :2020-05-01   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:2020-06-06   1st Qu.: 5.000  
##  Mode  :character   Mode  :character   Median :2020-07-11   Median : 8.000  
##                                        Mean   :2020-07-18   Mean   : 7.299  
##                                        3rd Qu.:2020-08-29   3rd Qu.:10.000  
##                                        Max.   :2020-11-11   Max.   :12.000  
##     Marca            Fabricante          Producto             Precio       
##  Length:200620      Length:200620      Length:200620      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.   : 1.000   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  
##                                                                             
##                                                                             
##                                                                             
##  Dia_de_la_Semana
##  Min.   :1.000   
##  1st Qu.:2.000   
##  Median :4.000   
##  Mean   :3.912   
##  3rd Qu.:6.000   
##  Max.   :7.000
bd12$Subtotal <- bd12$Precio*bd12$Unidades
summary(bd12)
##  vcClaveTienda        DescGiro             Fecha                 Hora       
##  Length:200620      Length:200620      Min.   :2020-05-01   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:2020-06-06   1st Qu.: 5.000  
##  Mode  :character   Mode  :character   Median :2020-07-11   Median : 8.000  
##                                        Mean   :2020-07-18   Mean   : 7.299  
##                                        3rd Qu.:2020-08-29   3rd Qu.:10.000  
##                                        Max.   :2020-11-11   Max.   :12.000  
##     Marca            Fabricante          Producto             Precio       
##  Length:200620      Length:200620      Length:200620      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.   : 1.000   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  
##                                                                             
##                                                                             
##                                                                             
##  Dia_de_la_Semana    Subtotal      
##  Min.   :1.000    Min.   :   1.00  
##  1st Qu.:2.000    1st Qu.:  12.00  
##  Median :4.000    Median :  18.00  
##  Mean   :3.912    Mean   :  24.33  
##  3rd Qu.:6.000    3rd Qu.:  27.00  
##  Max.   :7.000    Max.   :2496.00
bd12$Utilidad <- bd12$Precio*bd12$Ult.Costo
summary(bd12)
##  vcClaveTienda        DescGiro             Fecha                 Hora       
##  Length:200620      Length:200620      Min.   :2020-05-01   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:2020-06-06   1st Qu.: 5.000  
##  Mode  :character   Mode  :character   Median :2020-07-11   Median : 8.000  
##                                        Mean   :2020-07-18   Mean   : 7.299  
##                                        3rd Qu.:2020-08-29   3rd Qu.:10.000  
##                                        Max.   :2020-11-11   Max.   :12.000  
##     Marca            Fabricante          Producto             Precio       
##  Length:200620      Length:200620      Length:200620      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.   : 1.000   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  
##                                                                             
##                                                                             
##                                                                             
##  Dia_de_la_Semana    Subtotal          Utilidad       
##  Min.   :1.000    Min.   :   1.00   Min.   :     0.2  
##  1st Qu.:2.000    1st Qu.:  12.00   1st Qu.:    93.1  
##  Median :4.000    Median :  18.00   Median :   197.0  
##  Mean   :3.912    Mean   :  24.33   Mean   :   459.6  
##  3rd Qu.:6.000    3rd Qu.:  27.00   3rd Qu.:   480.8  
##  Max.   :7.000    Max.   :2496.00   Max.   :769230.0

Paso 3: Exportar la base de datos limpia

bd_limpia<-bd12
#write.csv(bd_limpia, file="abarrotesbaselimpia.csv", row.names = FALSE)

Conclusión y Aprendizaje

Dentro de este trabajo en específico, nos adentramos en aprender que era una limpieza de datos, esta base ya se había aprendido a limpiar por Excel y es bueno aprender con el programa R debido a que es mucho más fácil y con pocas líneas de codigo se puede conseguir un resultado mucho más preciso con menos trabajo por así decirlo, esto agregando que también se puede ir creciendo y mejorando la base de datos en un mismo archivo o bien en otro ya que R es compatible si es bien utilizado junto con sus librerías.

Según la página de Tableu, otro procesador de datos, el tener datos limpios aumentará en última instancia la productividad general y permitirá obtener información de la más alta calidad en su toma de decisiones.

Beneficios incluidos:

-Eliminación de errores cuando hay múltiples fuentes de datos en juego.

-Menos errores hacen que los clientes estén más contentos y los empleados menos frustrados.

-Capacidad para mapear las diferentes funciones y lo que se pretende que hagan sus datos.

-Monitoreo de errores y mejores informes para ver de dónde provienen los errores, lo que facilita la corrección de datos incorrectos o corruptos para aplicaciones futuras.

-El uso de herramientas para la limpieza de datos hará que las prácticas comerciales sean más eficientes y la toma de decisiones más rápida.

LS0tDQp0aXRsZTogPHNwYW4gc3R5bGU9IkNvbG9yOnJlZCI+IE1vZGVsbyBQcmVkaWN0aXZvICJBYmFycm90ZXMgYWN0aXZpZGFkIDIuMSIgPC9zcGFuPg0KYXV0aG9yOiAiRGFuaWVsYSBDw6FyZGVuYXMgWiAvLyBBMDE3MjA1MzUiDQpkYXRlOiAiMjAyMi0wOS0wOCINCm91dHB1dDogDQogICAgICBodG1sX2RvY3VtZW50Og0KICAgICAgICB0b2M6IHRydWUNCiAgICAgICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgICAgIGNvZGVfZm9sZGluZzogImhpZGUiDQogICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCi0tLQ0KKioqDQoNCiMgPGltZyBzcmM9ICJDOlxcVXNlcnNcXGRhbnljXFxEb3dubG9hZHNcXGFiYXJyb3Rlc3BpYy5qcGciIC8+DQoNCiMgPHNwYW4gc3R5bGU9IkNvbG9yOiNDMjMwMzAiPiBQYXNvIDEuIEltcG9ydGFyIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQoNCiMgZmlsZS5jaG9vc2UoKQ0KDQphYmFycm90ZXMgPC0gcmVhZC5jc3YgKCAiQzpcXFVzZXJzXFxkYW55Y1xcT25lRHJpdmUgLSBJbnN0aXR1dG8gVGVjbm9sb2dpY28geSBkZSBFc3R1ZGlvcyBTdXBlcmlvcmVzIGRlIE1vbnRlcnJleVxcRGVza3RvcFxcRXhjZWwgeSBDU1ZcXGFiYXJyb3Rlc192ZW50YXMtMiAuY3N2IikNCg0KYGBgDQoNCiMjIyMgTm90YXMgcHJldmlhczogTW9kaWZpY2FjacOzbiBhIEV4Y2VsICANCkNhbWJpb3MgZW4gYmFzZSBkZSBkYXRvczogRm9ybWF0byBkZSBmZWNoYSBhIGNvcnRhLCBmb3JtYXRvIGRlIGhvcmEgYSAwMTowNTowMCBlbiBlc3Bhw7FvbCBtZXhpY28sIHNlIGFncmVnYXJvbiA1IGxpbmVhcyBhcnJpYmEgeSBzZSBkdXBsaWNhcm9uIHByaW1lcm9zIDUgcmVnaXN0cm9zLCBzZSBjYW1iaW8gbG8gZGVsIGNvZGlnbyBkZSBiYXJyYXMgYSBudW1lcm9zIHNpbiBkZWNpbWFsLCBzZSBjYW1iacOzIGEgY3N2IFVURjguDQoNCiMgPHNwYW4gc3R5bGU9IkNvbG9yOiNDMjMwMzAiPiBQYXNvIDIuIEVudGVuZGVyIGxhIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KDQpgYGB7cn0NCiNzdW1tYXJ5KGFiYXJyb3RlcykNCg0KbGlicmFyeShkcGx5cikNCiNjb3VudChhYmFycm90ZXMsICB2Y0NsYXZlVGllbmRhLCBzb3J0ID1UUlVFKQ0KI2NvdW50KGFiYXJyb3RlcywgIERlc2NHaXJvICAgICAgICAgLCBzb3J0ID1UUlVFKQ0KI2NvdW50KGFiYXJyb3RlcywgIE1hcmNhICAgICAgICAgLCBzb3J0ID1UUlVFKQ0KI2NvdW50KGFiYXJyb3RlcywgIFByb2R1Y3RvICAgICAgICAgICAgICAgICAgICwgc29ydCA9VFJVRSkNCiNjb3VudChhYmFycm90ZXMsICBOb21icmVEZXBhcnRhbWVudG8gICAgICAgICAgICAgICAgICAgICwgc29ydCA9VFJVRSkNCiNjb3VudChhYmFycm90ZXMsICBOb21icmVGYW1pbGlhICAgICAgICAgICAgICAgICAgICAgICAgICAsIHNvcnQgPVRSVUUpDQojY291bnQoYWJhcnJvdGVzLCAgTm9tYnJlQ2F0ZWdvcmlhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzb3J0ID1UUlVFKQ0KI2NvdW50KGFiYXJyb3RlcywgIEVzdGFkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzb3J0ID1UUlVFKQ0KI2NvdW50KGFiYXJyb3RlcywgIEhvcmEuaW5pY2lvICAsIHNvcnQgPVRSVUUpDQojY291bnQoYWJhcnJvdGVzLCAgSG9yYS5jaWVycmUgICwgc29ydCA9VFJVRSkNCiNjb3VudChhYmFycm90ZXMsICBHaXJvICwgc29ydCA9VFJVRSkNCg0KI2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCg0KdGliYmxlKGFiYXJyb3RlcykNCg0Kc3RyKGFiYXJyb3RlcykNCg0KaGVhZChhYmFycm90ZXMpDQpoZWFkKGFiYXJyb3Rlcywgbj03KQ0KDQp0YWlsKGFiYXJyb3RlcykNCg0KI2luc3RhbGwucGFja2FnZXMoImphbml0b3IiKQ0KbGlicmFyeShqYW5pdG9yKQ0KDQp0YWJ5bChhYmFycm90ZXMsICB2Y0NsYXZlVGllbmRhLCBOb21icmVEZXBhcnRhbWVudG8gKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9IkNvbG9yOiNFRUQyMDIiPiBIZXJyYW1pZW50YSDigJxFbCBHZW5lcmFkb3IgZGUgVmFsb3IgZGUgRGF0b3PigJ0gPC9zcGFuPg0KPHN0eWxlPg0KZGl2LmJsdWUgeyBiYWNrZ3JvdW5kLWNvbG9yOiM1ODk4MWY7IGJvcmRlci1yYWRpdXM6IDVweDsgcGFkZGluZzogMjBweDt9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcyA9ICJibHVlIj4NCg0KKlBhc28gMS4qIERlZmluaXIgZWwgw6FyZWEgZGVsIG5lZ29jaW8gcXVlIGJ1c2NhbW9zIGltcGFjdGFyIG8gbWVqb3JhciB5IHN1IEtQSSANCg0KRWwgw6FyZWEgc2Vyw61hbiBkaXJlY3RhbWVudGUgbGFzIHZlbnRhcyBkZSBudWVzdHJvcyBwcm9kdWN0b3MuDQoNCkxvcyBLUEnCtHMgYSBpbXBhY3RhciBzb246ICANCg0KKiphLiBWZW50YXMgZGUgcHJvZHVjdG9zICAqKg0KDQoqUGFzbyAyLiogU2VsZWNjaW9uYXIgcGxhbnRpbGxhKC1zKSBwYXJhIGNyZWFyIHZhbG9yIGEgcGFydGlyIGRlIGxvcyBkYXRvcyBkZSBsb3MgY2xpZW50ZXMuICAgIA0KDQoqKlZpc2nDs24qKiAvIFNlZ21lbnRhY2nDs24gLyBQZXJzb25hbGl6YWNpw7NuIC8gQ29udGV4dHVhbGl6YWNpw7NuICAgICAgICANCg0KKlBhc28gMy4qIEdlbmVyYXIgaWRlYXMgbyBjb25jZXB0b3MgZXNwZWPDrWZpY29zLiANCg0KQ3JlYXIgdW5hIGxpbXBpZXphIGRlIGJhc2VzIGRlIGRhdG9zIHBhcmEgZWxpbWluYXIgY29uY2VwdG9zIG5vIHV0aWxpemFkb3MgbyBlcnJvcmVzIGRlbnRybyBkZSBsYSBtaXNtYSBiYXNlLiANCg0KKlBhc28gNC4qIFJldW5pciBsb3MgZGF0b3MgcmVxdWVyaWRvcy4gDQoNClNlIG5lY2VzaXRhbiB2ZW50YXMsIHByb2R1Y3RvcywgYnVlbmEgYmFzZSBkZSBkYXRvcyBsaW1waWEuIA0KDQoqUGFzbyA1LiogUGxhbiBkZSBlamVjdWNpw7NuLiANCg0KVmVyIGxvcyBwcm9kdWN0b3MgbcOhcyB2ZW5kaWRvcyB5IGNyZWFyIGp1bnRvIGNvbiBsb3MgZGVwYXJ0YW1lbnRvcyBkZSBsb2fDrXN0aWNhLCBjb21wcmFzIHkgdmVudGFzIHVuIHBsYW4gcGFyYSBpbmNyZW1lbnRhciBsYSByb3RhY2nDs24gZGUgaW52ZW50YXJpb3MgeSBwb2RlciBkZSBlc3RhIG1hbmVyYSBzYWNhciBsYSBtw6F4aW1hIHByb2R1Y3RpdmlkYWQsIGVzdGFyIGFsaW1lbnRhbmRvIGxhIGJhc2UgZGUgZGF0b3MgZSBpciBsaW1waWFuZG8gY2FkYSB2ZXogcXVlIHNlIGFsaW1lbnRlIGxhIG1pc21hLg0KDQo8L2Rpdj4NCg0KIyMjIE9ic2VydmFjaW9uZXM6IA0KMTk5MSByZWdpc3Ryb3MgZW4gUExVIHNpbiBkYXRvcy4gDQpGZWNoYSB2aWVuZSBlbiBmb3JtYXRvIGNhcsOhY3RlciwgaGF5IHF1ZSBjYW1iaWFybG8uDQpIb3JhIGNhbWJpYXIgZm9ybWF0by4gDQpObyBkZWJlcsOtYSBkZSBoYWJlciBwcmVjaW9zIG5lZ2F0aXZvcy4NCm5vIHB1ZWRlIGhhYmVyIDAuMiB1bmlkYWRlcy4gDQoNCiMgPHNwYW4gc3R5bGU9IkNvbG9yOiNDMjMwMzAiPiBUw6ljbmljYXMgZGUgbGltcGllemEgZGUgZGF0b3M8L3NwYW4+DQoNCiMjIFTDqWNuaWNhIDE6IFJlbW92ZXIgdmFsb3JlcyBpcnJlbGV2YW50ZXMgDQoNCiMjIyMgRWxpbWluYXIgY29sdW1uYXMgIA0KYGBge3J9DQpiZDEgPC0gYWJhcnJvdGVzDQogIGJkMSA8LSBzdWJzZXQoYmQxLCBzZWxlY3QgPS1jIChQTFUsIENvZGlnby5CYXJyYXMpKQ0KYGBgDQoNCiMjIyMgRWxpbWluYXIgcmVuZ2xvbmVzICANCmBgYHtyfQ0KICAgIGJkMjwtYmQxDQogICAgYmQyIDwtIGJkMltiZDIkUHJlY2lvPiAwLCBdDQogICAgc3VtbWFyeSAoYmQxKQ0KICAgIHN1bW1hcnkoYmQyKQ0KICAgIA0KICAgICNFc3RvIG5vIGxvIHVzYXJlbW9zLCBwb25kcmVtb3MgcHJlY2lvcyBuZWdhdGl2b3MgY29tbyBhYnNvbHV0b3MNCmBgYA0KDQogICANCiMjIFTDqWNuaWNhIDI6IFJlbW92ZXIgdmFsb3JlcyBkdXBsaWNhZG9zIA0KDQojIyMjIMK/Q3VhbnRvcyByZW5nbG9uZXMgdGVuZW1vcyBkdXBsaWNhZG9zPyAgDQpgYGB7cn0NCmJkMVtkdXBsaWNhdGVkKGJkMSksXQ0KICAgIHN1bShkdXBsaWNhdGVkKGJkMSkpDQpgYGANCg0KIyMjIyBFbGltaW5hciByZW5nbG9uZXMgZHVwbGljYWRvcyAgDQogICAgDQpgYGB7cn0NCmJkMzwtIGJkMQ0KICAgIGxpYnJhcnkoZHBseXIpDQogICAgYmQzPC0gZGlzdGluY3QoYmQzKQ0KYGBgDQogIA0KICAgIA0KIyMgVMOpY25pY2EgMzogRXJyb3JlcyBkZSB0aXBvZ3JhZsOtYSB5IGVycm9yZXMgc2ltaWxhcmVzIA0KICAgIA0KIyMjIyBQcmVjaW9zIGVuIGFic29sdXRvICANCmBgYHtyfQ0KIGJkNDwtYmQzDQogICAgYmQ0JFByZWNpbyA8LSBhYnMoYmQ0JFByZWNpbykNCnN1bW1hcnkoYmQ0KSANCmBgYA0KDQoNCiMjIyMgQ2FudGlkYWRlcyBlbiBlbnRlcm9zICANCmBgYHtyfQ0KYmQ1PC1iZDQNCmJkNSRVbmlkYWRlczwtIGNlaWxpbmcgKGJkNSRVbmlkYWRlcykNCnN1bW1hcnkoYmQ1KQ0KYGBgDQoNCg0KDQoNCiMjIFTDqWNuaWNhIDQuIENvbnZlcnRpciB0aXBvcyBkZSBkYXRvcyANCg0KIyMjIyBDb252ZXJ0aXIgZGUgY2Fyw6FjdGVyIGEgZmVjaGEgIA0KYGBge3J9DQpiZDY8LWJkNQ0KYmQ2JEZlY2hhPC0gYXMuRGF0ZShiZDYkRmVjaGEsIGZvcm1hdD0gIiVkLyVtLyVZIikNCnN1bW1hcnkoYmQ2KQ0KdGliYmxlKGJkNikNCmBgYA0KDQoNCg0KIyMjIyBDb252ZXJ0aXIgZGUgY2FyYWN0ZXIgYSBlbnRlcm8gIA0KYGBge3J9DQpiZDc8LWJkNg0KYmQ3JEhvcmE8LSBzdWJzdHIoYmQ3JEhvcmEsIHN0YXJ0ID0xLCBzdG9wPTIpDQp0aWJibGUoYmQ3KQ0KYmQ3JEhvcmE8LSBhcy5pbnRlZ2VyKGJkNyRIb3JhKQ0Kc3RyKGJkNykNCmBgYA0KDQoNCg0KIyMgVMOpY25pY2EgNTpWYWxvcmVzIGZhbHRhbnRlcyANCiMjIyMgwr9DdcOhbnRvcyBOL0EgdGVuZ28gZW4gbWkgYmFzZSBkZSBkYXRvcz8gICANCmBgYHtyfQ0Kc3VtKGlzLm5hKGJkNykpDQpzdW0oaXMubmEoYWJhcnJvdGVzKSkNCnNhcHBseShiZDcsIGZ1bmN0aW9uKHgpIHN1bShpcy5uYSh4KSkpDQpzYXBwbHkoYWJhcnJvdGVzLCBmdW5jdGlvbih4KSBzdW0oaXMubmEoeCkpKQ0KDQojID9zYXBwbHkNCmBgYA0KDQoNCg0KIyMjIyBCb3JyYXIgdG9kb3MgbG9zIHJlZ2lzdHJvcyBOQSBkZSB1bmEgdGFibGEgIA0KYGBge3J9DQpiZDg8LWFiYXJyb3Rlcw0KYmQ4PC0gbmEub21pdChiZDgpDQpzdW1tYXJ5KGJkOCkNCmBgYA0KDQoNCg0KIyMjIyBSZWVtcGxhemFyIE5BIGNvbiBjZXJvcyAgDQpgYGB7cn0NCmJkOTwtYWJhcnJvdGVzDQpiZDlbaXMubmEoYmQ5KV08LTANCnN1bW1hcnkoYmQ5KQ0KYGBgDQoNCg0KIyMjIyBSZWVtcGxhemFyIE5BIGNvbiBlbCBwcm9tZWRpbyAgDQpgYGB7cn0NCmJkMTA8LWFiYXJyb3Rlcw0KYmQxMCRQTFVbaXMubmEoYmQxMCRQTFUpXTwtbWVhbihiZDEwJFBMVSwgbmEucm0gPVRSVUUpDQpzdW1tYXJ5KGJkMTApDQpgYGANCg0KDQoNCiMjIyMgUmVlbXBsYXphciBuZWdhdGl2b3MgY29uIGNlcm8gIA0KYGBge3J9DQpiZDExPC1hYmFycm90ZXMNCmJkMTFbYmQxMTwwXTwtMA0Kc3VtbWFyeShiZDExKQ0KYGBgDQoNCg0KDQojIyBUw6ljbmljYSA2LiBNw6l0b2RvIGVzdGFkw61zdGljbyANCmBgYHtyfQ0KYmQxMjwtYmQ3DQpib3hwbG90KGJkMTIkUHJlY2lvLCBob3Jpem9udGFsPVRSVUUpDQpib3hwbG90KGJkMTIkVW5pZGFkZXMsIGhvcml6b250YWw9VFJVRSkNCg0KYGBgDQoNCg0KIyMjIyBBZ3JlZ2FyIGNvbHVtbmFzICANCg0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikNCmxpYnJhcnkobHVicmlkYXRlKQ0KYmQxMiREaWFfZGVfbGFfU2VtYW5hPC0gd2RheShiZDEyJEZlY2hhKQ0Kc3VtbWFyeShiZDEyKQ0KDQpiZDEyJFN1YnRvdGFsIDwtIGJkMTIkUHJlY2lvKmJkMTIkVW5pZGFkZXMNCnN1bW1hcnkoYmQxMikNCg0KYmQxMiRVdGlsaWRhZCA8LSBiZDEyJFByZWNpbypiZDEyJFVsdC5Db3N0bw0Kc3VtbWFyeShiZDEyKQ0KYGBgDQoNCg0KDQoNCg0KIyA8c3BhbiBzdHlsZT0iQ29sb3I6I0MyMzAzMCI+UGFzbyAzOiBFeHBvcnRhciBsYSBiYXNlIGRlIGRhdG9zIGxpbXBpYSA8L3NwYW4+DQpgYGB7cn0NCmJkX2xpbXBpYTwtYmQxMg0KI3dyaXRlLmNzdihiZF9saW1waWEsIGZpbGU9ImFiYXJyb3Rlc2Jhc2VsaW1waWEuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpDQpgYGANCg0KDQojIDxzcGFuIHN0eWxlPSJDb2xvcjojRUVEMjAyIj4gQ29uY2x1c2nDs24geSBBcHJlbmRpemFqZSA8L3NwYW4+DQoNCjxzdHlsZT4NCmRpdi5ibHVlIHsgYmFja2dyb3VuZC1jb2xvcjpiZWlnZTsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAyMHB4O30NCjwvc3R5bGU+DQo8ZGl2IGNsYXNzID0gImJsdWUiPg0KDQpEZW50cm8gZGUgZXN0ZSB0cmFiYWpvIGVuIGVzcGVjw61maWNvLCBub3MgYWRlbnRyYW1vcyBlbiBhcHJlbmRlciBxdWUgZXJhIHVuYSBsaW1waWV6YSBkZSBkYXRvcywgZXN0YSBiYXNlIHlhIHNlIGhhYsOtYSBhcHJlbmRpZG8gYSBsaW1waWFyIHBvciBFeGNlbCB5IGVzIGJ1ZW5vIGFwcmVuZGVyIGNvbiBlbCBwcm9ncmFtYSBSIGRlYmlkbyBhIHF1ZSBlcyBtdWNobyBtw6FzIGbDoWNpbCB5IGNvbiBwb2NhcyBsw61uZWFzIGRlIGNvZGlnbyBzZSBwdWVkZSBjb25zZWd1aXIgdW4gcmVzdWx0YWRvIG11Y2hvIG3DoXMgcHJlY2lzbyBjb24gbWVub3MgdHJhYmFqbyBwb3IgYXPDrSBkZWNpcmxvLCBlc3RvIGFncmVnYW5kbyBxdWUgdGFtYmnDqW4gc2UgcHVlZGUgaXIgY3JlY2llbmRvIHkgbWVqb3JhbmRvIGxhIGJhc2UgZGUgZGF0b3MgZW4gdW4gbWlzbW8gYXJjaGl2byBvIGJpZW4gZW4gb3RybyB5YSBxdWUgUiBlcyBjb21wYXRpYmxlIHNpIGVzIGJpZW4gdXRpbGl6YWRvIGp1bnRvIGNvbiBzdXMgbGlicmVyw61hcy4NCg0KU2Vnw7puIGxhIHDDoWdpbmEgZGUgVGFibGV1LCBvdHJvIHByb2Nlc2Fkb3IgZGUgZGF0b3MsIGVsIHRlbmVyIGRhdG9zIGxpbXBpb3MgYXVtZW50YXLDoSBlbiDDumx0aW1hIGluc3RhbmNpYSBsYSBwcm9kdWN0aXZpZGFkIGdlbmVyYWwgeSBwZXJtaXRpcsOhIG9idGVuZXIgaW5mb3JtYWNpw7NuIGRlIGxhIG3DoXMgYWx0YSBjYWxpZGFkIGVuIHN1IHRvbWEgZGUgZGVjaXNpb25lcy4gDQoNCioqQmVuZWZpY2lvcyBpbmNsdWlkb3M6KiogDQoNCi1FbGltaW5hY2nDs24gZGUgZXJyb3JlcyBjdWFuZG8gaGF5IG3Dumx0aXBsZXMgZnVlbnRlcyBkZSBkYXRvcyBlbiBqdWVnby4gDQoNCi1NZW5vcyBlcnJvcmVzIGhhY2VuIHF1ZSBsb3MgY2xpZW50ZXMgZXN0w6luIG3DoXMgY29udGVudG9zIHkgbG9zIGVtcGxlYWRvcyBtZW5vcyBmcnVzdHJhZG9zLiANCg0KLUNhcGFjaWRhZCBwYXJhIG1hcGVhciBsYXMgZGlmZXJlbnRlcyBmdW5jaW9uZXMgeSBsbyBxdWUgc2UgcHJldGVuZGUgcXVlIGhhZ2FuIHN1cyBkYXRvcy4gDQoNCi1Nb25pdG9yZW8gZGUgZXJyb3JlcyB5IG1lam9yZXMgaW5mb3JtZXMgcGFyYSB2ZXIgZGUgZMOzbmRlIHByb3ZpZW5lbiBsb3MgZXJyb3JlcywgbG8gcXVlIGZhY2lsaXRhIGxhICBjb3JyZWNjacOzbiBkZSBkYXRvcyBpbmNvcnJlY3RvcyBvIGNvcnJ1cHRvcyBwYXJhIGFwbGljYWNpb25lcyBmdXR1cmFzLiANCg0KLUVsIHVzbyBkZSBoZXJyYW1pZW50YXMgcGFyYSBsYSBsaW1waWV6YSBkZSBkYXRvcyBoYXLDoSBxdWUgbGFzIHByw6FjdGljYXMgY29tZXJjaWFsZXMgc2VhbiBtw6FzIGVmaWNpZW50ZXMgeSBsYSB0b21hIGRlIGRlY2lzaW9uZXMgbcOhcyByw6FwaWRhLiANCg0KDQoNCjwvZGl2Pg0K