DELIVERY PLAN

Llamar las librerías que posiblemente sean requeridas

library(foreign)
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
library(forcats)     
library(ggplot2)     
library(janitor)    
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(Hmisc)       
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
library(naniar)       
library(dlookr)     
## 
## Attaching package: 'dlookr'
## The following object is masked from 'package:Hmisc':
## 
##     describe
## The following object is masked from 'package:base':
## 
##     transform
library(corrplot)     
## corrplot 0.92 loaded
library(pollster)
## 
## Attaching package: 'pollster'
## The following object is masked from 'package:janitor':
## 
##     crosstab
library(descr)
## 
## Attaching package: 'descr'
## The following object is masked from 'package:pollster':
## 
##     crosstab
## The following object is masked from 'package:janitor':
## 
##     crosstab
library(jtools)    
## 
## Attaching package: 'jtools'
## The following object is masked from 'package:Hmisc':
## 
##     %nin%
library(lmtest)       
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)         
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
library(olsrr)     
## 
## Attaching package: 'olsrr'
## The following object is masked from 'package:datasets':
## 
##     rivers
library(kableExtra)   
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(data.table)
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:Hmisc':
## 
##     is.discrete, summarize
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
library(psych)
## 
## Attaching package: 'psych'
## The following object is masked from 'package:car':
## 
##     logit
## The following object is masked from 'package:dlookr':
## 
##     describe
## The following object is masked from 'package:Hmisc':
## 
##     describe
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(tidyverse)
## Registered S3 methods overwritten by 'broom':
##   method            from  
##   tidy.glht         jtools
##   tidy.summary.glht jtools
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ tibble  3.1.8     ✔ purrr   0.3.4
## ✔ tidyr   1.2.1     ✔ stringr 1.4.1
## ✔ readr   2.1.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ psych::%+%()             masks ggplot2::%+%()
## ✖ psych::alpha()           masks ggplot2::alpha()
## ✖ plyr::arrange()          masks dplyr::arrange()
## ✖ data.table::between()    masks dplyr::between()
## ✖ purrr::compact()         masks plyr::compact()
## ✖ plyr::count()            masks dplyr::count()
## ✖ tidyr::extract()         masks dlookr::extract()
## ✖ plyr::failwith()         masks dplyr::failwith()
## ✖ dplyr::filter()          masks stats::filter()
## ✖ data.table::first()      masks dplyr::first()
## ✖ kableExtra::group_rows() masks dplyr::group_rows()
## ✖ plyr::id()               masks dplyr::id()
## ✖ dplyr::lag()             masks stats::lag()
## ✖ data.table::last()       masks dplyr::last()
## ✖ plyr::mutate()           masks dplyr::mutate()
## ✖ car::recode()            masks dplyr::recode()
## ✖ plyr::rename()           masks dplyr::rename()
## ✖ purrr::some()            masks car::some()
## ✖ Hmisc::src()             masks dplyr::src()
## ✖ plyr::summarise()        masks dplyr::summarise()
## ✖ plyr::summarize()        masks Hmisc::summarize(), dplyr::summarize()
## ✖ purrr::transpose()       masks data.table::transpose()
library(knitr)
library(epiDisplay)
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:olsrr':
## 
##     cement
## 
## The following object is masked from 'package:dplyr':
## 
##     select
## 
## Loading required package: nnet
## 
## Attaching package: 'epiDisplay'
## 
## The following objects are masked from 'package:psych':
## 
##     alpha, cs, lookup
## 
## The following object is masked from 'package:lmtest':
## 
##     lrtest
## 
## The following object is masked from 'package:jtools':
## 
##     summ
## 
## The following object is masked from 'package:lattice':
## 
##     dotplot
## 
## The following object is masked from 'package:ggplot2':
## 
##     alpha
library(tidyr)

Importar base de datos

#file.choose()
dp <- read.csv("/Users/isaacdiazruizdechavez/Downloads/DELIVERY PLAN bdf_Prueba.csv")

Limpieza de datos

La limpieza y modificación de filas y columnas respecto a las variables se realizó directamente en Excel por cuestiones de facilidad ya que la base estaba ordenada de una manera en donde R resultaría mucho más complicado.

Cambio de formato de fecha

dp1 <- dp
dp1$Fecha<-as.Date(dp1$Fecha,format="%m/%d/%Y") 

Contabilizar si hay NA´S dentro de la base de datos actual para sustituirlos con la media, moda o mediana.

colSums(is.na(dp1))
## ID_Fecha    Fecha  CLIENTE  Pedidos 
##        0        0        0        0

Vemos que en la base de datos no hay NA´S

Mediana

