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