#Análisis de las ventas de abarrotes

#Una empresa con 5 tiendas en el país solicita un análisis de sus ventas # de abarrotes entre mayo y noviembre de 2020

#Paso 0. Instalar paquetes y llamar librerías

#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.2.0
## ✔ 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 base de datos

#file.choose()
#bd<- read.csv("C:\\Users\\User-1\\Downloads\\TEC 4TO\\Nueva carpeta\\abarrotes.csv")

#Paso 2. Entender la base de datos

#summary(bd)

#count(bd,vcClaveTienda, sort=TRUE)
#count(bd,DescGiro, sort=TRUE)
#count(bd,Marca, sort=TRUE)
#count(bd,Fabricante, sort=TRUE)
#count(bd,Producto, sort=TRUE)
#count(bd,NombreDepartamento, sort=TRUE)
#count(bd,NombreFamilia, sort=TRUE)
#count(bd,NombreCategoria, sort=TRUE)
#count(bd,Estado, sort=TRUE)
#count(bd,Tipo.ubicación, sort=TRUE)
#count(bd,Giro, sort=TRUE)

#tibble(bd)

#head(bd)

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

#tabyl(bd, vcClaveTienda, NombreDepartamento)
#tabyl(bd, NombreFamilia, vcClaveTienda)

#Hallazgos # 1.Fecha sy las horas están en formato de caracter # 2.Precios negativos # 3.Falta de columna de ventas

#Paso 3. Limpiar la base de datos

#Existen 6 técnicas apra limpiar la base de datos

#Técnica 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(bd2)

#Técnica 2. Remover valores duplicados

  #¿Cuántos renglones duplicados tenemos?
  #bd2[duplicated(bd2),]
  #sum(duplicated(bd2))
  
  #Eliminar renglones duplicados
  #bd3<- bd2
  #bd3<- distinct(bd3)
  #summary(bd3)

#Técnica 3. Resolver errores tipográficos y similares

  #Precios en absoluto
  #bd4<-bd1
  #bd4$Precio <- abs(bd4$Precio)
  #summary(bd4)
  
  #Unidades en enteros
  #bd5 <- bd4
  #bd5$Unidades <- ceiling (bd5$Unidades)
  #summary(bd5)

#Técnica 4, Convertir los tipos de datos

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

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

#Técnica 5. Tratarvalores faltantes (NA)

  #¿Cuantos Na tengo en la base de datos?
  #sum(is.na(bd7))
  #sum(is.na(bd))
  
  #¿Cuantos NA tengo por variable?
  #sapply(bd,function(x) sum (is.na(x)))
  
  #Borrar todos los registros NA de una tabla
  #bd8<- bd
  #bd8<- na.omit(bd8)
  #summary(bd8)
  
  #Reemplazar los NA con CEROS
  #bd9<- bd
  #bd9[is.na(bd9)]<-0
  #summary(bd9)
  
  #Reemplazar los NA con el promedio
  #bd10<- bd
  #bd10$PLU[is.na(bd10$PLU)] <- mean(bd10$PLU, na.rm=TRUE)
  #summary(bd10)

#Técnica 6. Verificar datos con métodos estadísticos

  #Datos atípicos
  #bd11<- bd7
  #boxplot(bd11$Precio, horizontal=TRUE)
  #boxplot(bd11$Unidades, horizontal=TRUE)

#Paso 4. Manipulacion de base de datos

#Agregar columnas

#bd11$diadelasemana <- wday(bd11$Fecha)  
#summary (bd11)

#bd11$subtotal <- bd11$Precio*bd11$Unidades
#summary(bd11)

#Paso 5. Exportar base de datos limpia

