Analisis de las Ventas de Supermercado

Paso 0. Instalar paquetes y llamar librerias

#install.packages("dplyr")
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
#install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.4
## ✔ ggplot2   3.4.1     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.1.8
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
#install.packages("janitor")
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
#install.packages("lubridate")
library(lubridate)

Paso 1. Importar la base de datos

#file.choose()
#bd <- read.csv("C:\\Users\\lesda\\OneDrive\\Documentos\\Manipulación de datos\\supermercado.R")

Paso 2. Enteder la base de datos

#summary(bd)

#count(bd, BillNo, sort=TRUE)
#count(bd, Itemname, sort=TRUE)
#count(bd, Date, sort=TRUE)
#count(bd, Country, sort=TRUE)

#tibble(bd)

#head(bd)
#tail(bd, n=7)

#tabyl(bd, Itemname, Country)

Hallazgos

# 1. No existe una columna de revenue 
# 2. Hay precios y cantidades negativos 
# 3. Hay NA's en Customer ID
# 4. Hay una columna con fecha y hora juntas

Paso 3. Limpiar la base de datos

# Técnica 2. Remover valores duplicados

# ¿Cuantos renglones duplicados tenemos?
#bd[duplicated(bd),]
#sum(duplicated(bd))

# Eliminar renglones duplicados 
#bd1 <- bd
#bd1 <- distinct(bd1)  

# Técnica 3. Resolver errores tipograficos y similares 

# Precios en absoluto
#bd2 <- bd1
#bd2$Price <- abs(bd2$Price)  
#summary(bd2)  

# Cantidades en enteros
# checar con alguien más si usaron abs en vez de cieling (porque en el ejemplo cuando cambia q es con ceiling)
#bd3 <- bd2
#bd3$Quantity <- abs(bd3$Quantity)
#summary(bd3)

# Tecnica 5. Tratar valores faltantes (NA)

# ¿Cuantos NA tengo en la base de datos?
#sum(is.na(bd3))

# ¿Cuantos NA tengo por variable? 
#sapply(bd3, function(x) sum(is.na(x)))

# Reemplazar los NA con CEROS 
#bd4 <- bd3
#bd4[is.na(bd4)] <-0  
#summary(bd4)  

# Técnica 6. Verificar datos con métodos estadisticos 
#bd5 <- bd4
#boxplot(bd5$Price, horizontal = TRUE)
#boxplot(bd5$Quantity, horizontal = TRUE)

Paso 4. Manipular base de datos

# Agregar columnas 
#bd5$Revenue <- bd5$Price*bd5$Quantity
#summary(bd5)  

Paso 5. Exportar base de datos limpia

