Instalar paquetes y llamar librerias

# install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# install.packages("dplyr")
library(dplyr)
# install.packages("lubridate")
library(lubridate)
# install.packages("Matrix")
library(Matrix)
## 
## Attaching package: 'Matrix'
## 
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
# install.packages("arules")
library(arules)
## 
## Attaching package: 'arules'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following objects are masked from 'package:base':
## 
##     abbreviate, write
# install.packages("arulesViz")
library(arulesViz)
# install.packages("datasets")
library(datasets)
# install.packages("plyr")
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## 
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
## 
## The following object is masked from 'package:purrr':
## 
##     compact

Importar la base de datos

# file.choose()
bd <- read.csv("C:\\Users\\elise\\Downloads\\abarrotes.csv")

Entender la base de datos

summary(bd)
##  vcClaveTienda        DescGiro         Codigo.Barras            PLU        
##  Length:200625      Length:200625      Min.   :8.347e+05   Min.   : 1.00   
##  Class :character   Class :character   1st Qu.:7.501e+12   1st Qu.: 1.00   
##  Mode  :character   Mode  :character   Median :7.501e+12   Median : 1.00   
##                                        Mean   :5.950e+12   Mean   : 2.11   
##                                        3rd Qu.:7.501e+12   3rd Qu.: 1.00   
##                                        Max.   :1.750e+13   Max.   :30.00   
##                                                            NA's   :199188  
##     Fecha               Hora              Marca            Fabricante       
##  Length:200625      Length:200625      Length:200625      Length:200625     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##    Producto             Precio          Ult.Costo         Unidades     
##  Length:200625      Min.   :-147.00   Min.   :  0.38   Min.   : 0.200  
##  Class :character   1st Qu.:  11.00   1st Qu.:  8.46   1st Qu.: 1.000  
##  Mode  :character   Median :  16.00   Median : 12.31   Median : 1.000  
##                     Mean   :  19.42   Mean   : 15.31   Mean   : 1.262  
##                     3rd Qu.:  25.00   3rd Qu.: 19.23   3rd Qu.: 1.000  
##                     Max.   :1000.00   Max.   :769.23   Max.   :96.000  
##                                                                        
##     F.Ticket      NombreDepartamento NombreFamilia      NombreCategoria   
##  Min.   :     1   Length:200625      Length:200625      Length:200625     
##  1st Qu.: 33964   Class :character   Class :character   Class :character  
##  Median :105993   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :193990                                                           
##  3rd Qu.:383005                                                           
##  Max.   :450040                                                           
##                                                                           
##     Estado              Mts.2      Tipo.ubicación         Giro          
##  Length:200625      Min.   :47.0   Length:200625      Length:200625     
##  Class :character   1st Qu.:53.0   Class :character   Class :character  
##  Mode  :character   Median :60.0   Mode  :character   Mode  :character  
##                     Mean   :56.6                                        
##                     3rd Qu.:60.0                                        
##                     Max.   :62.0                                        
##                                                                         
##  Hora.inicio        Hora.cierre       
##  Length:200625      Length:200625     
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
##                                       
## 
str(bd)
## 'data.frame':    200625 obs. of  22 variables:
##  $ vcClaveTienda     : chr  "MX001" "MX001" "MX001" "MX001" ...
##  $ DescGiro          : chr  "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
##  $ Codigo.Barras     : num  7.5e+12 7.5e+12 7.5e+12 7.5e+12 7.5e+12 ...
##  $ PLU               : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ Fecha             : chr  "19/06/2020" "19/06/2020" "19/06/2020" "19/06/2020" ...
##  $ Hora              : chr  "08:16:21" "08:23:33" "08:24:33" "08:24:33" ...
##  $ Marca             : chr  "NUTRI LECHE" "DAN UP" "BIMBO" "PEPSI" ...
##  $ Fabricante        : chr  "MEXILAC" "DANONE DE MEXICO" "GRUPO BIMBO" "PEPSI-COLA MEXICANA" ...
##  $ Producto          : chr  "Nutri Leche 1 Litro" "DANUP STRAWBERRY P/BEBER 350GR NAL" "Rebanadas Bimbo 2Pz" "Pepsi N.R. 400Ml" ...
##  $ Precio            : num  16 14 5 8 19.5 16 14 5 8 19.5 ...
##  $ Ult.Costo         : num  12.3 14 5 8 15 ...
##  $ Unidades          : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ F.Ticket          : int  1 2 3 3 4 1 2 3 3 4 ...
##  $ NombreDepartamento: chr  "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
##  $ NombreFamilia     : chr  "Lacteos y Refrigerados" "Lacteos y Refrigerados" "Pan y Tortilla" "Bebidas" ...
##  $ NombreCategoria   : chr  "Leche" "Yogurt" "Pan Dulce Empaquetado" "Refrescos Plástico (N.R.)" ...
##  $ Estado            : chr  "Nuevo León" "Nuevo León" "Nuevo León" "Nuevo León" ...
##  $ Mts.2             : int  60 60 60 60 60 60 60 60 60 60 ...
##  $ Tipo.ubicación    : chr  "Esquina" "Esquina" "Esquina" "Esquina" ...
##  $ Giro              : chr  "Abarrotes" "Abarrotes" "Abarrotes" "Abarrotes" ...
##  $ Hora.inicio       : chr  "08:00" "08:00" "08:00" "08:00" ...
##  $ Hora.cierre       : chr  "22:00" "22:00" "22:00" "22:00" ...
head(bd, n=10)
##    vcClaveTienda  DescGiro Codigo.Barras PLU      Fecha     Hora
## 1          MX001 Abarrotes  7.501021e+12  NA 19/06/2020 08:16:21
## 2          MX001 Abarrotes  7.501032e+12  NA 19/06/2020 08:23:33
## 3          MX001 Abarrotes  7.501000e+12  NA 19/06/2020 08:24:33
## 4          MX001 Abarrotes  7.501031e+12  NA 19/06/2020 08:24:33
## 5          MX001 Abarrotes  7.501026e+12  NA 19/06/2020 08:26:28
## 6          MX001 Abarrotes  7.501021e+12  NA 19/06/2020 08:16:21
## 7          MX001 Abarrotes  7.501032e+12  NA 19/06/2020 08:23:33
## 8          MX001 Abarrotes  7.501000e+12  NA 19/06/2020 08:24:33
## 9          MX001 Abarrotes  7.501031e+12  NA 19/06/2020 08:24:33
## 10         MX001 Abarrotes  7.501026e+12  NA 19/06/2020 08: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                 NUTRI LECHE                    MEXILAC
## 7                      DAN UP           DANONE DE MEXICO
## 8                       BIMBO                GRUPO BIMBO
## 9                       PEPSI        PEPSI-COLA MEXICANA
## 10 BLANCA NIEVES (DETERGENTE) FABRICA DE JABON LA CORONA
##                              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
## 8                 Rebanadas Bimbo 2Pz    5.0      5.00        1        3
## 9                    Pepsi N.R. 400Ml    8.0      8.00        1        3
## 10      Detergente Blanca Nieves 500G   19.5     15.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 Lacteos y Refrigerados                     Leche
## 7           Abarrotes Lacteos y Refrigerados                    Yogurt
## 8           Abarrotes         Pan y Tortilla     Pan Dulce Empaquetado
## 9           Abarrotes                Bebidas Refrescos Plástico (N.R.)
## 10          Abarrotes     Limpieza del Hogar                Lavandería
##        Estado Mts.2 Tipo.ubicación      Giro Hora.inicio Hora.cierre
## 1  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 2  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 3  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 4  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 5  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 6  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 7  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 8  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 9  Nuevo León    60        Esquina Abarrotes       08:00       22:00
## 10 Nuevo León    60        Esquina Abarrotes       08:00       22:00
tail(bd, n=10)
##        vcClaveTienda DescGiro Codigo.Barras PLU      Fecha     Hora
## 200616         MX005 Depósito   7.62221e+12  NA 07/08/2020 19:30:13
## 200617         MX005 Depósito   7.62221e+12  NA 25/07/2020 18:42:24
## 200618         MX005 Depósito   7.62221e+12  NA 18/07/2020 22:45:58
## 200619         MX005 Depósito   7.62221e+12  NA 12/07/2020 00:36:34
## 200620         MX005 Depósito   7.62221e+12  NA 12/07/2020 01:08:25
## 200621         MX005 Depósito   7.62221e+12  NA 23/10/2020 22:17:37
## 200622         MX005 Depósito   7.62221e+12  NA 10/10/2020 20:30:20
## 200623         MX005 Depósito   7.62221e+12  NA 10/10/2020 22:40:43
## 200624         MX005 Depósito   7.62221e+12  NA 27/06/2020 22:30:19
## 200625         MX005 Depósito   7.62221e+12  NA 26/06/2020 23:43:34
##                    Marca    Fabricante                          Producto Precio
## 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
## 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
## 200616      6.92        1   106411          Abarrotes      Dulcería
## 200617      6.92        1   104693          Abarrotes      Dulcería
## 200618      6.92        1   103856          Abarrotes      Dulcería
## 200619      6.92        1   103087          Abarrotes      Dulcería
## 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
## 200616 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200617 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200618 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200619 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200620 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200621 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200622 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200623 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200624 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
## 200625 Gomas de Mazcar Quintana Roo    58        Esquina Mini súper       08:00
##        Hora.cierre
## 200616       21:00
## 200617       21:00
## 200618       21:00
## 200619       21:00
## 200620       21:00
## 200621       21:00
## 200622       21:00
## 200623       21:00
## 200624       21:00
## 200625       21:00
#dplyr::count(bd, vcClaveTienda, sort=TRUE)
#dplyr::count(bd, DescGiro, sort=TRUE)
#dplyr::count(bd, Fecha, sort=TRUE)
#dplyr::count(bd, Hora, sort=TRUE)
#dplyr::count(bd, Marca, sort=TRUE)
#dplyr::count(bd, Fabricante, sort=TRUE)
#dplyr::count(bd, Producto, sort=TRUE)
#dplyr::count(bd, NombreDepartamento, sort=TRUE)
#dplyr::count(bd, NombreFamilia, sort=TRUE)
#dplyr::count(bd, NombreCategoria, sort=TRUE)
#dplyr::count(bd, Estado, sort=TRUE)
#dplyr::count(bd, Tipo.ubicación, sort=TRUE)
#dplyr::count(bd, Giro, sort=TRUE)
#dplyr::count(bd, Hora.inicio, sort=TRUE)
#dplyr::count(bd, Hora.cierre, sort=TRUE)