mediana <- median(dp1$Pedidos, na.rm = TRUE)
mediana
## [1] 0
describe(dp1)
## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf
##          vars   n    mean      sd median trimmed  mad min   max range skew
## ID_Fecha    1 228    6.50    3.46    6.5    6.50 4.45   1    12    11 0.00
## Fecha       2 228     NaN      NA     NA     NaN   NA Inf  -Inf  -Inf   NA
## CLIENTE*    3 228   10.00    5.49   10.0   10.00 7.41   1    19    18 0.00
## Pedidos     4 228 1703.14 6164.04    0.0  251.26 0.00   0 52779 52779 5.69
##          kurtosis     se
## ID_Fecha    -1.23   0.23
## Fecha          NA     NA
## CLIENTE*    -1.22   0.36
## Pedidos     37.14 408.22

Para conocer estas funciones estadísticas realizamos una descripción de la base de datos, donde podemos ver que la mediana es 0. Hay un total de 228 registros y utilizamos 4 variables para acomodo de las gráficas en donde contabilizamos el número de pedidos por mes y cliente.

Histograma general

hist(dp1$Pedidos) 

Principales clientes

Con la siguiente función podremos identificar los principales clientes para generar un análisis con la información relevante, pues hay clientes con pocos o sin pedidos por lo que generar un diagnóstico respecto a delivery plan con esos datos no es necesario.

ggplot(dp1, aes(x=reorder(CLIENTE,Pedidos), y=Pedidos)) +
  geom_bar(stat="identity")+
  coord_flip()

Como siguiente paso eliminaremos todos los clientes que no nos interesan para el análisis y dejaremos el top 6 de clientes para el ejercicio.

dp2 <- dp1
dp2<-dp2[dp2$CLIENTE!="ABC QUERETARO",]
dp2<-dp2[dp2$CLIENTE!="ANTOLIN ARTEAGA",]  
dp2<-dp2[dp2$CLIENTE!="ANTOLIN TOLUCA",] 
dp2<-dp2[dp2$CLIENTE!="ISRI",] 
dp2<-dp2[dp2$CLIENTE!="SEGROVE",] 
dp2<-dp2[dp2$CLIENTE!="STB 1",] 
dp2<-dp2[dp2$CLIENTE!="UFI",] 
dp2<-dp2[dp2$CLIENTE!="YF QRO",] 
dp2<-dp2[dp2$CLIENTE!="INOAC POLYTEC",] 
dp2<-dp2[dp2$CLIENTE!="HANON",] 
dp2<-dp2[dp2$CLIENTE!="MERIDIAN",] 
dp2<-dp2[dp2$CLIENTE!="YF RAMOS",] 
dp2<-dp2[dp2$CLIENTE!="YANFENG sm",] 

Gráfica para saber los clientes y dónde está el promedio

Vemos el gráfico con los datos del top 6 de clientes

ggplot(dp2,aes(x=Fecha, y=Pedidos,fill=CLIENTE))+
  geom_bar(stat="identity")+
  geom_hline(yintercept=33,linetype="dashed",color="black")+
  labs(x="Fecha",y="Número de pedidos", color="Legend")+
  ggtitle("Pedidos por fecha")

Scatter plot

plot(dp2$Fecha, dp2$Pedidos, main = "Pedidos por fecha",
     xlab = "Fecha", ylab = "Pedidos",
     pch = 1, frame = FALSE)

Boxplot de pedidos

boxplot(dp2$Pedidos, main = "Pedidos")

Como primer boxplot vimos los pedidos y la gran dispersión que hay entre pedidos, pues detectamos una frecuencia en donde hay clientes que generan pedidos obviamente diferentes como para tener una mediana o una dispersión positiva.

Boxplot por cliente

Después de generar un boxplot de pedidos en general, realizamos un boxplot que nos muestra los pedidos por cliente

dp3 <- dp2
dp3$CLIENTE<-as.factor(dp3$CLIENTE)
ggplot(dp3, aes(x=CLIENTE, y=Pedidos)) + 
  geom_boxplot(color="red", fill="orange", alpha=0.2)

En el gráfico anterior podemos observar a los 6 clientes con mayor presencia en FORM en cuanto a Delivery Plan en donde el objetivo es ver la dispersión y la distribución entre cada uno y respecto a los pronósticos individuales.

El cliente HELLA es el cliente con una mayor distribución y dispersión y una mediana que genera una desviación estándar positiva. Varroc y TRMX tienen también una distribución mayor al tener la boxplot más grande, mientras que los demás; DENSO, STB3 y YFTO tienen la mayoría de sus pedidos en un mismo rango con pequeños datos fuera del boxplot presentando algunos warnings.

Se puede concluir, que HELLA es el cliente más fuerte en dicha base de datos para la empresa.