#bd_limpia <- bd5
#write.csv(bd_limpia, file="LESsupermercado_limpia.csv", row.names = FALSE)
LS0tDQp0aXRsZTogIlNVUEVSTUVSQ0FETyINCmF1dGhvcjogIkxlc2x5IERhcmlhbiBSb21lcm8gVmF6cXVleiAtIEEwMTc3MTEyNyINCmRhdGU6ICIyMDIzLTAzLTAzIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCiFbXShDOlxcVXNlcnNcXGxlc2RhXFxPbmVEcml2ZVxcRXNjcml0b3Jpb1xcU00ucG5nKQ0KDQojIEFuYWxpc2lzIGRlIGxhcyBWZW50YXMgZGUgU3VwZXJtZXJjYWRvDQoNCiMjIFBhc28gMC4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyaWFzDQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpDQpsaWJyYXJ5KGRwbHlyKQ0KI2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCiNpbnN0YWxsLnBhY2thZ2VzKCJqYW5pdG9yIikNCmxpYnJhcnkoamFuaXRvcikNCiNpbnN0YWxsLnBhY2thZ2VzKCJsdWJyaWRhdGUiKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpgYGANCg0KIyMgUGFzbyAxLiBJbXBvcnRhciBsYSBiYXNlIGRlIGRhdG9zDQoNCmBgYHtyfQ0KI2ZpbGUuY2hvb3NlKCkNCiNiZCA8LSByZWFkLmNzdigiQzpcXFVzZXJzXFxsZXNkYVxcT25lRHJpdmVcXERvY3VtZW50b3NcXE1hbmlwdWxhY2nDs24gZGUgZGF0b3NcXHN1cGVybWVyY2Fkby5SIikNCmBgYA0KDQojIyBQYXNvIDIuIEVudGVkZXIgbGEgYmFzZSBkZSBkYXRvcyANCg0KYGBge3J9DQojc3VtbWFyeShiZCkNCg0KI2NvdW50KGJkLCBCaWxsTm8sIHNvcnQ9VFJVRSkNCiNjb3VudChiZCwgSXRlbW5hbWUsIHNvcnQ9VFJVRSkNCiNjb3VudChiZCwgRGF0ZSwgc29ydD1UUlVFKQ0KI2NvdW50KGJkLCBDb3VudHJ5LCBzb3J0PVRSVUUpDQoNCiN0aWJibGUoYmQpDQoNCiNoZWFkKGJkKQ0KI3RhaWwoYmQsIG49NykNCg0KI3RhYnlsKGJkLCBJdGVtbmFtZSwgQ291bnRyeSkNCmBgYA0KDQojIyBIYWxsYXpnb3MgDQoNCmBgYHtyfQ0KIyAxLiBObyBleGlzdGUgdW5hIGNvbHVtbmEgZGUgcmV2ZW51ZSANCiMgMi4gSGF5IHByZWNpb3MgeSBjYW50aWRhZGVzIG5lZ2F0aXZvcyANCiMgMy4gSGF5IE5BJ3MgZW4gQ3VzdG9tZXIgSUQNCiMgNC4gSGF5IHVuYSBjb2x1bW5hIGNvbiBmZWNoYSB5IGhvcmEganVudGFzDQoNCg0KYGBgDQoNCiMjIFBhc28gMy4gTGltcGlhciBsYSBiYXNlIGRlIGRhdG9zIA0KDQpgYGB7cn0NCiMgVMOpY25pY2EgMi4gUmVtb3ZlciB2YWxvcmVzIGR1cGxpY2Fkb3MNCg0KIyDCv0N1YW50b3MgcmVuZ2xvbmVzIGR1cGxpY2Fkb3MgdGVuZW1vcz8NCiNiZFtkdXBsaWNhdGVkKGJkKSxdDQojc3VtKGR1cGxpY2F0ZWQoYmQpKQ0KDQojIEVsaW1pbmFyIHJlbmdsb25lcyBkdXBsaWNhZG9zIA0KI2JkMSA8LSBiZA0KI2JkMSA8LSBkaXN0aW5jdChiZDEpICANCg0KIyBUw6ljbmljYSAzLiBSZXNvbHZlciBlcnJvcmVzIHRpcG9ncmFmaWNvcyB5IHNpbWlsYXJlcyANCg0KIyBQcmVjaW9zIGVuIGFic29sdXRvDQojYmQyIDwtIGJkMQ0KI2JkMiRQcmljZSA8LSBhYnMoYmQyJFByaWNlKSAgDQojc3VtbWFyeShiZDIpICANCg0KIyBDYW50aWRhZGVzIGVuIGVudGVyb3MNCiMgY2hlY2FyIGNvbiBhbGd1aWVuIG3DoXMgc2kgdXNhcm9uIGFicyBlbiB2ZXogZGUgY2llbGluZyAocG9ycXVlIGVuIGVsIGVqZW1wbG8gY3VhbmRvIGNhbWJpYSBxIGVzIGNvbiBjZWlsaW5nKQ0KI2JkMyA8LSBiZDINCiNiZDMkUXVhbnRpdHkgPC0gYWJzKGJkMyRRdWFudGl0eSkNCiNzdW1tYXJ5KGJkMykNCg0KIyBUZWNuaWNhIDUuIFRyYXRhciB2YWxvcmVzIGZhbHRhbnRlcyAoTkEpDQoNCiMgwr9DdWFudG9zIE5BIHRlbmdvIGVuIGxhIGJhc2UgZGUgZGF0b3M/DQojc3VtKGlzLm5hKGJkMykpDQoNCiMgwr9DdWFudG9zIE5BIHRlbmdvIHBvciB2YXJpYWJsZT8gDQojc2FwcGx5KGJkMywgZnVuY3Rpb24oeCkgc3VtKGlzLm5hKHgpKSkNCg0KIyBSZWVtcGxhemFyIGxvcyBOQSBjb24gQ0VST1MgDQojYmQ0IDwtIGJkMw0KI2JkNFtpcy5uYShiZDQpXSA8LTAgIA0KI3N1bW1hcnkoYmQ0KSAgDQoNCiMgVMOpY25pY2EgNi4gVmVyaWZpY2FyIGRhdG9zIGNvbiBtw6l0b2RvcyBlc3RhZGlzdGljb3MgDQojYmQ1IDwtIGJkNA0KI2JveHBsb3QoYmQ1JFByaWNlLCBob3Jpem9udGFsID0gVFJVRSkNCiNib3hwbG90KGJkNSRRdWFudGl0eSwgaG9yaXpvbnRhbCA9IFRSVUUpDQoNCmBgYA0KDQojIyBQYXNvIDQuIE1hbmlwdWxhciBiYXNlIGRlIGRhdG9zIA0KDQpgYGB7cn0NCiMgQWdyZWdhciBjb2x1bW5hcyANCiNiZDUkUmV2ZW51ZSA8LSBiZDUkUHJpY2UqYmQ1JFF1YW50aXR5DQojc3VtbWFyeShiZDUpICANCg0KYGBgDQoNCiMjIFBhc28gNS4gRXhwb3J0YXIgYmFzZSBkZSBkYXRvcyBsaW1waWEgDQoNCmBgYHtyfQ0KI2JkX2xpbXBpYSA8LSBiZDUNCiN3cml0ZS5jc3YoYmRfbGltcGlhLCBmaWxlPSJMRVNzdXBlcm1lcmNhZG9fbGltcGlhLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KYGBg