Limpiar la base de datos

Tecnica 1 Remover valores irrelevantes

# Eliminar columnas
bd1 <- bd
bd1 <- subset(bd1, select = -c(PLU, Codigo.Barras))

# Eliminar renglones

bd2 <- bd1
bd2 <- bd2[bd2$Precio > 0, ]
summary(bd1$Precio)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -147.00   11.00   16.00   19.42   25.00 1000.00
summary(bd2$Precio)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.50   11.00   16.00   19.45   25.00 1000.00

Tecnica 2. remover valores duplicados

# Cuantos renglones duplicados tenemos?
sum(duplicated(bd2))
## [1] 5
# Cuales son los renglones duplicados 
bd2[duplicated(bd2),]
##    vcClaveTienda  DescGiro      Fecha     Hora                      Marca
## 6          MX001 Abarrotes 19/06/2020 08:16:21                NUTRI LECHE
## 7          MX001 Abarrotes 19/06/2020 08:23:33                     DAN UP
## 8          MX001 Abarrotes 19/06/2020 08:24:33                      BIMBO
## 9          MX001 Abarrotes 19/06/2020 08:24:33                      PEPSI
## 10         MX001 Abarrotes 19/06/2020 08:26:28 BLANCA NIEVES (DETERGENTE)
##                    Fabricante                           Producto Precio
## 6                     MEXILAC                Nutri Leche 1 Litro   16.0
## 7            DANONE DE MEXICO DANUP STRAWBERRY P/BEBER 350GR NAL   14.0
## 8                 GRUPO BIMBO                Rebanadas Bimbo 2Pz    5.0
## 9         PEPSI-COLA MEXICANA                   Pepsi N.R. 400Ml    8.0
## 10 FABRICA DE JABON LA CORONA      Detergente Blanca Nieves 500G   19.5
##    Ult.Costo Unidades F.Ticket NombreDepartamento          NombreFamilia
## 6      12.31        1        1          Abarrotes Lacteos y Refrigerados
## 7      14.00        1        2          Abarrotes Lacteos y Refrigerados
## 8       5.00        1        3          Abarrotes         Pan y Tortilla
## 9       8.00        1        3          Abarrotes                Bebidas
## 10     15.00        1        4          Abarrotes     Limpieza del Hogar
##              NombreCategoria     Estado Mts.2 Tipo.ubicación      Giro
## 6                      Leche Nuevo León    60        Esquina Abarrotes
## 7                     Yogurt Nuevo León    60        Esquina Abarrotes
## 8      Pan Dulce Empaquetado Nuevo León    60        Esquina Abarrotes
## 9  Refrescos Plástico (N.R.) Nuevo León    60        Esquina Abarrotes
## 10                Lavandería Nuevo León    60        Esquina Abarrotes
##    Hora.inicio Hora.cierre
## 6        08:00       22:00
## 7        08:00       22:00
## 8        08:00       22:00
## 9        08:00       22:00
## 10       08:00       22:00
# Eliminar renglones duplicados
bd3 <- bd2
bd3 <- distinct(bd3)