#bd_limpia <- bd11
#write.csv(bd_limpia, file="Abarrotes_bdlimpia.csv", row.names= FALSE)
LS0tDQp0aXRsZTogIkFiYXJyb3RlcyINCmF1dGhvcjogIkx1aXMgQWRyaWFuIE1lbmRvemEgUmR6Ig0KZGF0ZTogIjIwMjMtMDMtMTgiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUcnVlDQogICAgdG9jX2Zsb2F0OiBUcnVlDQogICAgY29kZV9kb3dubG9hZDogVHJ1ZQ0KDQotLS0NCiFbXShodHRwczovL2ltYWdlcy5zZWd1bmRhbWFuby5teC9hcGkvdjEvc21teC9pbWFnZXMvOTQvOTQyODYwOTQ2OS5qcGc/cnVsZT13ZWJwX3dlYl9nYWxsZXJ5XzN4KQ0KDQojQW7DoWxpc2lzIGRlIGxhcyB2ZW50YXMgZGUgYWJhcnJvdGVzDQoNCiNVbmEgZW1wcmVzYSBjb24gNSB0aWVuZGFzIGVuIGVsIHBhw61zIHNvbGljaXRhIHVuIGFuw6FsaXNpcyBkZSBzdXMgdmVudGFzDQojIGRlIGFiYXJyb3RlcyBlbnRyZSBtYXlvIHkgbm92aWVtYnJlIGRlIDIwMjANCg0KI1Bhc28gMC4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcw0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKQ0KbGlicmFyeShkcGx5cikNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQojaW5zdGFsbC5wYWNrYWdlcygiamFuaXRvciIpDQpsaWJyYXJ5KGphbml0b3IpDQojaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikNCmxpYnJhcnkobHVicmlkYXRlKQ0KYGBgDQoNCiNQYXNvIDEuIEltcG9ydGFyIGJhc2UgZGUgZGF0b3MNCmBgYHtyfQ0KI2ZpbGUuY2hvb3NlKCkNCiNiZDwtIHJlYWQuY3N2KCJDOlxcVXNlcnNcXFVzZXItMVxcRG93bmxvYWRzXFxURUMgNFRPXFxOdWV2YSBjYXJwZXRhXFxhYmFycm90ZXMuY3N2IikNCmBgYA0KDQojUGFzbyAyLiBFbnRlbmRlciBsYSBiYXNlIGRlIGRhdG9zDQpgYGB7cn0NCiNzdW1tYXJ5KGJkKQ0KDQojY291bnQoYmQsdmNDbGF2ZVRpZW5kYSwgc29ydD1UUlVFKQ0KI2NvdW50KGJkLERlc2NHaXJvLCBzb3J0PVRSVUUpDQojY291bnQoYmQsTWFyY2EsIHNvcnQ9VFJVRSkNCiNjb3VudChiZCxGYWJyaWNhbnRlLCBzb3J0PVRSVUUpDQojY291bnQoYmQsUHJvZHVjdG8sIHNvcnQ9VFJVRSkNCiNjb3VudChiZCxOb21icmVEZXBhcnRhbWVudG8sIHNvcnQ9VFJVRSkNCiNjb3VudChiZCxOb21icmVGYW1pbGlhLCBzb3J0PVRSVUUpDQojY291bnQoYmQsTm9tYnJlQ2F0ZWdvcmlhLCBzb3J0PVRSVUUpDQojY291bnQoYmQsRXN0YWRvLCBzb3J0PVRSVUUpDQojY291bnQoYmQsVGlwby51YmljYWNpw7NuLCBzb3J0PVRSVUUpDQojY291bnQoYmQsR2lybywgc29ydD1UUlVFKQ0KDQojdGliYmxlKGJkKQ0KDQojaGVhZChiZCkNCg0KI3RhaWwoYmQsIG49NykNCiM/dGFpbA0KDQojdGFieWwoYmQsIHZjQ2xhdmVUaWVuZGEsIE5vbWJyZURlcGFydGFtZW50bykNCiN0YWJ5bChiZCwgTm9tYnJlRmFtaWxpYSwgdmNDbGF2ZVRpZW5kYSkNCmBgYA0KDQoNCiNIYWxsYXpnb3MNCiMgMS5GZWNoYSBzeSBsYXMgaG9yYXMgZXN0w6FuIGVuIGZvcm1hdG8gZGUgY2FyYWN0ZXINCiMgMi5QcmVjaW9zIG5lZ2F0aXZvcw0KIyAzLkZhbHRhIGRlIGNvbHVtbmEgZGUgdmVudGFzDQoNCiNQYXNvIDMuIExpbXBpYXIgbGEgYmFzZSBkZSBkYXRvcyANCg0KI0V4aXN0ZW4gNiB0w6ljbmljYXMgYXByYSBsaW1waWFyIGxhIGJhc2UgZGUgZGF0b3MNCg0KI1TDqWNuaWNhIDEuIFJlbW92ZXIgdmFsb3JlcyBpcnJlbGV2YW50ZXMNCmBgYHtyfQ0KICAjRWxpbWluYXIgY29sdW1uYXMNCiAgI2JkMTwtYmQNCiAgI2JkMTwtIHN1YnNldChiZDEsIHNlbGVjdCA9LWMoUExVLCBDb2RpZ28uQmFycmFzKSkNCiAgDQogICNFbGltaW5hciByZW5nbG9uZXMNCiAgI2JkMjwtIGJkMQ0KICAjYmQyPC0gYmQyW2JkMiRQcmVjaW8+MCxdDQogICNzdW1tYXJ5KGJkMikNCiAgDQpgYGANCg0KI1TDqWNuaWNhIDIuIFJlbW92ZXIgdmFsb3JlcyBkdXBsaWNhZG9zDQpgYGB7cn0NCiANCiAgI8K/Q3XDoW50b3MgcmVuZ2xvbmVzIGR1cGxpY2Fkb3MgdGVuZW1vcz8NCiAgI2JkMltkdXBsaWNhdGVkKGJkMiksXQ0KICAjc3VtKGR1cGxpY2F0ZWQoYmQyKSkNCiAgDQogICNFbGltaW5hciByZW5nbG9uZXMgZHVwbGljYWRvcw0KICAjYmQzPC0gYmQyDQogICNiZDM8LSBkaXN0aW5jdChiZDMpDQogICNzdW1tYXJ5KGJkMykNCmBgYA0KIA0KICANCiNUw6ljbmljYSAzLiBSZXNvbHZlciBlcnJvcmVzIHRpcG9ncsOhZmljb3MgeSBzaW1pbGFyZXMNCmBgYHtyfQ0KICANCiAgI1ByZWNpb3MgZW4gYWJzb2x1dG8NCiAgI2JkNDwtYmQxDQogICNiZDQkUHJlY2lvIDwtIGFicyhiZDQkUHJlY2lvKQ0KICAjc3VtbWFyeShiZDQpDQogIA0KICAjVW5pZGFkZXMgZW4gZW50ZXJvcw0KICAjYmQ1IDwtIGJkNA0KICAjYmQ1JFVuaWRhZGVzIDwtIGNlaWxpbmcgKGJkNSRVbmlkYWRlcykNCiAgI3N1bW1hcnkoYmQ1KQ0KYGBgDQoNCiNUw6ljbmljYSA0LCBDb252ZXJ0aXIgbG9zIHRpcG9zIGRlIGRhdG9zDQpgYGB7cn0NCiAgI0NvbnZlcnRpciBkZSBjYXJhY3RlciBmZWNoYQ0KICAjYmQ2IDwtIGJkMw0KICAjYmQ2JEZlY2hhIDwtIGFzLkRhdGUgKGJkNiRGZWNoYSwgZm9ybWF0PSAiJWQvJW0vJVkiKQ0KDQogICNDb252ZXJ0aXIgZGUgY2FyYWN0ZXIgYSBlbnRlcm8NCiAgI2JkNzwtIGJkNg0KICAjYmQ3JEhvcmEgPC0gc3Vic3RyKGJkNyRIb3JhLCBzdGFydD0xLCBzdG9wPTIpDQogICN0aWJibGUoYmQ3KQ0KICAjYmQ3JEhvcmEgPC0gYXMuaW50ZWdlcihiZDckSG9yYSkgIA0KICAjc3RyKGJkNykNCiAgDQoNCmBgYA0KI1TDqWNuaWNhIDUuIFRyYXRhcnZhbG9yZXMgZmFsdGFudGVzIChOQSkNCmBgYHtyfQ0KICANCiAgI8K/Q3VhbnRvcyBOYSB0ZW5nbyBlbiBsYSBiYXNlIGRlIGRhdG9zPw0KICAjc3VtKGlzLm5hKGJkNykpDQogICNzdW0oaXMubmEoYmQpKQ0KICANCiAgI8K/Q3VhbnRvcyBOQSB0ZW5nbyBwb3IgdmFyaWFibGU/DQogICNzYXBwbHkoYmQsZnVuY3Rpb24oeCkgc3VtIChpcy5uYSh4KSkpDQogIA0KICAjQm9ycmFyIHRvZG9zIGxvcyByZWdpc3Ryb3MgTkEgZGUgdW5hIHRhYmxhDQogICNiZDg8LSBiZA0KICAjYmQ4PC0gbmEub21pdChiZDgpDQogICNzdW1tYXJ5KGJkOCkNCiAgDQogICNSZWVtcGxhemFyIGxvcyBOQSBjb24gQ0VST1MNCiAgI2JkOTwtIGJkDQogICNiZDlbaXMubmEoYmQ5KV08LTANCiAgI3N1bW1hcnkoYmQ5KQ0KICANCiAgI1JlZW1wbGF6YXIgbG9zIE5BIGNvbiBlbCBwcm9tZWRpbw0KICAjYmQxMDwtIGJkDQogICNiZDEwJFBMVVtpcy5uYShiZDEwJFBMVSldIDwtIG1lYW4oYmQxMCRQTFUsIG5hLnJtPVRSVUUpDQogICNzdW1tYXJ5KGJkMTApDQpgYGANCg0KI1TDqWNuaWNhIDYuIFZlcmlmaWNhciBkYXRvcyBjb24gbcOpdG9kb3MgZXN0YWTDrXN0aWNvcw0KYGBge3J9DQogICNEYXRvcyBhdMOtcGljb3MNCiAgI2JkMTE8LSBiZDcNCiAgI2JveHBsb3QoYmQxMSRQcmVjaW8sIGhvcml6b250YWw9VFJVRSkNCiAgI2JveHBsb3QoYmQxMSRVbmlkYWRlcywgaG9yaXpvbnRhbD1UUlVFKQ0KICANCmBgYA0KICANCiNQYXNvIDQuIE1hbmlwdWxhY2lvbiBkZSBiYXNlIGRlIGRhdG9zDQogIA0KI0FncmVnYXIgY29sdW1uYXMNCmBgYHtyfQ0KI2JkMTEkZGlhZGVsYXNlbWFuYSA8LSB3ZGF5KGJkMTEkRmVjaGEpICANCiNzdW1tYXJ5IChiZDExKQ0KDQojYmQxMSRzdWJ0b3RhbCA8LSBiZDExJFByZWNpbypiZDExJFVuaWRhZGVzDQojc3VtbWFyeShiZDExKQ0KYGBgDQoNCg0KI1Bhc28gNS4gRXhwb3J0YXIgYmFzZSBkZSBkYXRvcyBsaW1waWENCmBgYHtyfQ0KI2JkX2xpbXBpYSA8LSBiZDExDQojd3JpdGUuY3N2KGJkX2xpbXBpYSwgZmlsZT0iQWJhcnJvdGVzX2JkbGltcGlhLmNzdiIsIHJvdy5uYW1lcz0gRkFMU0UpDQoNCg0KYGBgDQoNCg==