Base de datos correspondiente a productos de supermercado:
library(readr)
library(tidyverse) # para manejo de bases de datos
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.5 ✓ dplyr 1.0.6
## ✓ tibble 3.1.2 ✓ stringr 1.4.0
## ✓ tidyr 1.1.3 ✓ forcats 0.5.0
## ✓ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(janitor) # para limpiar bases de datos
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(visdat) # crea visualizaciones de datos exploratorios preliminares
library(naniar) # visualizacion y tratamiento de datos perdidos
library(GGally) # matriz de graficos ggplot para analisis exploratorio
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
# Carga de datos
productos<- read_csv("~/OneDrive/Amor Estudio/DATA SCIENCE/Cursos/Sociedad Ecuatoriana Estadistica/Limpieza de datos SEE/Trabajo final/Datos/productos-de-supermercados-sample.csv")
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## supermarket = col_character(),
## category = col_character(),
## name = col_character(),
## description = col_character(),
## price = col_double(),
## reference_price = col_double(),
## reference_unit = col_character(),
## insert_date = col_datetime(format = "")
## )
# Datos
productos %>% glimpse()
## Rows: 500,000
## Columns: 8
## $ supermarket <chr> "mercadona-es", "mercadona-es", "mercadona-es", "carre…
## $ category <chr> "postres_y_yogures_yogures_liquidos", "bodega_licores"…
## $ name <chr> "Bebida láctea sin lactosa de fresa Hacendado", "Gineb…
## $ description <chr> "Pack-4", "Botella", "Tarrina", "Pack 4x120 G.", "10 U…
## $ price <dbl> 1.40, 10.75, 1.09, 2.08, 4.60, 13.95, 7.02, 5.25, 1.90…
## $ reference_price <dbl> 2.19, 15.36, 2.18, 4.33, 0.46, 0.28, 11.90, 7.00, 1.90…
## $ reference_unit <chr> "kg", "L", "kg", "kg", "ud", "lavado", "kg", "€/l.", "…
## $ insert_date <dttm> 2020-12-23 00:00:00, 2020-11-06 12:00:00, 2020-09-23 …
productos %>% head()
## # A tibble: 6 x 8
## supermarket category name description price reference_price reference_unit
## <chr> <chr> <chr> <chr> <dbl> <dbl> <chr>
## 1 mercadona-es postres_… Bebid… Pack-4 1.4 2.19 kg
## 2 mercadona-es bodega_l… Gineb… Botella 10.8 15.4 L
## 3 mercadona-es charcute… Queso… Tarrina 1.09 2.18 kg
## 4 carrefour-es la_despe… Yogur… Pack 4x120… 2.08 4.33 kg
## 5 carrefour-es la_despe… Helad… 10 Ud. 4.6 0.46 ud
## 6 carrefour-es limpieza… Deter… NA 14.0 0.28 lavado
## # … with 1 more variable: insert_date <dttm>
# Filtrado de variables
productos %>% filter(supermarket=='mercadona-es') %>% head()
## # A tibble: 6 x 8
## supermarket category name description price reference_price reference_unit
## <chr> <chr> <chr> <chr> <dbl> <dbl> <chr>
## 1 mercadona-es postres_… Bebid… Pack-4 1.4 2.19 kg
## 2 mercadona-es bodega_l… Gineb… Botella 10.8 15.4 L
## 3 mercadona-es charcute… Queso… Tarrina 1.09 2.18 kg
## 4 mercadona-es carne_co… Chule… Bandeja 7.02 11.9 kg
## 5 mercadona-es postres_… BÃfid… Pack-8 1.9 1.9 kg
## 6 mercadona-es azucar_c… Choco… Tableta 0.75 5 kg
## # … with 1 more variable: insert_date <dttm>
productos %>%
mutate(`Categoria_Precio` = case_when(`price`<=2 ~ "Bajo",between(price, 2, 5) ~ "Medio", T ~ "Alto")) %>%
select(`Categoria_Precio`)
## # A tibble: 500,000 x 1
## Categoria_Precio
## <chr>
## 1 Bajo
## 2 Alto
## 3 Bajo
## 4 Medio
## 5 Medio
## 6 Alto
## 7 Alto
## 8 Alto
## 9 Bajo
## 10 Medio
## # … with 499,990 more rows
# Agrupación y sumarizado
productos %>%
group_by(supermarket) %>%
summarise(`Valor total` = sum(`price`, na.rm = T)) %>%
head()
## # A tibble: 3 x 2
## supermarket `Valor total`
## <chr> <dbl>
## 1 carrefour-es 1485771.
## 2 dia-es 381379.
## 3 mercadona-es 756101.
productos %>%
group_by(supermarket) %>%
summarise(`Valor total` = sum(`price`, na.rm = T)) %>%
slice_sample(n=3)
## # A tibble: 3 x 2
## supermarket `Valor total`
## <chr> <dbl>
## 1 carrefour-es 1485771.
## 2 dia-es 381379.
## 3 mercadona-es 756101.
# Cruces
tabla1 = productos %>%
group_by(supermarket) %>%
summarise(`Valor total`=sum(`price`, na.rm = T))
tabla1
## # A tibble: 3 x 2
## supermarket `Valor total`
## <chr> <dbl>
## 1 carrefour-es 1485771.
## 2 dia-es 381379.
## 3 mercadona-es 756101.
tabla2 =productos %>%
group_by(supermarket) %>%
summarise(`Categorias`= n())
tabla2
## # A tibble: 3 x 2
## supermarket Categorias
## <chr> <int>
## 1 carrefour-es 294307
## 2 dia-es 105990
## 3 mercadona-es 99703
tabla1 %>%
left_join(tabla2 %>% slice_head(n=2))
## Joining, by = "supermarket"
## # A tibble: 3 x 3
## supermarket `Valor total` Categorias
## <chr> <dbl> <int>
## 1 carrefour-es 1485771. 294307
## 2 dia-es 381379. 105990
## 3 mercadona-es 756101. NA
productos %>% select(price, supermarket) %>% ggpairs()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
****
# Descripción del tipo de variables
productos %>% vis_dat(warn_large_data = F)
# Datos perdidos
productos %>% vis_miss(warn_large_data = F)
productos %>% gg_miss_upset()
# Transformación columnas a filas
productos %>%
group_by(supermarket) %>%
summarise(Precios = sum(price, na.rm = T),
Referenciales = sum(reference_price, na.rm = T)) %>%
pivot_longer(cols = -c(supermarket), names_to = "Totales", values_to = "Referenciales") %>%
pivot_wider(names_from = c(Totales), values_from = c(Referenciales), values_fill = 0) %>%
head()
## # A tibble: 3 x 3
## supermarket Precios Referenciales
## <chr> <dbl> <dbl>
## 1 carrefour-es 1485771. 7931286.
## 2 dia-es 381379. 3244377.
## 3 mercadona-es 756101. 693193.
library(qicharts) # Isolation forest
## qicharts will no longer be maintained. Please consider moving to qicharts2: https://anhoej.github.io/qicharts2/.
set.seed(6)
Items_Vendidos<-sample(1000:5000, size = 500000, replace = TRUE)
productos<-cbind(productos,Items_Vendidos)
head(productos)
## supermarket category
## 1 mercadona-es postres_y_yogures_yogures_liquidos
## 2 mercadona-es bodega_licores
## 3 mercadona-es charcuteria_y_quesos_queso_untable_y_fresco
## 4 carrefour-es la_despensa_yogures_y_postres_yogures_desnatados
## 5 carrefour-es la_despensa_helados_bombon
## 6 carrefour-es limpieza_y_hogar_cuidado_de_la_ropa_detergentes
## name
## 1 Bebida láctea sin lactosa de fresa Hacendado
## 2 Ginebra 15 botanicals Blumara
## 3 Queso fresco batido desnatado Hacendado 0% materia grasa
## 4 Yogur bÃfidus desnatado con lima y limón Danone Activia pack de 4 unidades de 120 g.
## 5 Helado After Dinner Magnum sin gluten 10 ud.
## 6 Detergente lÃquido Actilift Ariel 50 lavados.
## description price reference_price reference_unit insert_date
## 1 Pack-4 1.40 2.19 kg 2020-12-23 00:00:00
## 2 Botella 10.75 15.36 L 2020-11-06 12:00:00
## 3 Tarrina 1.09 2.18 kg 2020-09-23 16:06:00
## 4 Pack 4x120 G. 2.08 4.33 kg 2020-10-10 00:00:00
## 5 10 Ud. 4.60 0.46 ud 2020-10-15 00:00:00
## 6 <NA> 13.95 0.28 lavado 2021-01-24 00:00:00
## Items_Vendidos
## 1 3868
## 2 1009
## 3 1940
## 4 1333
## 5 4767
## 6 3659
# graficamos
qic(Items_Vendidos, chart = 'i')
# Introducimos un punto atÃpico en el punto 18
Items_Vendidos[18] <- 5002
Items_Vendidos[2000] <- 8000
Items_Vendidos[100000] <- 9000
Items_Vendidos[200000] <- 10000
Items_Vendidos[312500] <- 20000
Items_Vendidos[200] <- 7000
qic(Items_Vendidos, chart = 'i')
# conteo del numero de atipicos
qic(Items_Vendidos,
x = supermarket ,
data = productos,
chart = 'c',
main = 'Atipicos por sucursal',
ylab = 'Valores',
xlab = 'Sucursal')
library(FactoMineR)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
pca_res = PCA(productos %>% select(where(is.numeric)), scale.unit = T)
pca_res %>% fviz_screeplot()
pca_res %>% fviz_pca_biplot()
pca_res = PCA(productos%>%
slice(1:100000) %>%
select(where(is.numeric)), scale.unit = T)
pca_res %>% fviz_screeplot()
pca_res %>% fviz_pca_biplot()
productos_imputados= productos %>%
select(where(is.numeric)) %>%
impute_mean_all()
productos_imputados %>% vis_miss(warn_large_data = F)