Introducción

En esta actividad estaré trabajando en R con una base de datos de excel, y posteriormente mostraré técnicas de filtrado para la base de datos. Las técnicas utilizadas fueron:

Eliminación de valores duplicados: Es importante eliminar valores duplicados en la base de datos para que no interfiera en el conteo de datos o la descripción de los mismos, asimismo puede interferir al querer manipular la base de datos en el futuro para extraer hallazgos.

Eliminación de valores irrelevantes: Aquí decidí eliminar los valores cuyo precio sea menor a 0 porque no traen ingresos para la tienda. Asimismo decidí eliminar todos aquellos artículos que tengan una cantidad faltante en el excel.

Reajuste del formato de fecha: Simplemente para que se lea de manera más sencilla el documento, se cambió la fecha a formato dd/mm/aa.

Carga de Datos

Primero, cargamos los datos desde un archivo Excel usando la librería readxl.

library(readxl)
## Warning: package 'readxl' was built under R version 4.1.3
ruta_archivo <- "C:/Users/maxwi/Desktop/Abarrotes_Ventas-2.xlsx"
nombre_hoja <- "Total"

datos <- read_excel(ruta_archivo, sheet = nombre_hoja)
## Código para clasificar las variables
num_variables <- ncol(datos)

num_registros <- nrow(datos)

cat("Número de variables (columnas):", num_variables, "\n")
## Número de variables (columnas): 22
cat("Número de registros (filas):", num_registros, "\n")
## Número de registros (filas): 200620
clasificacion <- sapply(datos, function(columna) {
  if (is.factor(columna) || is.character(columna)) {
    "Cualitativa"
  } else if (is.integer(columna)) {
    "Cuantitativa Discreta"
  } else if (is.numeric(columna)) {
    "Cuantitativa Continua"
  } else {
    "n/a"
  }
})

for (i in seq_along(clasificacion)) {
  cat(names(datos)[i], ":", clasificacion[i], "\n")
}
## vcClaveTienda : Cualitativa 
## DescGiro : Cualitativa 
## Codigo Barras : Cuantitativa Continua 
## PLU : n/a 
## Fecha : n/a 
## Hora : n/a 
## Marca : Cualitativa 
## Fabricante : Cualitativa 
## Producto : Cualitativa 
## Precio : Cuantitativa Continua 
## Ult.Costo : Cuantitativa Continua 
## Unidades : Cuantitativa Continua 
## F.Ticket : Cuantitativa Continua 
## NombreDepartamento : Cualitativa 
## NombreFamilia : Cualitativa 
## NombreCategoria : Cualitativa 
## Estado : Cualitativa 
## Mts 2 : Cuantitativa Continua 
## Tipo ubicación : Cualitativa 
## Giro : Cualitativa 
## Hora inicio : n/a 
## Hora cierre : n/a
##Escala de medición
determinar_escala <- function(columna) {
  if (is.factor(columna) || is.character(columna)) {
    "Nominal"
  } else if (is.integer(columna)) {
    "ordinal o cuantitativa discreta"
  } else if (is.numeric(columna)) {
    if (length(unique(columna)) < 10) {
      "Ordinal"
    } else {
      "cuantitativa continua"
    }
  } else {
    "desconocido"
  }
}

escalas <- sapply(datos, determinar_escala)

