Instalar paquetes y llamar
librerias
#install.packages("tidyverse") #Paquete global para manipulacion y analisis de datos
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#install.packages("dplyr") #Para filtrar bases de datos
library(dplyr)
#install.packages("janitor") #examinar y limpiar bases de datos sucias
library(janitor)
##
## Attaching package: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
#install.packages("Matrix") #Para trabajar con matrices
library(Matrix)
##
## Attaching package: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
#install.packages("arules") #Genera reglas de asociacion
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") #Visualizar reglas de asociacion
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
‹span style=“color: red;”›Importar la base de datos
# file.choose()
df<- read.csv("/Users/eugenio/Desktop/TEC/Semestre 3/Semana Tec Bootcamp Programacion/Bases_de_Datos/abarrotes.csv")
‹span style=“color: red;”›Análisis Descriptivo
#summary (df)
#str (df)
#df %>%
# dplyr::count(vcClaveTienda) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(DescGiro) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(Codigo.Barras) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(PLU) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(Fecha) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(Hora) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(Marca) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(Fabricante) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(Producto) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(Precio) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(Ult.Costo) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(Unidades) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(F.Ticket) %>%
# arrange(desc(n))
#df %>%
# dplyr::count(NombreDepartamento) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(NombreFamilia) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(NombreCategoria) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(Estado) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(Mts.2) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(`Tipo.ubicación`) %>%
#arrange(desc(n)) # Backticks required for column names with special characters
#df %>%
# dplyr::count(Giro) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(Hora.inicio) %>%
#arrange(desc(n))
#df %>%
# dplyr::count(Hora.cierre) %>%
#arrange(desc(n))
Tablas
# Tabla de Tienda y Departamento
#tabyl(df,vcClaveTiedna, NombreDepartamento)
# Tabla de Estado y Hora de Inicio
tabyl(df, Estado, Hora.inicio)
## Estado 07:00 08:00 09:00
## Chiapas 4051 0 0
## Jalisco 0 0 6629
## Nuevo León 0 96469 0
## Quintana Roo 0 10021 0
## Sinaloa 83455 0 0
Limpieza de Datos
Técnica 1. Eliminar valores
irrelevantes
# Eliminar columnas
df <- subset(df, select = -c(PLU))
# Eliminar renglones
df <- df[df$Precio >0, ]
Técnica 2. Eliminar valores
repetidos
df <- distinct(df)
Técnica 3. Corregir errores tipográficos y
similares
df$Unidades <- ceiling(df$Unidades)
summary(df$Unidades)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 1.000 1.261 1.000 96.000
Técnica 4. Convertir tipos de
datos
# Convertir de Caracter a Fecha
df$Fecha <- as.Date(df$Fecha, format="%d/%m/%Y")
str(df$Fecha)
## Date[1:200473], format: "2020-06-19" "2020-06-19" "2020-06-19" "2020-06-19" "2020-06-19" ...
summary(df$Fecha)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## "2020-05-01" "2020-06-06" "2020-07-11" "2020-07-18" "2020-08-29" "2020-11-11"
Técnica 5. Tratar valores
faltantes
# Borrar todos los NAs
# df <- na.omit(df)
# Reemplazar los NAs con CEROS
# df[is.na(df)] <- 0
# Reemplazar los NAs con el PROMEDIO
# df$altura[js.na(df$altura)] <- mean(df$altura, na.rm=TRUE)
Técnica 6. Herramientas
Estadísticas
boxplot(df$Precio, horizontal = TRUE)

boxplot(df$Unidades, horizontal = TRUE)