Tecnicas 3. Eliminar errores tipograficos y similares

# Cantidades en enteros 
bd4 <- bd3
bd4$Unidades <- ceiling(bd4$Unidades)

Tecnica 4. Convertir tipos de datos

# Convertir de caracter a fecha
bd5 <- bd4
bd5$Fecha <- as.Date(bd5$Fecha, format = "%d/%m/%Y")

# Convertir de caracter entero
bd6 <- bd5
bd6$Hora <- substr(bd6$Hora, start=1, stop=2)
bd6$Hora <- as.integer(bd6$Hora)

Tecnica 5. Reemplazar valores faltantes

# Cuantos NAS tengo en la base de datos 
sum(is.na(bd6))
## [1] 0
sum(is.na(bd))
## [1] 199188
# Cuantos NAS tengo por Variable 
sapply(bd, 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
# Opcion 1. Borrar todos los NAS de una tabla 
# bd100 <- na.omit(bd)

# Opcion 2. Reemplazar los NA con CEROS
# bd101 <- bd
# bd101[is.na(bd101)]<-0

# Opcion 3. Reemplazar los NAS con el PROMEDIO 
# bd102 <- bd
# bd102$PLU{is.na(bd102$PLU)}<- mean(bd102$PLU, na.rm=TRUE)

Tecnica 6. Correcciones por metodos estadisticos

boxplot(bd6$Precio, horizontal = TRUE)

boxplot(bd6$Unidades, horizontal = TRUE)

Agregar columnas

# Agregar dia de la semana
bd6$Dia_Semana <- wday(bd6$Fecha)

# Agregar el subtotal de la venta
bd6$Subtotal <- bd6$Precio * bd6$Unidades

Exportar la base de datos

#write.csv(bd6, file="abarrotes_limia.csv", row.names=FALSE)

Generar Market Basket Analisis

#Ordenar de menor a mayor la columna Ticket
bd7 <- bd6
bd7 <- bd7[order(bd7$F.Ticket),]

#Generar el canasto
basket <- ddply(bd7,c("F.Ticket"), function(bd7)paste(bd7$Marca, collapse = ":" ))

#Eliminar la columna Ticket
basket$F.Ticket <- NULL

#Renombrar nombre de columna a Marca
colnames(basket) <- c("Marca")

#Exportar basket
write.csv(basket, file="basket.csv", row.names=FALSE)

#Importar la base de datos
#file.choose()
tr <- read.transactions("C:\\Users\\elise\\Desktop\\R\\basket.csv", format = "basket", sep = ":")
reglas.asociacion <- apriori(tr, parameter = list(supp=0.001, conf=0.2, maxlen=10))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.2    0.1    1 none FALSE            TRUE       5   0.001      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 115 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[28710 item(s), 115031 transaction(s)] done [0.10s].
## sorting and recoding items ... [119 item(s)] done [0.00s].
## creating transaction tree ... done [0.03s].
## checking subsets of size 1 done [0.00s].
## writing ... [0 rule(s)] done [0.00s].
## creating S4 object  ... done [0.01s].
summary(reglas.asociacion)
## set of 0 rules
inspect(reglas.asociacion)

#Ordenar reglas de asociacion
reglas.asociacion <- sort(reglas.asociacion, by="confidence", decreasing = TRUE)

# Graficar Top 10 reglas de asociacion 
top10reglas <- head(reglas.asociacion, n=10, by="confidence")
#plot(reglas.asociacion, method="graph", engine="htmlwidget")

Concluciones

En esta actividad seguimos progresando con el conocimiento basico de programacion en R y en archivos R Markdown, empezamos inserando una base de datos con mucha informacion. Despues de esto empezamos a analizar y ordenar los datos de la base de datos. Para esto utilizamos la funcion “count” e identificamos todas las vareables que sean characteres.

Ya teniendo los datos separados y analizados por el programa empezamos a realizar diferentes tecnicas para la limpiesa de la base de datos. En total realizamos 6 tecnicas diferentes para purificar los datos con los que se van a trabajar. Ya teniendo los datos “limpios” modificamos las tablas existentes para que tengan las caracteristicas que ocupamos. Ya teniendo la tabla final exportamos estos datos y generamos el Basket Market Analisis. Despues de esto lo graficamos de manera visual para poder identificar las correlaciones que tienen ciertos productos con otros y como la selecion de estos genera tendencias de compra por otros productos.

LS0tDQp0aXRsZTogIk1hcmtldCBCYXNrZXQgQW5hbHlzaXMiDQphdXRob3I6ICJFbGlzZW8gTWFydGluZXogQTAxMTc4MTQwIg0KZGF0ZTogIjIwMjUtMDMtMTkiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiAieWV0aSINCi0tLQ0KDQohW10oaHR0cHM6Ly9tZWRpYTQuZ2lwaHkuY29tL21lZGlhLzNvaGpVVk5YTHh6OHRXd1BNay9naXBoeS5naWY/Y2lkPTZjMDliOTUyaTNteTd1bWp4YXpleXUxeG5lcTR3NXg3bnF6ZGkzcHEwc3VpNDJqbiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmcmlkPWdpcGh5LmdpZiZjdD1nKQ0KDQojIEluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcmlhcyANCmBgYHtyfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQojIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikNCmxpYnJhcnkoZHBseXIpDQojIGluc3RhbGwucGFja2FnZXMoImx1YnJpZGF0ZSIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCiMgaW5zdGFsbC5wYWNrYWdlcygiTWF0cml4IikNCmxpYnJhcnkoTWF0cml4KQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJhcnVsZXMiKQ0KbGlicmFyeShhcnVsZXMpDQojIGluc3RhbGwucGFja2FnZXMoImFydWxlc1ZpeiIpDQpsaWJyYXJ5KGFydWxlc1ZpeikNCiMgaW5zdGFsbC5wYWNrYWdlcygiZGF0YXNldHMiKQ0KbGlicmFyeShkYXRhc2V0cykNCiMgaW5zdGFsbC5wYWNrYWdlcygicGx5ciIpDQpsaWJyYXJ5KHBseXIpDQoNCmBgYA0KDQojIEltcG9ydGFyIGxhIGJhc2UgZGUgZGF0b3MNCmBgYHtyfQ0KIyBmaWxlLmNob29zZSgpDQpiZCA8LSByZWFkLmNzdigiQzpcXFVzZXJzXFxlbGlzZVxcRG93bmxvYWRzXFxhYmFycm90ZXMuY3N2IikNCmBgYA0KDQojIEVudGVuZGVyIGxhIGJhc2UgZGUgZGF0b3MNCmBgYHtyfQ0Kc3VtbWFyeShiZCkNCnN0cihiZCkNCmhlYWQoYmQsIG49MTApDQp0YWlsKGJkLCBuPTEwKQ0KI2RwbHlyOjpjb3VudChiZCwgdmNDbGF2ZVRpZW5kYSwgc29ydD1UUlVFKQ0KI2RwbHlyOjpjb3VudChiZCwgRGVzY0dpcm8sIHNvcnQ9VFJVRSkNCiNkcGx5cjo6Y291bnQoYmQsIEZlY2hhLCBzb3J0PVRSVUUpDQojZHBseXI6OmNvdW50KGJkLCBIb3JhLCBzb3J0PVRSVUUpDQojZHBseXI6OmNvdW50KGJkLCBNYXJjYSwgc29ydD1UUlVFKQ0KI2RwbHlyOjpjb3VudChiZCwgRmFicmljYW50ZSwgc29ydD1UUlVFKQ0KI2RwbHlyOjpjb3VudChiZCwgUHJvZHVjdG8sIHNvcnQ9VFJVRSkNCiNkcGx5cjo6Y291bnQoYmQsIE5vbWJyZURlcGFydGFtZW50bywgc29ydD1UUlVFKQ0KI2RwbHlyOjpjb3VudChiZCwgTm9tYnJlRmFtaWxpYSwgc29ydD1UUlVFKQ0KI2RwbHlyOjpjb3VudChiZCwgTm9tYnJlQ2F0ZWdvcmlhLCBzb3J0PVRSVUUpDQojZHBseXI6OmNvdW50KGJkLCBFc3RhZG8sIHNvcnQ9VFJVRSkNCiNkcGx5cjo6Y291bnQoYmQsIFRpcG8udWJpY2FjacOzbiwgc29ydD1UUlVFKQ0KI2RwbHlyOjpjb3VudChiZCwgR2lybywgc29ydD1UUlVFKQ0KI2RwbHlyOjpjb3VudChiZCwgSG9yYS5pbmljaW8sIHNvcnQ9VFJVRSkNCiNkcGx5cjo6Y291bnQoYmQsIEhvcmEuY2llcnJlLCBzb3J0PVRSVUUpDQpgYGANCg0KIyBMaW1waWFyIGxhIGJhc2UgZGUgZGF0b3MgDQoNCiMjIFRlY25pY2EgMSBSZW1vdmVyIHZhbG9yZXMgaXJyZWxldmFudGVzIA0KYGBge3J9DQojIEVsaW1pbmFyIGNvbHVtbmFzDQpiZDEgPC0gYmQNCmJkMSA8LSBzdWJzZXQoYmQxLCBzZWxlY3QgPSAtYyhQTFUsIENvZGlnby5CYXJyYXMpKQ0KDQojIEVsaW1pbmFyIHJlbmdsb25lcw0KDQpiZDIgPC0gYmQxDQpiZDIgPC0gYmQyW2JkMiRQcmVjaW8gPiAwLCBdDQpzdW1tYXJ5KGJkMSRQcmVjaW8pDQpzdW1tYXJ5KGJkMiRQcmVjaW8pDQpgYGANCiMjIFRlY25pY2EgMi4gcmVtb3ZlciB2YWxvcmVzIGR1cGxpY2Fkb3MNCmBgYHtyfQ0KIyBDdWFudG9zIHJlbmdsb25lcyBkdXBsaWNhZG9zIHRlbmVtb3M/DQpzdW0oZHVwbGljYXRlZChiZDIpKQ0KDQojIEN1YWxlcyBzb24gbG9zIHJlbmdsb25lcyBkdXBsaWNhZG9zIA0KYmQyW2R1cGxpY2F0ZWQoYmQyKSxdDQoNCiMgRWxpbWluYXIgcmVuZ2xvbmVzIGR1cGxpY2Fkb3MNCmJkMyA8LSBiZDINCmJkMyA8LSBkaXN0aW5jdChiZDMpDQpgYGANCg0KIyMgVGVjbmljYXMgMy4gRWxpbWluYXIgZXJyb3JlcyB0aXBvZ3JhZmljb3MgeSBzaW1pbGFyZXMgDQpgYGB7cn0NCiMgQ2FudGlkYWRlcyBlbiBlbnRlcm9zIA0KYmQ0IDwtIGJkMw0KYmQ0JFVuaWRhZGVzIDwtIGNlaWxpbmcoYmQ0JFVuaWRhZGVzKQ0KYGBgDQoNCiMjIFRlY25pY2EgNC4gQ29udmVydGlyIHRpcG9zIGRlIGRhdG9zDQpgYGB7cn0NCiMgQ29udmVydGlyIGRlIGNhcmFjdGVyIGEgZmVjaGENCmJkNSA8LSBiZDQNCmJkNSRGZWNoYSA8LSBhcy5EYXRlKGJkNSRGZWNoYSwgZm9ybWF0ID0gIiVkLyVtLyVZIikNCg0KIyBDb252ZXJ0aXIgZGUgY2FyYWN0ZXIgZW50ZXJvDQpiZDYgPC0gYmQ1DQpiZDYkSG9yYSA8LSBzdWJzdHIoYmQ2JEhvcmEsIHN0YXJ0PTEsIHN0b3A9MikNCmJkNiRIb3JhIDwtIGFzLmludGVnZXIoYmQ2JEhvcmEpDQpgYGANCg0KIyMgVGVjbmljYSA1LiBSZWVtcGxhemFyIHZhbG9yZXMgZmFsdGFudGVzIA0KYGBge3J9DQojIEN1YW50b3MgTkFTIHRlbmdvIGVuIGxhIGJhc2UgZGUgZGF0b3MgDQpzdW0oaXMubmEoYmQ2KSkNCnN1bShpcy5uYShiZCkpDQoNCiMgQ3VhbnRvcyBOQVMgdGVuZ28gcG9yIFZhcmlhYmxlIA0Kc2FwcGx5KGJkLCBmdW5jdGlvbih4KSBzdW0oaXMubmEoeCkpKQ0KDQojIE9wY2lvbiAxLiBCb3JyYXIgdG9kb3MgbG9zIE5BUyBkZSB1bmEgdGFibGEgDQojIGJkMTAwIDwtIG5hLm9taXQoYmQpDQoNCiMgT3BjaW9uIDIuIFJlZW1wbGF6YXIgbG9zIE5BIGNvbiBDRVJPUw0KIyBiZDEwMSA8LSBiZA0KIyBiZDEwMVtpcy5uYShiZDEwMSldPC0wDQoNCiMgT3BjaW9uIDMuIFJlZW1wbGF6YXIgbG9zIE5BUyBjb24gZWwgUFJPTUVESU8gDQojIGJkMTAyIDwtIGJkDQojIGJkMTAyJFBMVXtpcy5uYShiZDEwMiRQTFUpfTwtIG1lYW4oYmQxMDIkUExVLCBuYS5ybT1UUlVFKQ0KYGBgDQoNCiMjIFRlY25pY2EgNi4gQ29ycmVjY2lvbmVzIHBvciBtZXRvZG9zIGVzdGFkaXN0aWNvcw0KYGBge3J9DQpib3hwbG90KGJkNiRQcmVjaW8sIGhvcml6b250YWwgPSBUUlVFKQ0KYm94cGxvdChiZDYkVW5pZGFkZXMsIGhvcml6b250YWwgPSBUUlVFKQ0KYGBgDQoNCiMgQWdyZWdhciBjb2x1bW5hcyANCmBgYHtyfQ0KIyBBZ3JlZ2FyIGRpYSBkZSBsYSBzZW1hbmENCmJkNiREaWFfU2VtYW5hIDwtIHdkYXkoYmQ2JEZlY2hhKQ0KDQojIEFncmVnYXIgZWwgc3VidG90YWwgZGUgbGEgdmVudGENCmJkNiRTdWJ0b3RhbCA8LSBiZDYkUHJlY2lvICogYmQ2JFVuaWRhZGVzDQpgYGANCg0KIyBFeHBvcnRhciBsYSBiYXNlIGRlIGRhdG9zDQpgYGB7cn0NCiN3cml0ZS5jc3YoYmQ2LCBmaWxlPSJhYmFycm90ZXNfbGltaWEuY3N2Iiwgcm93Lm5hbWVzPUZBTFNFKQ0KYGBgDQoNCiMgR2VuZXJhciBNYXJrZXQgQmFza2V0IEFuYWxpc2lzIA0KYGBge3J9DQojT3JkZW5hciBkZSBtZW5vciBhIG1heW9yIGxhIGNvbHVtbmEgVGlja2V0DQpiZDcgPC0gYmQ2DQpiZDcgPC0gYmQ3W29yZGVyKGJkNyRGLlRpY2tldCksXQ0KDQojR2VuZXJhciBlbCBjYW5hc3RvDQpiYXNrZXQgPC0gZGRwbHkoYmQ3LGMoIkYuVGlja2V0IiksIGZ1bmN0aW9uKGJkNylwYXN0ZShiZDckTWFyY2EsIGNvbGxhcHNlID0gIjoiICkpDQoNCiNFbGltaW5hciBsYSBjb2x1bW5hIFRpY2tldA0KYmFza2V0JEYuVGlja2V0IDwtIE5VTEwNCg0KI1Jlbm9tYnJhciBub21icmUgZGUgY29sdW1uYSBhIE1hcmNhDQpjb2xuYW1lcyhiYXNrZXQpIDwtIGMoIk1hcmNhIikNCg0KI0V4cG9ydGFyIGJhc2tldA0Kd3JpdGUuY3N2KGJhc2tldCwgZmlsZT0iYmFza2V0LmNzdiIsIHJvdy5uYW1lcz1GQUxTRSkNCg0KI0ltcG9ydGFyIGxhIGJhc2UgZGUgZGF0b3MNCiNmaWxlLmNob29zZSgpDQp0ciA8LSByZWFkLnRyYW5zYWN0aW9ucygiQzpcXFVzZXJzXFxlbGlzZVxcRGVza3RvcFxcUlxcYmFza2V0LmNzdiIsIGZvcm1hdCA9ICJiYXNrZXQiLCBzZXAgPSAiOiIpDQpyZWdsYXMuYXNvY2lhY2lvbiA8LSBhcHJpb3JpKHRyLCBwYXJhbWV0ZXIgPSBsaXN0KHN1cHA9MC4wMDEsIGNvbmY9MC4yLCBtYXhsZW49MTApKQ0Kc3VtbWFyeShyZWdsYXMuYXNvY2lhY2lvbikNCmluc3BlY3QocmVnbGFzLmFzb2NpYWNpb24pDQoNCiNPcmRlbmFyIHJlZ2xhcyBkZSBhc29jaWFjaW9uDQpyZWdsYXMuYXNvY2lhY2lvbiA8LSBzb3J0KHJlZ2xhcy5hc29jaWFjaW9uLCBieT0iY29uZmlkZW5jZSIsIGRlY3JlYXNpbmcgPSBUUlVFKQ0KDQojIEdyYWZpY2FyIFRvcCAxMCByZWdsYXMgZGUgYXNvY2lhY2lvbiANCnRvcDEwcmVnbGFzIDwtIGhlYWQocmVnbGFzLmFzb2NpYWNpb24sIG49MTAsIGJ5PSJjb25maWRlbmNlIikNCiNwbG90KHJlZ2xhcy5hc29jaWFjaW9uLCBtZXRob2Q9ImdyYXBoIiwgZW5naW5lPSJodG1sd2lkZ2V0IikNCmBgYA0KIVtdKEM6XFxVc2Vyc1xcZWxpc2VcXERvd25sb2Fkc1xcYS0xLnBuZykNCg0KIVtdKEM6XFxVc2Vyc1xcZWxpc2VcXERvd25sb2Fkc1xcYi5QTkcpDQoNCiMgQ29uY2x1Y2lvbmVzDQpFbiBlc3RhIGFjdGl2aWRhZCBzZWd1aW1vcyBwcm9ncmVzYW5kbyBjb24gZWwgY29ub2NpbWllbnRvIGJhc2ljbyBkZSBwcm9ncmFtYWNpb24gZW4gKipSKiogeSBlbiBhcmNoaXZvcyAqKlIgTWFya2Rvd24qKiwgZW1wZXphbW9zIGluc2VyYW5kbyB1bmEgYmFzZSBkZSBkYXRvcyBjb24gbXVjaGEgaW5mb3JtYWNpb24uIERlc3B1ZXMgZGUgZXN0byBlbXBlemFtb3MgYSBhbmFsaXphciB5IG9yZGVuYXIgbG9zIGRhdG9zIGRlIGxhIGJhc2UgZGUgZGF0b3MuIFBhcmEgZXN0byB1dGlsaXphbW9zIGxhIGZ1bmNpb24gImNvdW50IiBlIGlkZW50aWZpY2Ftb3MgdG9kYXMgbGFzIHZhcmVhYmxlcyBxdWUgc2VhbiBjaGFyYWN0ZXJlcy4gDQoNCllhIHRlbmllbmRvIGxvcyBkYXRvcyBzZXBhcmFkb3MgeSBhbmFsaXphZG9zIHBvciBlbCBwcm9ncmFtYSBlbXBlemFtb3MgYSByZWFsaXphciBkaWZlcmVudGVzIHRlY25pY2FzIHBhcmEgbGEgbGltcGllc2EgZGUgbGEgYmFzZSBkZSBkYXRvcy4gRW4gdG90YWwgcmVhbGl6YW1vcyA2IHRlY25pY2FzIGRpZmVyZW50ZXMgcGFyYSBwdXJpZmljYXIgbG9zIGRhdG9zIGNvbiBsb3MgcXVlIHNlIHZhbiBhIHRyYWJhamFyLiBZYSB0ZW5pZW5kbyBsb3MgZGF0b3MgImxpbXBpb3MiIG1vZGlmaWNhbW9zIGxhcyB0YWJsYXMgZXhpc3RlbnRlcyBwYXJhIHF1ZSB0ZW5nYW4gbGFzIGNhcmFjdGVyaXN0aWNhcyBxdWUgb2N1cGFtb3MuIFlhIHRlbmllbmRvIGxhIHRhYmxhIGZpbmFsIGV4cG9ydGFtb3MgZXN0b3MgZGF0b3MgeSBnZW5lcmFtb3MgZWwgQmFza2V0IE1hcmtldCBBbmFsaXNpcy4gRGVzcHVlcyBkZSBlc3RvIGxvIGdyYWZpY2Ftb3MgZGUgbWFuZXJhIHZpc3VhbCBwYXJhIHBvZGVyIGlkZW50aWZpY2FyIGxhcyBjb3JyZWxhY2lvbmVzIHF1ZSB0aWVuZW4gY2llcnRvcyBwcm9kdWN0b3MgY29uIG90cm9zIHkgY29tbyBsYSBzZWxlY2lvbiBkZSBlc3RvcyBnZW5lcmEgdGVuZGVuY2lhcyBkZSBjb21wcmEgcG9yIG90cm9zIHByb2R1Y3Rvcy4gDQoNCiA=