Descargar Librerias

library(data.table)
library(dplyr)
library(plyr)
library(ggplot2)
library(naniar)
library(Hmisc)         
library(psych)
library(tidyverse)
library(janitor)
library(knitr)
library(pollster)
library(epiDisplay)
library(descr)
library(tidyr)

Delivery Plan

Limpieza

Importar base de datos

setwd("C:\\Users\\jimen\\Downloads")

del_plan <- read.csv("DP_1.csv")

Convertir meses en una columna

Esto fue necesario primeramente para poder tener mejor manejo de las unidades de produccion mensuales ya que originalmente en la base de datos estas eran registradas diariamente lo cual tornaria el analisis mil veces mas tedioso. Despues de eso con la funcion de pivot_longer se logro cambiar de posicion para que asi se pudieran ver las variables de una manera mas optima para poder realizar los siguienres analisis

del_plan <- clean_names(del_plan)
del_plan<-del_plan %>% dplyr::rename(jun_21=junio,
                               jul_21=julio,
                               ago_21=agosto, sep_21=septiembre, oct_21= octubre, nov_21=noviembre, dic_21=diciembre, oct_22=octubre_22)
del_plan<-pivot_longer(del_plan, cols=5:16, names_to = "mes", values_to = "unidades")

del_plan <- dplyr::select(del_plan, -c(5:15))

Eliminar columnas no necesarias

Despues tambien fue necesario eliminar columnas no necesarias como ID ODOO, Proyecto e ITEM ya que a pesar de que son importantes generalmente, en este momento exacto no iban a ser de mucha ayuda ya que lo que nos interesa se encuentra en otras columnas.

del_plan <- dplyr::select(del_plan, -c(2:4))

Por lo tantoi solo vamos a mantener solo cliente_planta, mes y unidades

Formato de las variables

str(del_plan)
## tibble [2,772 × 3] (S3: tbl_df/tbl/data.frame)
##  $ cliente_planta: chr [1:2772] "STB3" "STB3" "STB3" "STB3" ...
##  $ mes           : chr [1:2772] "jun_21" "jul_21" "ago_21" "sep_21" ...
##  $ unidades      : int [1:2772] 0 140 530 0 200 0 150 230 500 0 ...

Al ver el formato nos damos cuenta que esta bien y no hacemos ningunn cambio

NA’s y valores atipicos

Al observar la base de datos no se encuentran NA ni valores atipicos, unicamente eliminaremos los registros que tienen 0 unidades programadas.

del_plan <- filter(del_plan, unidades>0)
sum(is.na(del_plan))
## [1] 0

Exportar la base de datos

#del_plan_limpia<-del_plan
#write.csv(del_plan_limpia,file = "CLEANDBDeliveryPlan.csv", row.names = FALSE)

Graficas

Tabla estadisticas

tabla_estadisticos <- describe(del_plan)
tabla_estadisticos
##                 vars   n   mean      sd median trimmed   mad min   max range
## cliente_planta*    1 733  17.06    6.42     20   17.85  2.97   1    25    24
## mes*               2 733   6.41    3.50      6    6.43  4.45   1    12    11
## unidades           3 733 406.35 1337.17     76  152.96 97.85   1 17665 17664
##                  skew kurtosis    se
## cliente_planta* -1.21    -0.03  0.24
## mes*             0.00    -1.27  0.13
## unidades         8.35    84.94 49.39

Al realizar una tabla estadistica, R nos arroja diferentes metodos como son la media, la mediana y la moda, ademas de la desviacion estandar las cuales son descripciones bastante importantes al momento de realizar un analisis de datos. En cuanto a la media podemos ver que para Unidades es 406 lo que quiere decir que esta cantidad es lo que suelen tener programado mensualmente. Por otro lado si vemos nuestra mediana podemos ver que existe un numero muy diferente el cual es 76, lo que nos habla de un rango bastante amplio de cantidades de unidades programadas ya que a pesar de que el promedio es alto, tambien hay muchas unidades que llegan con cantidades menores a 76.

Bar plots

library(dplyr)
str(del_plan)
## tibble [733 × 3] (S3: tbl_df/tbl/data.frame)
##  $ cliente_planta: chr [1:733] "STB3" "STB3" "STB3" "STB3" ...
##  $ mes           : chr [1:733] "jul_21" "ago_21" "oct_21" "dic_21" ...
##  $ unidades      : int [1:733] 140 530 200 150 230 500 184 125 55 55 ...
del_plan$cliente_planta<-as.factor(del_plan$cliente_planta)
del_plan$unidades<-as.numeric(del_plan$unidades) 

del_plan2<-aggregate(unidades~cliente_planta, data = del_plan,sum)%>% arrange(desc(unidades))
del_plan3<-filter(del_plan2, unidades>4000)

ggplot(del_plan3, aes(x=reorder(cliente_planta,unidades), y=unidades)) +
  geom_bar(stat="identity")+
  coord_flip()

Para este Bar Plot fue necesario realizar un proceso en el cual primero se convirtieron las variables mediante las funciones de as.factor y as.numeric para asi poder volver datos cualitativos a cuantitativos para tornarlos mas manejables. Despues de esto se procedio a graficar y al realizar esto se logro ver que salia un grafico bastante largo en el cual hasta se mostraban unidades programadas tan pequenas como de una sola unidad por lo tanto despues se pidio que solamente mostrara valores mayores a 4000 lo cual nos resulto en una grafica donde se podian observar los Clientes con mayor numero de unidades en orden descendiente.

Dispersion

del_plan2$unidades<-as.numeric(del_plan2$unidades)

ggplot(del_plan, aes(x=cliente_planta, y=unidades, fill=cliente_planta)) + 
  geom_boxplot() 

boxplot(del_plan3$cliente_planta,del_plan3$unidades)

class(del_plan2$unidades)
## [1] "numeric"

Para este paso tambien fue necesario utilizar la funcion “as.numeric” para poder contar con datos mas manejables para poder realizar el boxplot

Antes de cualquier cosa se tuvo la intencion de eliminar los datos menores a 4000 como en uno de los pasos anteriores para asi contar con un grafico mas eficiente pero no fue posible, pero aun asi es posible ver las observaciones en el grafico.

A pesar de que en el eje de las X no se logran distinguir los nombres de los clientes, al lado derrecho se puede conectar con el color y de esta manera podemos ver que en efecto Hella Es aquel cliente con mayor cantidad de unidades y ademas de eso cuenta con algunos outliers muy por encima de la median, seguido por TRMX el cual no cuenta con outliers.

Diciendonos que con estos datos se podria realizar un modelo bastante acertado ya que se cuenta con muchos registros, los cuales probablemente si usamos TRMX sean aun mas certeros para proximas unidades programadas del mismo cliente.

Time series plot

del_plan4<-aggregate(unidades~cliente_planta+mes, data = del_plan,sum)%>% arrange(desc(unidades))
del_plan5<-filter(del_plan4, cliente_planta=="HELLA" & cliente_planta=="TRMX" & cliente_planta=="VARROC" & cliente_planta=="DENSO")
ggplot(del_plan,aes(x=mes, y=unidades,color=cliente_planta))+
  geom_line()+
  labs(x="Fecha",y="Delay in Minutes", color="Legend")+
  ggtitle("Delays in Performance by Client")

Para esta ultima grafica fue necesario introducir la variable de tiempo que en este caso es mes para poder realizar este plot de series de tiempo donde se muestra claramente la dispersion de las variables. Como podemos ver en la segunda mitad del periodo anual se ve un incremento notorio, ademas de un decremento justo por finales del segundo semestre.