for (i in seq_along(escalas)) {
  cat(names(datos)[i], ":", escalas[i], "\n")
}
## vcClaveTienda : Nominal 
## DescGiro : Nominal 
## Codigo Barras : cuantitativa continua 
## PLU : desconocido 
## Fecha : desconocido 
## Hora : desconocido 
## Marca : Nominal 
## Fabricante : Nominal 
## Producto : Nominal 
## Precio : cuantitativa continua 
## Ult.Costo : cuantitativa continua 
## Unidades : cuantitativa continua 
## F.Ticket : cuantitativa continua 
## NombreDepartamento : Nominal 
## NombreFamilia : Nominal 
## NombreCategoria : Nominal 
## Estado : Nominal 
## Mts 2 : Ordinal 
## Tipo ubicación : Nominal 
## Giro : Nominal 
## Hora inicio : desconocido 
## Hora cierre : desconocido
## Código para filtrar y eliminar.
#Primera técnica de filtración: Eliminar filas duplicadas con unique. 
datos_sfd <- unique(datos)
num_filas_originales_sfd <- nrow(datos)
num_filas_limpio_sfd <- nrow(datos_sfd)
cat("Número de filas originales:", num_filas_originales_sfd, "\n")
## Número de filas originales: 200620
cat("Número de filas después de la limpieza:", num_filas_limpio_sfd, "\n")
## Número de filas después de la limpieza: 200620
#Segunda técnica de filtración: Eliminar valores irrelevantes. (Filas donde la cantidad es 0)
#Eliminando filas en donde el precio sea menor que 0.
columna_a_filtrar <- "Precio"
datos_limpio <- datos[datos[[columna_a_filtrar]] >= 0, ]
num_filas_originales_svi <- nrow(datos)
num_filas_limpio_svi <- nrow(datos_limpio)
cat("Número de filas originales:", num_filas_originales_svi, "\n")
## Número de filas originales: 200620
cat("Número de filas después de la limpieza:", num_filas_limpio_svi, "\n")
## Número de filas después de la limpieza: 200473
#Eliminando filas donde la cantidad de unidades sea faltante.
datos_limpio_sf <- datos[!is.na(datos$Unidades), ]
num_filas_originales_sf <- nrow(datos)
num_filas_limpio_sf <- nrow(datos_limpio)
cat("Número de filas originales:", num_filas_originales_sf, "\n")
## Número de filas originales: 200620
cat("Número de filas después de la limpieza:", num_filas_limpio_sf, "\n")
## Número de filas después de la limpieza: 200473
#Cambiando la columna Fecha a formato dd/mm/aa
columna_fecha_texto <- "Fecha"
datos$Fecha <- as.Date(datos[[columna_fecha_texto]], format = "%A, %d de %B de %Y")
head(datos$Fecha)
## [1] "2020-06-19" "2020-06-19" "2020-06-19" "2020-06-19" "2020-06-19"
## [6] "2020-06-19"

Reflexión

En este modulo estuvimos viendo introducción a R, un lenguaje de programación bastante efectivo y sencillo, el cual al momento de ser utilizado para trabajar con bases de datos se asemeja mucho a python. Los recursos proporcionados por el maestro en clase fueron bastante claros y sencillos de usar, ayudan a entender el fundamento de R y cómo se entrelaza de manera fácil con la filtración de bases de datos. No hace falta ser un expero para poder poner en práctica estos conocimientos y manipular bases de datos para poder extraer información relevante y hallazgos. Esto mismo sucederá con el RETO posteriormente, puesto que poderemos ejercer lo aprendido en el módulo para poder maniobrar de manera efectiva con las bases de datos del INEGI.