Generar basket
# Ordenar de menor a mayor la columna Ticket
df <- df[order(df$F.Ticket), ]
head(df)
## vcClaveTienda DescGiro Codigo.Barras Fecha Hora
## 1 MX001 Abarrotes 7.501021e+12 2020-06-19 08:16:21
## 2 MX001 Abarrotes 7.501032e+12 2020-06-19 08:23:33
## 3 MX001 Abarrotes 7.501000e+12 2020-06-19 08:24:33
## 4 MX001 Abarrotes 7.501031e+12 2020-06-19 08:24:33
## 5 MX001 Abarrotes 7.501026e+12 2020-06-19 08:26:28
## 6 MX001 Abarrotes 7.501025e+12 2020-06-19 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 FLASH ALEN
## Producto Precio Ult.Costo Unidades F.Ticket
## 1 Nutri Leche 1 Litro 16.0 12.31 1 1
## 2 DANUP STRAWBERRY P/BEBER 350GR NAL 14.0 14.00 1 2
## 3 Rebanadas Bimbo 2Pz 5.0 5.00 1 3
## 4 Pepsi N.R. 400Ml 8.0 8.00 1 3
## 5 Detergente Blanca Nieves 500G 19.5 15.00 1 4
## 6 Flash Xtra Brisa Marina 500Ml 9.5 7.31 1 4
## NombreDepartamento NombreFamilia NombreCategoria
## 1 Abarrotes Lacteos y Refrigerados Leche
## 2 Abarrotes Lacteos y Refrigerados Yogurt
## 3 Abarrotes Pan y Tortilla Pan Dulce Empaquetado
## 4 Abarrotes Bebidas Refrescos Plástico (N.R.)
## 5 Abarrotes Limpieza del Hogar Lavandería
## 6 Abarrotes Limpieza del Hogar Limpiadores Líquidos
## 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
tail(df)
## vcClaveTienda DescGiro Codigo.Barras Fecha Hora
## 107247 MX004 Carnicería 1.024877e+10 2020-10-15 11:51:40
## 167624 MX004 Carnicería 7.501080e+12 2020-10-15 11:51:40
## 149282 MX004 Carnicería 7.501055e+12 2020-10-15 11:54:37
## 168603 MX004 Carnicería 7.501214e+12 2020-10-15 11:56:52
## 161046 MX004 Carnicería 7.501031e+12 2020-10-15 12:01:54
## 112823 MX004 Carnicería 7.500470e+07 2020-10-15 12:02:36
## Marca Fabricante Producto
## 107247 YEMINA HERDEZ PASTA SPAGHETTI YEMINA 200G
## 167624 DEL FUERTE ALIMENTOS DEL FUERTE PURE DE TOMATE DEL FUERTE 345G
## 149282 COCA COLA ZERO COCA COLA COCA COLA ZERO 600ML
## 168603 DIAMANTE EMPACADOS ARROZ DIAMANTE225G
## 161046 PEPSI PEPSI-COLA MEXICANA PEPSI N. R. 500ML
## 112823 COCA COLA COCA COLA COCA COLA RETORNABLE 500ML
## Precio Ult.Costo Unidades F.Ticket NombreDepartamento
## 107247 7 5.38 2 450032 Abarrotes
## 167624 12 9.23 1 450032 Abarrotes
## 149282 15 11.54 2 450034 Abarrotes
## 168603 11 8.46 1 450037 Abarrotes
## 161046 10 7.69 1 450039 Abarrotes
## 112823 10 7.69 8 450040 Abarrotes
## NombreFamilia NombreCategoria Estado Mts.2
## 107247 Sopas y Pastas Fideos, Spaguetti, Tallarines Sinaloa 53
## 167624 Salsas y Sazonadores Salsa para Spaguetti Sinaloa 53
## 149282 Bebidas Refrescos Retornables Sinaloa 53
## 168603 Granos y Semillas Arroz Sinaloa 53
## 161046 Bebidas Refrescos Plástico (N.R.) Sinaloa 53
## 112823 Bebidas Refrescos Retornables Sinaloa 53
## Tipo.ubicación Giro Hora.inicio Hora.cierre
## 107247 Esquina Abarrotes 07:00 23:00
## 167624 Esquina Abarrotes 07:00 23:00
## 149282 Esquina Abarrotes 07:00 23:00
## 168603 Esquina Abarrotes 07:00 23:00
## 161046 Esquina Abarrotes 07:00 23:00
## 112823 Esquina Abarrotes 07:00 23:00
# Generar el basket
basket <- ddply(df,c("F.Ticket"), function(df)paste(df$Marca, collapse = ","))
# Eliminar el Numero de Ticket
LS0tCnRpdGxlOiAiTUJBIgphdXRob3I6ICJBZHJpw6FuIEVsaXpvbmRvIEEwMDgzNTE2MCIKZGF0ZTogIjIwMjQtMDktMTAiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRSAKICAgIHRvY19mbG9hdDogVFJVRSAKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUgCiAgICB0aGVtZTogY29zbW8gCi0tLQoKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXJpYXM8L3NwYW4+CmBgYHtyfQojaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikgI1BhcXVldGUgZ2xvYmFsIHBhcmEgbWFuaXB1bGFjaW9uIHkgYW5hbGlzaXMgZGUgZGF0b3MKbGlicmFyeSh0aWR5dmVyc2UpCgojaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKSAjUGFyYSBmaWx0cmFyIGJhc2VzIGRlIGRhdG9zCmxpYnJhcnkoZHBseXIpCgojaW5zdGFsbC5wYWNrYWdlcygiamFuaXRvciIpICNleGFtaW5hciB5IGxpbXBpYXIgYmFzZXMgZGUgZGF0b3Mgc3VjaWFzCmxpYnJhcnkoamFuaXRvcikKCiNpbnN0YWxsLnBhY2thZ2VzKCJNYXRyaXgiKSAjUGFyYSB0cmFiYWphciBjb24gbWF0cmljZXMKbGlicmFyeShNYXRyaXgpCgojaW5zdGFsbC5wYWNrYWdlcygiYXJ1bGVzIikgI0dlbmVyYSByZWdsYXMgZGUgYXNvY2lhY2lvbgpsaWJyYXJ5KGFydWxlcykKCgojaW5zdGFsbC5wYWNrYWdlcygiYXJ1bGVzVml6IikgI1Zpc3VhbGl6YXIgcmVnbGFzIGRlIGFzb2NpYWNpb24KbGlicmFyeShhcnVsZXNWaXopCgojaW5zdGFsbC5wYWNrYWdlcygiZGF0YXNldHMiKQpsaWJyYXJ5KGRhdGFzZXRzKQoKI2luc3RhbGwucGFja2FnZXMoInBseXIiKQpsaWJyYXJ5KHBseXIpCmBgYAoKIyDigLlzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyLigLpJbXBvcnRhciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0KIyBmaWxlLmNob29zZSgpCmRmPC0gcmVhZC5jc3YoIi9Vc2Vycy9ldWdlbmlvL0Rlc2t0b3AvVEVDL1NlbWVzdHJlIDMvU2VtYW5hIFRlYyBCb290Y2FtcCBQcm9ncmFtYWNpb24vQmFzZXNfZGVfRGF0b3MvYWJhcnJvdGVzLmNzdiIpCgpgYGAKCiMg4oC5c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsi4oC6QW7DoWxpc2lzIERlc2NyaXB0aXZvPC9zcGFuPgpgYGB7cn0KI3N1bW1hcnkgKGRmKQojc3RyIChkZikKI2RmICU+JQogIyBkcGx5cjo6Y291bnQodmNDbGF2ZVRpZW5kYSkgJT4lCiAgI2FycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKICMgZHBseXI6OmNvdW50KERlc2NHaXJvKSAlPiUKICAjYXJyYW5nZShkZXNjKG4pKQoKI2RmICU+JQogIyBkcGx5cjo6Y291bnQoQ29kaWdvLkJhcnJhcykgJT4lCiAgI2FycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKICMgZHBseXI6OmNvdW50KFBMVSkgJT4lCiAjIGFycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKIyAgZHBseXI6OmNvdW50KEZlY2hhKSAlPiUKIyAgYXJyYW5nZShkZXNjKG4pKQoKI2RmICU+JQojICBkcGx5cjo6Y291bnQoSG9yYSkgJT4lCiMgIGFycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKICMgZHBseXI6OmNvdW50KE1hcmNhKSAlPiUKICAjYXJyYW5nZShkZXNjKG4pKQoKI2RmICU+JQogIyBkcGx5cjo6Y291bnQoRmFicmljYW50ZSkgJT4lCiAjIGFycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKIyAgZHBseXI6OmNvdW50KFByb2R1Y3RvKSAlPiUKIyAgYXJyYW5nZShkZXNjKG4pKQoKI2RmICU+JQojICBkcGx5cjo6Y291bnQoUHJlY2lvKSAlPiUKIyAgYXJyYW5nZShkZXNjKG4pKQoKI2RmICU+JQojICBkcGx5cjo6Y291bnQoVWx0LkNvc3RvKSAlPiUKIyAgYXJyYW5nZShkZXNjKG4pKQoKI2RmICU+JQogIyBkcGx5cjo6Y291bnQoVW5pZGFkZXMpICU+JQogIyBhcnJhbmdlKGRlc2MobikpCgojZGYgJT4lCiMgIGRwbHlyOjpjb3VudChGLlRpY2tldCkgJT4lCiAjIGFycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKICMgZHBseXI6OmNvdW50KE5vbWJyZURlcGFydGFtZW50bykgJT4lCiAgI2FycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKICMgZHBseXI6OmNvdW50KE5vbWJyZUZhbWlsaWEpICU+JQogICNhcnJhbmdlKGRlc2MobikpCgojZGYgJT4lCiAjIGRwbHlyOjpjb3VudChOb21icmVDYXRlZ29yaWEpICU+JQogICNhcnJhbmdlKGRlc2MobikpCgojZGYgJT4lCiAjIGRwbHlyOjpjb3VudChFc3RhZG8pICU+JQogICNhcnJhbmdlKGRlc2MobikpCgojZGYgJT4lCiAjIGRwbHlyOjpjb3VudChNdHMuMikgJT4lCiAgI2FycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKICMgZHBseXI6OmNvdW50KGBUaXBvLnViaWNhY2nDs25gKSAlPiUKICAjYXJyYW5nZShkZXNjKG4pKSAgIyBCYWNrdGlja3MgcmVxdWlyZWQgZm9yIGNvbHVtbiBuYW1lcyB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycwoKI2RmICU+JQogIyBkcGx5cjo6Y291bnQoR2lybykgJT4lCiAgI2FycmFuZ2UoZGVzYyhuKSkKCiNkZiAlPiUKICMgZHBseXI6OmNvdW50KEhvcmEuaW5pY2lvKSAlPiUKICAjYXJyYW5nZShkZXNjKG4pKQoKI2RmICU+JQogIyBkcGx5cjo6Y291bnQoSG9yYS5jaWVycmUpICU+JQogICNhcnJhbmdlKGRlc2MobikpCgoKYGBgCgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5UYWJsYXM8L3NwYW4+CmBgYHtyfQojIFRhYmxhIGRlIFRpZW5kYSB5IERlcGFydGFtZW50byAKI3RhYnlsKGRmLHZjQ2xhdmVUaWVkbmEsIE5vbWJyZURlcGFydGFtZW50bykKIyBUYWJsYSBkZSBFc3RhZG8geSBIb3JhIGRlIEluaWNpbyAKdGFieWwoZGYsIEVzdGFkbywgSG9yYS5pbmljaW8pCgpgYGAKCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+TGltcGllemEgZGUgRGF0b3M8L3NwYW4+CgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPlTDqWNuaWNhIDEuIEVsaW1pbmFyIHZhbG9yZXMgaXJyZWxldmFudGVzPC9zcGFuPgpgYGB7cn0KIyBFbGltaW5hciBjb2x1bW5hcyAKZGYgPC0gc3Vic2V0KGRmLCBzZWxlY3QgPSAtYyhQTFUpKQoKIyBFbGltaW5hciByZW5nbG9uZXMgCmRmIDwtIGRmW2RmJFByZWNpbyA+MCwgXQoKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPlTDqWNuaWNhIDIuIEVsaW1pbmFyIHZhbG9yZXMgcmVwZXRpZG9zPC9zcGFuPgpgYGB7cn0KZGYgPC0gZGlzdGluY3QoZGYpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5Uw6ljbmljYSAzLiBDb3JyZWdpciBlcnJvcmVzIHRpcG9ncsOhZmljb3MgeSBzaW1pbGFyZXM8L3NwYW4+CmBgYHtyfQpkZiRVbmlkYWRlcyA8LSBjZWlsaW5nKGRmJFVuaWRhZGVzKQpzdW1tYXJ5KGRmJFVuaWRhZGVzKQpgYGAKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5Uw6ljbmljYSA0LiBDb252ZXJ0aXIgdGlwb3MgZGUgZGF0b3M8L3NwYW4+CmBgYHtyfQojIENvbnZlcnRpciBkZSBDYXJhY3RlciBhIEZlY2hhCmRmJEZlY2hhIDwtIGFzLkRhdGUoZGYkRmVjaGEsIGZvcm1hdD0iJWQvJW0vJVkiKQpzdHIoZGYkRmVjaGEpCnN1bW1hcnkoZGYkRmVjaGEpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5Uw6ljbmljYSA1LiBUcmF0YXIgdmFsb3JlcyBmYWx0YW50ZXM8L3NwYW4+CmBgYHtyfQojIEJvcnJhciB0b2RvcyBsb3MgTkFzCiMgZGYgPC0gbmEub21pdChkZikKCiMgUmVlbXBsYXphciBsb3MgTkFzIGNvbiBDRVJPUwojIGRmW2lzLm5hKGRmKV0gPC0gMAoKIyBSZWVtcGxhemFyIGxvcyBOQXMgY29uIGVsIFBST01FRElPCiMgZGYkYWx0dXJhW2pzLm5hKGRmJGFsdHVyYSldIDwtIG1lYW4oZGYkYWx0dXJhLCBuYS5ybT1UUlVFKQoKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPlTDqWNuaWNhIDYuIEhlcnJhbWllbnRhcyBFc3RhZMOtc3RpY2FzPC9zcGFuPgpgYGB7cn0KYm94cGxvdChkZiRQcmVjaW8sIGhvcml6b250YWwgPSBUUlVFKQpib3hwbG90KGRmJFVuaWRhZGVzLCBob3Jpem9udGFsID0gVFJVRSkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+R2VuZXJhciBiYXNrZXQ8L3NwYW4+CmBgYHtyfQojIE9yZGVuYXIgZGUgbWVub3IgYSBtYXlvciBsYSBjb2x1bW5hIFRpY2tldApkZiA8LSBkZltvcmRlcihkZiRGLlRpY2tldCksIF0KaGVhZChkZikKdGFpbChkZikKCiMgR2VuZXJhciBlbCBiYXNrZXQKYmFza2V0IDwtIGRkcGx5KGRmLGMoIkYuVGlja2V0IiksIGZ1bmN0aW9uKGRmKXBhc3RlKGRmJE1hcmNhLCBjb2xsYXBzZSA9ICIsIikpCgojIEVsaW1pbmFyIGVsIE51bWVybyBkZSBUaWNrZXQgCgpgYGAKCgoK