library(plyr)
library(tidyverse)
library(knitr)
library(foreign)
library(dplyr) # data manipulation
library(forcats) # to work with categorical variables
library(ggplot2) # data visualization
library(janitor) # data exploration and cleaning
#install.packages("Hmisc")
library(Hmisc) # several useful functions for data analysis
#install.packages("psych")
library(psych) # functions for multivariate analysis
#install.packages("naniar")
library(naniar) # summaries and visualization of missing values NAs
#install.packages("dlookr")
library(dlookr) # summaries and visualization of missing values NAs
#install.packages("corrplot")
library(corrplot) # correlation plots
#install.packages("jtools")
library(jtools) # presentation of regression analysis
#install.packages("lmtest")
library(lmtest) # diagnostic checks - linear regression analysis
#install.packages("car")
library(car) # diagnostic checks - linear regression analysis
#install.packages("olsrr")
library(olsrr) # diagnostic checks - linear regression analysis
#install.packages("kableExtra")
library(kableExtra) # HTML table attributes
#file.choose()
MERMA<- read.csv("/Users/emilioolvera/Downloads/FORM - Merma.csv")
SCRAP<- read.csv("/Users/emilioolvera/Downloads/Scrap.csv")
PRODUCCION<- read.csv("/Users/emilioolvera/Downloads/FORM - Producción Carton.csv")
La base de datos de Merma tiene 60 registros Y 3 variables.
describe(MERMA)
## # A tibble: 0 × 9
## # … with 9 variables: described_variables <chr>, n <int>, na <int>, mean <dbl>,
## # sd <dbl>, se_mean <dbl>, IQR <dbl>, skewness <dbl>, kurtosis <dbl>
dim(MERMA)
## [1] 60 3
La base de datos de Scrap tiene 251 registros Y 9 variables.
describe(SCRAP)
## # A tibble: 1 × 26
## described_…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Cantidad 251 0 13.3 106. 6.68 6 15.6 245. 0 1
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
dim(SCRAP)
## [1] 251 8
La base de datos de Producción tiene 2469 registros y 17 variables
describe(PRODUCCION)
## # A tibble: 5 × 26
## describe…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 No. 2469 0 1.24e3 713. 14.3 1234 0 -1.2 1 25.7
## 2 PIEZAS.P.… 2468 1 1.83e2 150. 3.02 108 2.11 7.49 1 8.67
## 3 Laminas.P… 1908 561 1.09e2 134. 3.08 200 2.34 8.68 0 0
## 4 TIEMPO.MA… 321 2148 2.32e0 5.93 0.331 1 3.94 20.1 0 0
## 5 MERMAS.Ma… 107 2362 1.63e0 5.02 0.485 1 8.70 83.2 0 0
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
dim(PRODUCCION)
## [1] 2469 17
| Variable | Type | escalas |
|---|---|---|
Fecha
|
Cualitativa | nominal |
Mes
|
Cualitativa | nominal |
Kilos
|
Cuantitativa (discreta) | ordinal |
| Variable | Type |
|---|---|
Referencia
|
Cualitativa |
Fecha
|
Cualitativa |
Hora
|
Cuantitativa (continua) |
Producto
|
Cualitativa |
Cantidad
|
Cuantitativa (discreta) |
Unidad de medidad
|
Cualitativa |
Ubicación de origen
|
Cualitativa |
Ubicación de desecho
|
Cualitativa |
Estado
|
Cualitativa |
Variable<-c("`Cliente`","`ID Form`", "`Producto`","`Piezas programadas`", "`Tiempo minutos`", "`Hora fin`", "`Estacion arranque`", "`Laminas procesadas`", "`Inicio set up`", "`Fin inicio set up`", "`Inicio de proceso`", "`Fin de proceso`", "`Tiempo calidad`")
Type<-c("Cualitativa","Cualitativa", "Cualitativa","Cuantitativa (discreta)", "Cuantitativa (discreta)", "Cuantitativa (continua)", "Cualitativa", "Cuantitativa (discreta)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cuantitativa (discreta)" )
Escalas<-c("Nominal", "Nominal","Nominal", "Intervalo", "Intervalo", "Intervalo", "Intervalo","Intervalo","Intervalo","Intervalo","Intervalo","Intervalo","Intervalo" )
table<-data.frame(Variable,Type,Escalas)
knitr::kable(table)
| Variable | Type | Escalas |
|---|---|---|
Cliente
|
Cualitativa | Nominal |
ID Form
|
Cualitativa | Nominal |
Producto
|
Cualitativa | Nominal |
Piezas programadas
|
Cuantitativa (discreta) | Intervalo |
Tiempo minutos
|
Cuantitativa (discreta) | Intervalo |
Hora fin
|
Cuantitativa (continua) | Intervalo |
Estacion arranque
|
Cualitativa | Intervalo |
Laminas procesadas
|
Cuantitativa (discreta) | Intervalo |
Inicio set up
|
Cuantitativa (continua) | Intervalo |
Fin inicio set up
|
Cuantitativa (continua) | Intervalo |
Inicio de proceso
|
Cuantitativa (continua) | Intervalo |
Fin de proceso
|
Cuantitativa (continua) | Intervalo |
Tiempo calidad
|
Cuantitativa (discreta) | Intervalo |
La variable de Kilos estaba en formato de carácter y se paso a numérica.
str(MERMA)
## 'data.frame': 60 obs. of 3 variables:
## $ Fecha: chr "1/11/22" "1/11/22" "1/22/22" "1/22/22" ...
## $ Mes : chr "ENERO" "ENERO" "ENERO" "ENERO" ...
## $ Kilos: chr "5080" "3810" "2990" "2680" ...
MERMA$Kilos <- as.numeric(MERMA$Kilos)
## Warning: NAs introduced by coercion
Despues de cambiar la variante que estaba de caracter a numerica se quizo hacer que se mostraran solamente el total de kilos por mes por lo cual despues de ver esta informacion pude ver que el mes con mayor cantidad de merma fue agosto
MERMA1<-aggregate(Kilos ~ Mes , data = MERMA, sum)
SCRAP1 <- SCRAP
SCRAP1 <- select(SCRAP1, Fecha, Cantidad, Ubicación.de.origen)
SCRAP1 <- SCRAP1 [- c(1),]
Borrar todos los registros NA de una tabla para tener una base de datos mas eficiente, se quiso hacer esto para no tomar en cuenta el dia que no hubo produccion
SCRAP2 <- SCRAP1
SCRAP2 <- na.omit(SCRAP2)
str(SCRAP2)
## 'data.frame': 250 obs. of 3 variables:
## $ Fecha : chr "2022-08-31 14:55:40" "2022-08-31 14:49:25" "2022-08-31 13:49:29" "2022-08-31 09:30:07" ...
## $ Cantidad : num 2 1 1 31 1 1 1 9 2 1 ...
## $ Ubicación.de.origen: chr "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Pre-Production" ...
PRODUCCION[is.na(PRODUCCION)]<-0
summary(PRODUCCION)
## No. CLIENTE ID.FORM P..DUCTO
## Min. : 1 Length:2469 Length:2469 Length:2469
## 1st Qu.: 618 Class :character Class :character Class :character
## Median :1235 Mode :character Mode :character Mode :character
## Mean :1235
## 3rd Qu.:1852
## Max. :2469
## PIEZAS.P..G. TMO..MIN. HR..FIN ESTACION.AR..NQUE
## Min. : 0.0 Length:2469 Length:2469 Length:2469
## 1st Qu.: 100.0 Class :character Class :character Class :character
## Median : 160.0 Mode :character Mode :character Mode :character
## Mean : 182.7
## 3rd Qu.: 208.0
## Max. :1280.0
## Laminas.Procesadas INICIO.SEP.UP FIN.INICIO.DE.SEP.UP INICIO.de.P....SO
## Min. : 0.00 Length:2469 Length:2469 Length:2469
## 1st Qu.: 0.00 Class :character Class :character Class :character
## Median : 29.00 Mode :character Mode :character Mode :character
## Mean : 83.87
## 3rd Qu.: 122.00
## Max. :1125.00
## FIN.de.P....SO TIEMPO..CALIDAD TIEMPO.MATERIALES MERMAS.Maquinas.
## Length:2469 Length:2469 Min. : 0.0000 Min. : 0.00000
## Class :character Class :character 1st Qu.: 0.0000 1st Qu.: 0.00000
## Mode :character Mode :character Median : 0.0000 Median : 0.00000
## Mean : 0.3017 Mean : 0.07047
## 3rd Qu.: 0.0000 3rd Qu.: 0.00000
## Max. :48.0000 Max. :50.00000
## Date
## Length:2469
## Class :character
## Mode :character
##
##
##
PRODUCCION1 <- PRODUCCION
PRODUCCION1<-subset(PRODUCCION1,select=-c(No.,ID.FORM,P..DUCTO,HR..FIN, ESTACION.AR..NQUE,INICIO.SEP.UP,FIN.INICIO.DE.SEP.UP,INICIO.de.P....SO,FIN.de.P....SO,TIEMPO..CALIDAD,TIEMPO.MATERIALES,MERMAS.Maquinas.))
str(PRODUCCION1)
## 'data.frame': 2469 obs. of 5 variables:
## $ CLIENTE : chr "VARROC" "VARROC" "VARROC" "DENSO" ...
## $ PIEZAS.P..G. : num 199 57 68 192 192 400 80 104 104 160 ...
## $ TMO..MIN. : chr "15" "10" "10" "15" ...
## $ Laminas.Procesadas: num 201 116 69 49 49 801 41 53 53 55 ...
## $ Date : chr "01/08/22" "01/08/22" "01/08/22" "01/08/22" ...
PRODUCCION2 <- PRODUCCION
colnames(PRODUCCION2) <- PRODUCCION[1,]
colnames(PRODUCCION2)
## [1] "1" "VARROC" "VL-017-13938" "763 . KIT. JA."
## [5] "199" "15" "9:15" "C1"
## [9] "201" "9:00" "9:12" "9:13"
## [13] "9:26" "1" "0" "0"
## [17] "01/08/22"
PRODUCCION2 <- PRODUCCION2[-1,]
table(MERMA1$Mes, MERMA1$Kilos)
##
## 13586 14560 18280 18820 19370 22470 22830 23410 32100
## ABRIL 0 0 0 1 0 0 0 0 0
## AGOSTO 0 0 0 0 0 0 0 0 1
## ENERO 0 1 0 0 0 0 0 0 0
## FEBRERO 0 0 0 0 0 0 1 0 0
## JULIO 0 0 0 0 1 0 0 0 0
## JUNIO 0 0 1 0 0 0 0 0 0
## MARZO 0 0 0 0 0 1 0 0 0
## MAYO 0 0 0 0 0 0 0 1 0
## SEPTIEMBRE 1 0 0 0 0 0 0 0 0
prop.table(table(MERMA1$Mes, MERMA1$Kilos))
##
## 13586 14560 18280 18820 19370 22470
## ABRIL 0.0000000 0.0000000 0.0000000 0.1111111 0.0000000 0.0000000
## AGOSTO 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## ENERO 0.0000000 0.1111111 0.0000000 0.0000000 0.0000000 0.0000000
## FEBRERO 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## JULIO 0.0000000 0.0000000 0.0000000 0.0000000 0.1111111 0.0000000
## JUNIO 0.0000000 0.0000000 0.1111111 0.0000000 0.0000000 0.0000000
## MARZO 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.1111111
## MAYO 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## SEPTIEMBRE 0.1111111 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
##
## 22830 23410 32100
## ABRIL 0.0000000 0.0000000 0.0000000
## AGOSTO 0.0000000 0.0000000 0.1111111
## ENERO 0.0000000 0.0000000 0.0000000
## FEBRERO 0.1111111 0.0000000 0.0000000
## JULIO 0.0000000 0.0000000 0.0000000
## JUNIO 0.0000000 0.0000000 0.0000000
## MARZO 0.0000000 0.0000000 0.0000000
## MAYO 0.0000000 0.1111111 0.0000000
## SEPTIEMBRE 0.0000000 0.0000000 0.0000000
La tabla de frecuencia se hizo de los Kilos y esta me sirvio para ver que nunca tienen el mismo monto de merma
FREC_SCRAP<-SCRAP1 %>% group_by(Cantidad) %>% tally()
FREC_SCRAP
## # A tibble: 33 × 2
## Cantidad n
## <dbl> <int>
## 1 0 1
## 2 1 76
## 3 2 59
## 4 2.5 2
## 5 3 14
## 6 4 18
## 7 5 4
## 8 6 11
## 9 7 4
## 10 8 10
## # … with 23 more rows
La tabla de frecuencia de scrap se hizo de cantidad y esta me sirvio para ver como varia la cantidad de scrap la cual se ve reflejada yendo a varias ubicaciones la cual es 1
FREC_PROD<-PRODUCCION1 %>% group_by(PIEZAS.P..G.) %>% tally()
FREC_PROD
## # A tibble: 155 × 2
## PIEZAS.P..G. n
## <dbl> <int>
## 1 0 1
## 2 1 2
## 3 2 3
## 4 3 1
## 5 4 4
## 6 5 3
## 7 6 3
## 8 7 2
## 9 8 7
## 10 9 1
## # … with 145 more rows
La tabla de frecuencia de produccion se hizo de piezas, esta me sirvio para ver como es que las piezas de produccion se van vendiendo
ggplot(data=MERMA1, mapping = aes(Mes, Kilos)) + geom_point(aes()) + theme_bw()
En esta grafica podemos apreciar los datos de lo que son los
kilos que tienen de merma por mes en donde se puede ver que en agosto es
cuando se tiene el mayor numero de merma, dato que ya habia mencionado
antes en el apartado de cuando se hizo la limpieza de datos
ggplot(data=SCRAP2, mapping = aes(Cantidad, Ubicación.de.origen)) + geom_point(aes()) + theme_bw()
ggplot(data=SCRAP1, mapping =
aes(Cantidad, Ubicación.de.origen)) +
geom_point(aes()) + theme_bw()
En esta grafica de dispersion se puede apreciar visualmente la
cantidad que se produce en cada ubicacion, tal fue de ayuda para ver que
en SAB/Pre-Production es la que mas tiene Scrap.
ggplot(PRODUCCION1, aes(x=`PIEZAS.P..G.`, y=CLIENTE)) +
geom_point()
En esta grafica de dispersion se puede apreciar visualmente la
cantidad de piezas que se demandan para los diferentes
clientes.
Grafico de barras de los kilos de MERMA que se producen por mes
ggplot(MERMA1, aes(x=Mes, y=Kilos)) +
geom_bar(stat="identity", fill="yellow") + scale_fill_grey() +
labs(title = "Grafica de Barras de los kilos de merma que hay por mes.",
x = "Mes", y = "Kilos")
Visualmente podemos ver que Agosto tiene el mayor numero de
merma a comparacion de los otros meses
Grafico de barras de SCRAP de la cantidad de las piezas por la ubicación
ggplot(SCRAP2, aes(x=Ubicación.de.origen, y=Cantidad)) +
geom_bar(stat="identity", fill="BLUE") + scale_fill_grey() +
labs(title = "Grafico de barras de las unidades de Scrap por ubicacion de origen",
x = "Unidades", y = "Ubicación")
En esta grafica de barras es visualmente claro que como se menciono anteriormente, el area de pre-production es la que mas scrap lleva.
Como propuesta para la merma, se tiene que implementar un plan que minimice la cantidad de merma generada, la cual se ve que fue alta en los meses de de Agosto y Septiembre donde se requiere determinar la causa del alto nivel de estos desechos, para asi poder prevenir futuros gastos extra y asi no volver a tener este problema.
Como propuesta para scrap, puedo decir que en el area de Pre-production siendo el area que mas scrap lleva se tiene que implementar un plan para disminuir esto ya que se podria decir que se reflajan gastos extra que son innecesarios.
Como primera propuesta para produccion puedo decir que se sigan adaptando a las necesidades de los cientes pero que tambien traten de implementar otras maneras ya que se quiere llegar a todos los clientes posibles y no estar segmentando, por lo cual es importante de tratar de abrirse mas hacia los clientes que no les llegan a pedir las mismas demandas.
Realizar el análisis de FORM fue muy interesante porque eso me permitió darme cuenta del gran potencial que puede llegar a tener una empresa y que muchas veces no se tiene en cuenta el alcance al que se puede llegar y aprovechar los recursos o bien, las oportunidades que se tienen para mejorar la situación de la empresa y que en este caso, FORM teniendo diferentes puntos a ver puede hacer de esta situación una oportunidad para hacer un cambio positivo. El haber analizado las bases de datos tambien me dio una percepción muy amplia y clara sobre la posición que tiene FORM y en base a ello poder tomar mejores decisiones que lleven a la organización a ser más competitiva y tener la oportunidad de expandir el mercado en el que se encuentre en ese momento la empresa, evitando siempre todos los riesgos que se puedan presentar, o al menos saber responder con mayor certeza ante ellos.