LS0tDQp0aXRsZTogJ0FjdGl2aWRhZCAyLjE6IE1hbmVqYSB1bmEgYmFzZSBkZSBkYXRvcycNCmF1dGhvcjogIlBlZHJvIE1heGltaWxpYW5vIFdpbGxtYW4gSGVybsOhbmRleiINCmRhdGU6ICcyMDIzLTA4LTIxJw0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KIyBJbnRyb2R1Y2Npw7NuDQoNCkVuIGVzdGEgYWN0aXZpZGFkIGVzdGFyw6kgdHJhYmFqYW5kbyBlbiBSIGNvbiB1bmEgYmFzZSBkZSBkYXRvcyBkZSBleGNlbCwgeSBwb3N0ZXJpb3JtZW50ZSBtb3N0cmFyw6kgdMOpY25pY2FzIGRlIGZpbHRyYWRvIHBhcmEgbGEgYmFzZSBkZSBkYXRvcy4gTGFzIHTDqWNuaWNhcyB1dGlsaXphZGFzIGZ1ZXJvbjogDQoNCkVsaW1pbmFjacOzbiBkZSB2YWxvcmVzIGR1cGxpY2Fkb3M6IEVzIGltcG9ydGFudGUgZWxpbWluYXIgdmFsb3JlcyBkdXBsaWNhZG9zIGVuIGxhIGJhc2UgZGUgZGF0b3MgcGFyYSBxdWUgbm8gaW50ZXJmaWVyYSBlbiBlbCBjb250ZW8gZGUgZGF0b3MgbyBsYSBkZXNjcmlwY2nDs24gZGUgbG9zIG1pc21vcywgYXNpbWlzbW8gcHVlZGUgaW50ZXJmZXJpciBhbCBxdWVyZXIgbWFuaXB1bGFyIGxhIGJhc2UgZGUgZGF0b3MgZW4gZWwgZnV0dXJvIHBhcmEgZXh0cmFlciBoYWxsYXpnb3MuIA0KDQpFbGltaW5hY2nDs24gZGUgdmFsb3JlcyBpcnJlbGV2YW50ZXM6IEFxdcOtIGRlY2lkw60gZWxpbWluYXIgbG9zIHZhbG9yZXMgY3V5byBwcmVjaW8gc2VhIG1lbm9yIGEgMCBwb3JxdWUgbm8gdHJhZW4gaW5ncmVzb3MgcGFyYSBsYSB0aWVuZGEuIEFzaW1pc21vIGRlY2lkw60gZWxpbWluYXIgdG9kb3MgYXF1ZWxsb3MgYXJ0w61jdWxvcyBxdWUgdGVuZ2FuIHVuYSBjYW50aWRhZCBmYWx0YW50ZSBlbiBlbCBleGNlbC4NCg0KUmVhanVzdGUgZGVsIGZvcm1hdG8gZGUgZmVjaGE6IFNpbXBsZW1lbnRlIHBhcmEgcXVlIHNlIGxlYSBkZSBtYW5lcmEgbcOhcyBzZW5jaWxsYSBlbCBkb2N1bWVudG8sIHNlIGNhbWJpw7MgbGEgZmVjaGEgYSBmb3JtYXRvIGRkL21tL2FhLg0KDQojIyBDYXJnYSBkZSBEYXRvcw0KDQpQcmltZXJvLCBjYXJnYW1vcyBsb3MgZGF0b3MgZGVzZGUgdW4gYXJjaGl2byBFeGNlbCB1c2FuZG8gbGEgbGlicmVyw61hIGByZWFkeGxgLg0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHhsKQ0KYGBgDQpgYGB7cn0NCnJ1dGFfYXJjaGl2byA8LSAiQzovVXNlcnMvbWF4d2kvRGVza3RvcC9BYmFycm90ZXNfVmVudGFzLTIueGxzeCINCm5vbWJyZV9ob2phIDwtICJUb3RhbCINCg0KZGF0b3MgPC0gcmVhZF9leGNlbChydXRhX2FyY2hpdm8sIHNoZWV0ID0gbm9tYnJlX2hvamEpDQpgYGANCg0KYGBge3J9DQojIyBDw7NkaWdvIHBhcmEgY2xhc2lmaWNhciBsYXMgdmFyaWFibGVzDQpudW1fdmFyaWFibGVzIDwtIG5jb2woZGF0b3MpDQoNCm51bV9yZWdpc3Ryb3MgPC0gbnJvdyhkYXRvcykNCg0KY2F0KCJOw7ptZXJvIGRlIHZhcmlhYmxlcyAoY29sdW1uYXMpOiIsIG51bV92YXJpYWJsZXMsICJcbiIpDQpjYXQoIk7Dum1lcm8gZGUgcmVnaXN0cm9zIChmaWxhcyk6IiwgbnVtX3JlZ2lzdHJvcywgIlxuIikNCg0KY2xhc2lmaWNhY2lvbiA8LSBzYXBwbHkoZGF0b3MsIGZ1bmN0aW9uKGNvbHVtbmEpIHsNCiAgaWYgKGlzLmZhY3Rvcihjb2x1bW5hKSB8fCBpcy5jaGFyYWN0ZXIoY29sdW1uYSkpIHsNCiAgICAiQ3VhbGl0YXRpdmEiDQogIH0gZWxzZSBpZiAoaXMuaW50ZWdlcihjb2x1bW5hKSkgew0KICAgICJDdWFudGl0YXRpdmEgRGlzY3JldGEiDQogIH0gZWxzZSBpZiAoaXMubnVtZXJpYyhjb2x1bW5hKSkgew0KICAgICJDdWFudGl0YXRpdmEgQ29udGludWEiDQogIH0gZWxzZSB7DQogICAgIm4vYSINCiAgfQ0KfSkNCg0KZm9yIChpIGluIHNlcV9hbG9uZyhjbGFzaWZpY2FjaW9uKSkgew0KICBjYXQobmFtZXMoZGF0b3MpW2ldLCAiOiIsIGNsYXNpZmljYWNpb25baV0sICJcbiIpDQp9DQoNCmBgYA0KYGBge3J9DQojI0VzY2FsYSBkZSBtZWRpY2nDs24NCmRldGVybWluYXJfZXNjYWxhIDwtIGZ1bmN0aW9uKGNvbHVtbmEpIHsNCiAgaWYgKGlzLmZhY3Rvcihjb2x1bW5hKSB8fCBpcy5jaGFyYWN0ZXIoY29sdW1uYSkpIHsNCiAgICAiTm9taW5hbCINCiAgfSBlbHNlIGlmIChpcy5pbnRlZ2VyKGNvbHVtbmEpKSB7DQogICAgIm9yZGluYWwgbyBjdWFudGl0YXRpdmEgZGlzY3JldGEiDQogIH0gZWxzZSBpZiAoaXMubnVtZXJpYyhjb2x1bW5hKSkgew0KICAgIGlmIChsZW5ndGgodW5pcXVlKGNvbHVtbmEpKSA8IDEwKSB7DQogICAgICAiT3JkaW5hbCINCiAgICB9IGVsc2Ugew0KICAgICAgImN1YW50aXRhdGl2YSBjb250aW51YSINCiAgICB9DQogIH0gZWxzZSB7DQogICAgImRlc2Nvbm9jaWRvIg0KICB9DQp9DQoNCmVzY2FsYXMgPC0gc2FwcGx5KGRhdG9zLCBkZXRlcm1pbmFyX2VzY2FsYSkNCg0KZm9yIChpIGluIHNlcV9hbG9uZyhlc2NhbGFzKSkgew0KICBjYXQobmFtZXMoZGF0b3MpW2ldLCAiOiIsIGVzY2FsYXNbaV0sICJcbiIpDQp9DQpgYGANCmBgYHtyfQ0KIyMgQ8OzZGlnbyBwYXJhIGZpbHRyYXIgeSBlbGltaW5hci4NCiNQcmltZXJhIHTDqWNuaWNhIGRlIGZpbHRyYWNpw7NuOiBFbGltaW5hciBmaWxhcyBkdXBsaWNhZGFzIGNvbiB1bmlxdWUuIA0KZGF0b3Nfc2ZkIDwtIHVuaXF1ZShkYXRvcykNCm51bV9maWxhc19vcmlnaW5hbGVzX3NmZCA8LSBucm93KGRhdG9zKQ0KbnVtX2ZpbGFzX2xpbXBpb19zZmQgPC0gbnJvdyhkYXRvc19zZmQpDQpjYXQoIk7Dum1lcm8gZGUgZmlsYXMgb3JpZ2luYWxlczoiLCBudW1fZmlsYXNfb3JpZ2luYWxlc19zZmQsICJcbiIpDQpjYXQoIk7Dum1lcm8gZGUgZmlsYXMgZGVzcHXDqXMgZGUgbGEgbGltcGllemE6IiwgbnVtX2ZpbGFzX2xpbXBpb19zZmQsICJcbiIpDQpgYGANCmBgYHtyfQ0KI1NlZ3VuZGEgdMOpY25pY2EgZGUgZmlsdHJhY2nDs246IEVsaW1pbmFyIHZhbG9yZXMgaXJyZWxldmFudGVzLiAoRmlsYXMgZG9uZGUgbGEgY2FudGlkYWQgZXMgMCkNCiNFbGltaW5hbmRvIGZpbGFzIGVuIGRvbmRlIGVsIHByZWNpbyBzZWEgbWVub3IgcXVlIDAuDQpjb2x1bW5hX2FfZmlsdHJhciA8LSAiUHJlY2lvIg0KZGF0b3NfbGltcGlvIDwtIGRhdG9zW2RhdG9zW1tjb2x1bW5hX2FfZmlsdHJhcl1dID49IDAsIF0NCm51bV9maWxhc19vcmlnaW5hbGVzX3N2aSA8LSBucm93KGRhdG9zKQ0KbnVtX2ZpbGFzX2xpbXBpb19zdmkgPC0gbnJvdyhkYXRvc19saW1waW8pDQpjYXQoIk7Dum1lcm8gZGUgZmlsYXMgb3JpZ2luYWxlczoiLCBudW1fZmlsYXNfb3JpZ2luYWxlc19zdmksICJcbiIpDQpjYXQoIk7Dum1lcm8gZGUgZmlsYXMgZGVzcHXDqXMgZGUgbGEgbGltcGllemE6IiwgbnVtX2ZpbGFzX2xpbXBpb19zdmksICJcbiIpDQpgYGANCmBgYHtyfQ0KI0VsaW1pbmFuZG8gZmlsYXMgZG9uZGUgbGEgY2FudGlkYWQgZGUgdW5pZGFkZXMgc2VhIGZhbHRhbnRlLg0KZGF0b3NfbGltcGlvX3NmIDwtIGRhdG9zWyFpcy5uYShkYXRvcyRVbmlkYWRlcyksIF0NCm51bV9maWxhc19vcmlnaW5hbGVzX3NmIDwtIG5yb3coZGF0b3MpDQpudW1fZmlsYXNfbGltcGlvX3NmIDwtIG5yb3coZGF0b3NfbGltcGlvKQ0KY2F0KCJOw7ptZXJvIGRlIGZpbGFzIG9yaWdpbmFsZXM6IiwgbnVtX2ZpbGFzX29yaWdpbmFsZXNfc2YsICJcbiIpDQpjYXQoIk7Dum1lcm8gZGUgZmlsYXMgZGVzcHXDqXMgZGUgbGEgbGltcGllemE6IiwgbnVtX2ZpbGFzX2xpbXBpb19zZiwgIlxuIikNCg0KYGBgDQpgYGB7cn0NCiNDYW1iaWFuZG8gbGEgY29sdW1uYSBGZWNoYSBhIGZvcm1hdG8gZGQvbW0vYWENCmNvbHVtbmFfZmVjaGFfdGV4dG8gPC0gIkZlY2hhIg0KZGF0b3MkRmVjaGEgPC0gYXMuRGF0ZShkYXRvc1tbY29sdW1uYV9mZWNoYV90ZXh0b11dLCBmb3JtYXQgPSAiJUEsICVkIGRlICVCIGRlICVZIikNCmhlYWQoZGF0b3MkRmVjaGEpDQpgYGANCiMjIFJlZmxleGnDs24NCkVuIGVzdGUgbW9kdWxvIGVzdHV2aW1vcyB2aWVuZG8gaW50cm9kdWNjacOzbiBhIFIsIHVuIGxlbmd1YWplIGRlIHByb2dyYW1hY2nDs24gYmFzdGFudGUgZWZlY3Rpdm8geSBzZW5jaWxsbywgZWwgY3VhbCBhbCBtb21lbnRvIGRlIHNlciB1dGlsaXphZG8gcGFyYSB0cmFiYWphciBjb24gYmFzZXMgZGUgZGF0b3Mgc2UgYXNlbWVqYSBtdWNobyBhIHB5dGhvbi4gTG9zIHJlY3Vyc29zIHByb3BvcmNpb25hZG9zIHBvciBlbCBtYWVzdHJvIGVuIGNsYXNlIGZ1ZXJvbiBiYXN0YW50ZSBjbGFyb3MgeSBzZW5jaWxsb3MgZGUgdXNhciwgYXl1ZGFuIGEgZW50ZW5kZXIgZWwgZnVuZGFtZW50byBkZSBSIHkgY8OzbW8gc2UgZW50cmVsYXphIGRlIG1hbmVyYSBmw6FjaWwgY29uIGxhIGZpbHRyYWNpw7NuIGRlIGJhc2VzIGRlIGRhdG9zLiBObyBoYWNlIGZhbHRhIHNlciB1biBleHBlcm8gcGFyYSBwb2RlciBwb25lciBlbiBwcsOhY3RpY2EgZXN0b3MgY29ub2NpbWllbnRvcyB5IG1hbmlwdWxhciBiYXNlcyBkZSBkYXRvcyBwYXJhIHBvZGVyIGV4dHJhZXIgaW5mb3JtYWNpw7NuIHJlbGV2YW50ZSB5IGhhbGxhemdvcy4gRXN0byBtaXNtbyBzdWNlZGVyw6EgY29uIGVsIFJFVE8gcG9zdGVyaW9ybWVudGUsIHB1ZXN0byBxdWUgcG9kZXJlbW9zIGVqZXJjZXIgbG8gYXByZW5kaWRvIGVuIGVsIG3Ds2R1bG8gcGFyYSBwb2RlciBtYW5pb2JyYXIgZGUgbWFuZXJhIGVmZWN0aXZhIGNvbiBsYXMgYmFzZXMgZGUgZGF0b3MgZGVsIElORUdJLiA=