#file.choose()
stores <- read.csv("/Users/ricardogc/Desktop/Actividad 3.2/stores.csv")
features <- read.csv("/Users/ricardogc/Desktop/Actividad 3.2/features.csv")
train <- read.csv("/Users/ricardogc/Desktop/Actividad 3.2/train.csv")
test <- read.csv("/Users/ricardogc/Desktop/Actividad 3.2/test.csv")
#install.packages("dplyr")
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.4.4
##
## 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
summary(stores)
## Store Type Size
## Min. : 1 A:22 Min. : 34875
## 1st Qu.:12 B:17 1st Qu.: 70713
## Median :23 C: 6 Median :126512
## Mean :23 Mean :130288
## 3rd Qu.:34 3rd Qu.:202307
## Max. :45 Max. :219622
count(stores,Type, sort = TRUE)
## # A tibble: 3 × 2
## Type n
## <fct> <int>
## 1 A 22
## 2 B 17
## 3 C 6
str(stores)
## 'data.frame': 45 obs. of 3 variables:
## $ Store: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Type : Factor w/ 3 levels "A","B","C": 1 1 2 1 2 1 2 1 2 2 ...
## $ Size : int 151315 202307 37392 205863 34875 202505 70713 155078 125833 126512 ...
summary(features)
## Store Date Temperature Fuel_Price
## Min. : 1 01/02/2013: 45 Min. : -7.29 Min. :2.472
## 1st Qu.:12 01/03/2013: 45 1st Qu.: 45.90 1st Qu.:3.041
## Median :23 01/04/2011: 45 Median : 60.71 Median :3.513
## Mean :23 01/06/2012: 45 Mean : 59.36 Mean :3.406
## 3rd Qu.:34 01/07/2011: 45 3rd Qu.: 73.88 3rd Qu.:3.743
## Max. :45 01/10/2010: 45 Max. :101.95 Max. :4.468
## (Other) :7920
## MarkDown1 MarkDown2 MarkDown3 MarkDown4
## Min. : -2781 Min. : -265.76 Min. : -179.26 Min. : 0.22
## 1st Qu.: 1578 1st Qu.: 68.88 1st Qu.: 6.60 1st Qu.: 304.69
## Median : 4744 Median : 364.57 Median : 36.26 Median : 1176.42
## Mean : 7032 Mean : 3384.18 Mean : 1760.10 Mean : 3292.94
## 3rd Qu.: 8923 3rd Qu.: 2153.35 3rd Qu.: 163.15 3rd Qu.: 3310.01
## Max. :103185 Max. :104519.54 Max. :149483.31 Max. :67474.85
## NA's :4158 NA's :5269 NA's :4577 NA's :4726
## MarkDown5 CPI Unemployment IsHoliday
## Min. : -185.2 Min. :126.1 Min. : 3.684 Mode :logical
## 1st Qu.: 1440.8 1st Qu.:132.4 1st Qu.: 6.634 FALSE:7605
## Median : 2727.1 Median :182.8 Median : 7.806 TRUE :585
## Mean : 4132.2 Mean :172.5 Mean : 7.827
## 3rd Qu.: 4832.6 3rd Qu.:213.9 3rd Qu.: 8.567
## Max. :771448.1 Max. :229.0 Max. :14.313
## NA's :4140 NA's :585 NA's :585
str(features)
## 'data.frame': 8190 obs. of 12 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Factor w/ 182 levels "01/02/2013","01/03/2013",..: 25 67 109 151 26 68 110 152 8 50 ...
## $ Temperature : num 42.3 38.5 39.9 46.6 46.5 ...
## $ Fuel_Price : num 2.57 2.55 2.51 2.56 2.62 ...
## $ MarkDown1 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown3 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown4 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown5 : num NA NA NA NA NA NA NA NA NA NA ...
## $ CPI : num 211 211 211 211 211 ...
## $ Unemployment: num 8.11 8.11 8.11 8.11 8.11 ...
## $ IsHoliday : logi FALSE TRUE FALSE FALSE FALSE FALSE ...
bd <- merge(train, stores, by = "Store")
bd1 <- bd
bd1 <- merge(bd1, features)
bd2 <- bd1
str(bd2)
## 'data.frame': 421570 obs. of 16 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Factor w/ 143 levels "01/04/2011","01/06/2012",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Temperature : num 59.2 59.2 59.2 59.2 59.2 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ MarkDown1 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown3 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown4 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown5 : num NA NA NA NA NA NA NA NA NA NA ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
bd2 <- subset(bd2, select = -c (MarkDown1,MarkDown2, MarkDown3, MarkDown4, MarkDown5 ))
summary(bd2)
## Store Date IsHoliday Dept
## Min. : 1.0 23/12/2011: 3027 Mode :logical Min. : 1.00
## 1st Qu.:11.0 25/11/2011: 3021 FALSE:391909 1st Qu.:18.00
## Median :22.0 16/12/2011: 3013 TRUE :29661 Median :37.00
## Mean :22.2 09/12/2011: 3010 Mean :44.26
## 3rd Qu.:33.0 17/02/2012: 3007 3rd Qu.:74.00
## Max. :45.0 30/12/2011: 3003 Max. :99.00
## (Other) :403489
## Weekly_Sales Type Size Temperature Fuel_Price
## Min. : -4989 A:215478 Min. : 34875 Min. : -2.06 Min. :2.472
## 1st Qu.: 2080 B:163495 1st Qu.: 93638 1st Qu.: 46.68 1st Qu.:2.933
## Median : 7612 C: 42597 Median :140167 Median : 62.09 Median :3.452
## Mean : 15981 Mean :136728 Mean : 60.09 Mean :3.361
## 3rd Qu.: 20206 3rd Qu.:202505 3rd Qu.: 74.28 3rd Qu.:3.738
## Max. :693099 Max. :219622 Max. :100.14 Max. :4.468
##
## CPI Unemployment
## Min. :126.1 Min. : 3.879
## 1st Qu.:132.0 1st Qu.: 6.891
## Median :182.3 Median : 7.866
## Mean :171.2 Mean : 7.960
## 3rd Qu.:212.4 3rd Qu.: 8.572
## Max. :227.2 Max. :14.313
##
bd2$Date <- as.Date(bd2$Date, format= "%d/%m/%y")
str(bd2)
## 'data.frame': 421570 obs. of 11 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Date, format: "2020-04-01" "2020-04-01" ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Temperature : num 59.2 59.2 59.2 59.2 59.2 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
#install.packages("wordspace")
#library(wordspace)
#signcount(bd2$Weekly_Sales)
bd3 <- bd2
bd3 <- bd3[bd3$Weekly_Sales > 0,]
summary (bd3)
## Store Date IsHoliday Dept
## Min. : 1.0 Min. :2020-01-06 Mode :logical Min. : 1.00
## 1st Qu.:11.0 1st Qu.:2020-04-06 FALSE:390652 1st Qu.:18.00
## Median :22.0 Median :2020-06-29 TRUE :29560 Median :37.00
## Mean :22.2 Mean :2020-06-29 Mean :44.24
## 3rd Qu.:33.0 3rd Qu.:2020-09-21 3rd Qu.:74.00
## Max. :45.0 Max. :2020-12-31 Max. :99.00
## Weekly_Sales Type Size Temperature Fuel_Price
## Min. : 0 A:214961 Min. : 34875 Min. : -2.06 Min. :2.472
## 1st Qu.: 2120 B:162787 1st Qu.: 93638 1st Qu.: 46.68 1st Qu.:2.933
## Median : 7662 C: 42464 Median :140167 Median : 62.09 Median :3.452
## Mean : 16033 Mean :136750 Mean : 60.09 Mean :3.361
## 3rd Qu.: 20271 3rd Qu.:202505 3rd Qu.: 74.28 3rd Qu.:3.738
## Max. :693099 Max. :219622 Max. :100.14 Max. :4.468
## CPI Unemployment
## Min. :126.1 Min. : 3.879
## 1st Qu.:132.0 1st Qu.: 6.891
## Median :182.4 Median : 7.866
## Mean :171.2 Mean : 7.960
## 3rd Qu.:212.4 3rd Qu.: 8.567
## Max. :227.2 Max. :14.313
bd4 <- bd3
bd4$week_number <- strftime(bd4$Date, format = "%V")
str(bd4)
## 'data.frame': 420212 obs. of 12 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Date, format: "2020-04-01" "2020-04-01" ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Temperature : num 59.2 59.2 59.2 59.2 59.2 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
## $ week_number : chr "14" "14" "14" "14" ...
bd4$week_number <- as.integer(bd4$week_number)
str(bd4)
## 'data.frame': 420212 obs. of 12 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Date, format: "2020-04-01" "2020-04-01" ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Temperature : num 59.2 59.2 59.2 59.2 59.2 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
## $ week_number : int 14 14 14 14 14 14 14 14 14 14 ...
summary(bd4)
## Store Date IsHoliday Dept
## Min. : 1.0 Min. :2020-01-06 Mode :logical Min. : 1.00
## 1st Qu.:11.0 1st Qu.:2020-04-06 FALSE:390652 1st Qu.:18.00
## Median :22.0 Median :2020-06-29 TRUE :29560 Median :37.00
## Mean :22.2 Mean :2020-06-29 Mean :44.24
## 3rd Qu.:33.0 3rd Qu.:2020-09-21 3rd Qu.:74.00
## Max. :45.0 Max. :2020-12-31 Max. :99.00
## Weekly_Sales Type Size Temperature Fuel_Price
## Min. : 0 A:214961 Min. : 34875 Min. : -2.06 Min. :2.472
## 1st Qu.: 2120 B:162787 1st Qu.: 93638 1st Qu.: 46.68 1st Qu.:2.933
## Median : 7662 C: 42464 Median :140167 Median : 62.09 Median :3.452
## Mean : 16033 Mean :136750 Mean : 60.09 Mean :3.361
## 3rd Qu.: 20271 3rd Qu.:202505 3rd Qu.: 74.28 3rd Qu.:3.738
## Max. :693099 Max. :219622 Max. :100.14 Max. :4.468
## CPI Unemployment week_number
## Min. :126.1 Min. : 3.879 Min. : 2.00
## 1st Qu.:132.0 1st Qu.: 6.891 1st Qu.:15.00
## Median :182.4 Median : 7.866 Median :27.00
## Mean :171.2 Mean : 7.960 Mean :26.83
## 3rd Qu.:212.4 3rd Qu.: 8.567 3rd Qu.:39.00
## Max. :227.2 Max. :14.313 Max. :53.00
bd5 <- bd4
bd5 <- bd5 %>%
dplyr::mutate(year= lubridate::year(Date), month = lubridate::month(Date), day = lubridate:: day(Date))
regresion <- lm(Weekly_Sales ~ Store+Dept+IsHoliday+Type+Size+Fuel_Price+CPI+Unemployment+week_number+year+month+day, data = bd5)
summary(regresion)
##
## Call:
## lm(formula = Weekly_Sales ~ Store + Dept + IsHoliday + Type +
## Size + Fuel_Price + CPI + Unemployment + week_number + year +
## month + day, data = bd5)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34254 -12899 -5855 5622 671648
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.468e+03 1.059e+03 2.331 0.01974 *
## Store -1.433e+02 3.058e+00 -46.838 < 2e-16 ***
## Dept 1.108e+02 1.097e+00 101.001 < 2e-16 ***
## IsHolidayTRUE 9.247e+02 1.350e+02 6.848 7.48e-12 ***
## TypeB -3.187e+02 1.070e+02 -2.980 0.00289 **
## TypeC 5.849e+03 1.838e+02 31.813 < 2e-16 ***
## Size 9.920e-02 9.555e-04 103.814 < 2e-16 ***
## Fuel_Price 8.705e+01 9.166e+01 0.950 0.34224
## CPI -2.396e+01 9.451e-01 -25.349 < 2e-16 ***
## Unemployment -2.317e+02 1.973e+01 -11.747 < 2e-16 ***
## week_number -7.156e+02 2.335e+02 -3.065 0.00218 **
## year NA NA NA NA
## month 3.299e+03 1.013e+03 3.255 0.00113 **
## day 8.427e+01 3.349e+01 2.517 0.01185 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21690 on 420199 degrees of freedom
## Multiple R-squared: 0.08979, Adjusted R-squared: 0.08976
## F-statistic: 3454 on 12 and 420199 DF, p-value: < 2.2e-16
datos_nuevos <- data.frame(Store=1, IsHoliday= TRUE, Dept=1, Type="A", Size= 151315, week_number =1, Temperature = 59.17, Fuel_Price = 3.524, CPI= 214.8372, Unemployment = 7.682, year =2012, month = 1, day=1)
predict(regresion,datos_nuevos)
## Warning in predict.lm(regresion, datos_nuevos): prediction from a rank-deficient
## fit may be misleading
## 1
## 14417
Analizamos una base de datos proporcionada por WALMART, en la cual nos venían 4 archivos diferentes, los cuales tuvimos que unir para poder analizar completamente todas las variables y los datos. Por lo tanto, el primer paso que hicimos fue unir la base de datos, para esto era necesario identificar las primeras dos bases que uniríamos. Para unirlos necesitamos una key word que serviría para evitar que se dupliquen los datos y simplemente que las columnas faltantes se peguen a la base de datos. Y el objetivo de este análisis es el realizar un modelo predicción para ver cuántas ventas se van a tener por semana en Walmart, esto nos puede ayudar a enfocarnos en distintos departamentos como lo es en mercadotecnia, ventas y en los diferentes áreas de la tienda. También es importante seleccionar la plantilla para crear valor a partir de los datos de los clientes en este caso utilizamos visión, pero también existe segmentación, personalización y contextualización. Realizamos los siguientes pasos para poder obtener esta predicción:
Juntar Bases de Datos.
Eliminar los NA’s que se encontraban en los Markdown.
Realizamos una regresión con el propósito de obtener la relación entre las variables.
Realizar modelo de Predicción.
Toma en cuenta que para realizar este proceso es muy delicado, descarga los paquetes correspondientes para llamar a las librerías, algunos paquetes no se pueden instalar debido a la versión, por lo que la librería como Wordspace no correrá por la falta de actualización de R. Por ultimo, es muy importante realizar un plan de ejecución con diferentes fases, partiendo de la primera con un piloto para poder hacer pruebas, en este tomamos Texas como piloto, esto ayuda a poder hacer varias pruebas en un segmento más especifico y Texas es donde hay más Walmart en EUA, y al tener éxito en este piloto podremos pasar con las siguientes fases y expandir el rango al que se esta enfocando la predicción.