a
Para comenzar importaremos las librerias que posiblemente sean necesarias para el codigo.
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(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:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
library(ggplot2)
library(naniar)
library(Hmisc)
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:plyr':
##
## is.discrete, summarize
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
library(psych)
##
## Attaching package: 'psych'
## The following object is masked from 'package:Hmisc':
##
## describe
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(tidyverse)
## ── Attaching packages
## ───────────────────────────────────────
## tidyverse 1.3.2 ──
## ✔ tibble 3.1.8 ✔ purrr 0.3.4
## ✔ tidyr 1.2.0 ✔ stringr 1.4.1
## ✔ readr 2.1.2 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ psych::%+%() masks ggplot2::%+%()
## ✖ psych::alpha() masks ggplot2::alpha()
## ✖ plyr::arrange() masks dplyr::arrange()
## ✖ purrr::compact() masks plyr::compact()
## ✖ plyr::count() masks dplyr::count()
## ✖ plyr::failwith() masks dplyr::failwith()
## ✖ dplyr::filter() masks stats::filter()
## ✖ plyr::id() masks dplyr::id()
## ✖ dplyr::lag() masks stats::lag()
## ✖ plyr::mutate() masks dplyr::mutate()
## ✖ plyr::rename() masks dplyr::rename()
## ✖ Hmisc::src() masks dplyr::src()
## ✖ plyr::summarise() masks dplyr::summarise()
## ✖ Hmisc::summarize() masks plyr::summarize(), dplyr::summarize()
library(janitor)
##
## Attaching package: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(knitr)
library(pollster)
##
## Attaching package: 'pollster'
##
## The following object is masked from 'package:janitor':
##
## crosstab
library(epiDisplay)
## Loading required package: foreign
## Loading required package: MASS
##
## Attaching package: 'MASS'
##
## 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:lattice':
##
## dotplot
##
## The following object is masked from 'package:ggplot2':
##
## alpha
Una vez se importaron las librerias, procedemos a importar las bases de datos
produccion <- read.csv("C:\\Users\\chema\\Documents\\Clase\\produccioncarton.csv")
scrap <- read.csv("C:\\Users\\chema\\Downloads\\FORM1 - Scrap.csv")
merma <- read.csv("C:\\Users\\chema\\Downloads\\FORM1 - Merma.csv")
La base de datos de producción cuenta con 15 variables y 2681 registros
describe(produccion)
## vars n mean sd median trimmed mad min max range
## fecha* 1 2681 14.08 7.97 14 14.11 10.38 1 27 26
## no 2 2681 51.18 30.26 50 50.50 37.06 1 121 120
## cliente* 3 2681 6.46 2.69 6 6.46 2.97 1 11 10
## id_form* 4 2681 114.49 72.85 120 112.39 94.89 1 255 254
## producto* 5 2681 165.33 94.93 162 166.39 118.61 1 320 319
## piezas_prog* 6 2681 16.86 15.23 14 15.08 19.27 1 67 66
## tiempo_minutos* 7 2681 52.63 54.43 37 44.88 53.37 1 171 170
## hora_fin* 8 2681 103.64 24.34 109 109.10 11.86 1 120 119
## estacion_arranque* 9 2681 108.20 119.34 67 93.75 97.85 1 342 341
## laminas_procesadas* 10 2681 107.50 161.05 3 75.81 2.97 1 507 506
## inicio_setup* 11 2681 102.98 159.26 2 70.14 1.48 1 509 508
## fin_inicio_su* 12 2681 182.64 208.71 100 155.27 146.78 1 613 612
## inicio_proceso* 13 2681 189.66 210.36 120 161.89 176.43 1 631 630
## fin_proceso* 14 2681 9.38 25.45 3 2.42 1.48 1 157 156
## tiempo_calidad 15 484 2.01 5.30 0 0.64 0.00 0 48 48
## skew kurtosis se
## fecha* -0.01 -1.23 0.15
## no 0.14 -1.04 0.58
## cliente* 0.17 -0.73 0.05
## id_form* 0.12 -1.10 1.41
## producto* -0.02 -1.21 1.83
## piezas_prog* 0.68 -0.36 0.29
## tiempo_minutos* 0.95 -0.29 1.05
## hora_fin* -3.00 9.03 0.47
## estacion_arranque* 0.69 -1.02 2.30
## laminas_procesadas* 1.28 0.16 3.11
## inicio_setup* 1.36 0.38 3.08
## fin_inicio_su* 0.76 -0.87 4.03
## inicio_proceso* 0.73 -0.85 4.06
## fin_proceso* 3.78 13.77 0.49
## tiempo_calidad 4.59 25.98 0.24
dim(produccion)
## [1] 2681 15
La base de datos de merma cuenta con 3 variables y 60 registros
describe(merma)
## vars n mean sd median trimmed mad min max range skew kurtosis
## Fecha* 1 60 17.50 14.19 15.5 16.69 18.53 1 43 42 0.30 -1.42
## Mes* 2 60 6.25 4.56 5.0 5.60 4.45 1 19 18 1.05 0.44
## Kilos* 3 60 28.72 15.92 29.0 28.77 19.27 1 56 55 -0.03 -1.21
## se
## Fecha* 1.83
## Mes* 0.59
## Kilos* 2.06
dim(merma)
## [1] 60 3
describe(scrap)
## vars n mean sd median trimmed mad min max range
## Referencia* 1 251 126.00 72.60 126 126.00 93.40 1 251 250
## fecha* 2 251 16.21 7.11 17 16.50 7.41 1 27 26
## hora* 3 251 126.00 72.60 126 126.00 93.40 1 251 250
## producto* 4 251 46.53 24.29 48 46.16 26.69 1 96 95
## cantidad 5 251 13.34 105.90 2 3.95 1.48 0 1674 1674
## unidad_medida* 6 251 2.00 0.06 2 2.00 0.00 1 2 1
## ubicacion_origen* 7 251 3.47 0.86 4 3.60 0.00 1 4 3
## ubicacion_desecho* 8 251 2.00 0.06 2 2.00 0.00 1 2 1
## estado* 9 251 2.00 0.06 2 2.00 0.00 1 2 1
## skew kurtosis se
## Referencia* 0.00 -1.21 4.58
## fecha* -0.29 -0.99 0.45
## hora* 0.00 -1.21 4.58
## producto* 0.02 -0.85 1.53
## cantidad 15.37 237.90 6.68
## unidad_medida* -15.65 244.02 0.00
## ubicacion_origen* -1.11 -0.62 0.05
## ubicacion_desecho* -15.65 244.02 0.00
## estado* -15.65 244.02 0.00
dim(scrap)
## [1] 251 9
summary(produccion)
## fecha no cliente id_form
## Length:2681 Min. : 1.00 Length:2681 Length:2681
## Class :character 1st Qu.: 25.00 Class :character Class :character
## Mode :character Median : 50.00 Mode :character Mode :character
## Mean : 51.18
## 3rd Qu.: 76.00
## Max. :121.00
##
## producto piezas_prog tiempo_minutos hora_fin
## Length:2681 Length:2681 Length:2681 Length:2681
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## estacion_arranque laminas_procesadas inicio_setup fin_inicio_su
## Length:2681 Length:2681 Length:2681 Length:2681
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## inicio_proceso fin_proceso tiempo_calidad
## Length:2681 Length:2681 Min. : 0.000
## Class :character Class :character 1st Qu.: 0.000
## Mode :character Mode :character Median : 0.000
## Mean : 2.008
## 3rd Qu.: 1.000
## Max. :48.000
## NA's :2197
Al revisar la base de datos logramos notar que existen varios na´s, algunas columnas que no son necesarias y variables que están registradas como character.
produccion1 <- subset(produccion,select = -c (no, id_form, producto, hora_fin, estacion_arranque, inicio_setup, fin_inicio_su, inicio_proceso, fin_proceso))
produccion2 <- produccion1[!is.na(produccion1$tiempo_minutos),]
produccion3 <- produccion2[!is.na(produccion2$laminas_procesadas),]
produccion3$fecha <- as.Date(produccion3$fecha, format = "%d/%m/%Y")
produccion3$piezas_prog <- substr(produccion3$ piezas_prog, start = 1, stop = 2)
produccion3$piezas_prog <- as.integer(produccion3$ piezas_prog)
## Warning: NAs introduced by coercion
produccion3$laminas_procesadas <- substr(produccion3$ laminas_procesadas, start = 1, stop = 2)
produccion3$laminas_procesadas <- as.integer(produccion3$ laminas_procesadas)
## Warning: NAs introduced by coercion
produccion3$tiempo_minutos <- as.integer(produccion3$tiempo_minutos)
## Warning: NAs introduced by coercion
produccion3$tiempo_calidad <- as.numeric(produccion3$tiempo_calidad)
summary(merma)
## Fecha Mes Kilos
## Length:60 Length:60 Length:60
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
merma1 <- merma[-c(5,12,19,25,31,36,42,54,59,60),]
merma1$Kilos <- as.numeric(merma1$Kilos)
merma1$Fecha <- as.Date(merma1$Fecha, format = "%d/%m/%Y")
En scrap contamos con una fila y algunas columnas que no necesitamos, es por esto que sera necesario eliminarla. También noté que todas las variables son de character
scrap <- scrap[(-1),]
scrap1 <- subset(scrap, select = -c (Referencia, producto, ubicacion_desecho, estado, unidad_medida))
scrap1$fecha <- as.Date(scrap1$fecha, format = "%d/%m/%Y")
Variable<-c("Fecha", "Cliente", "Piezas Programadas", "Tiempo Min", "Láminas Procesadas", "Tiempo Calidad")
Tipo<-c("Cualitativa", "Cualitativa", "Cuantitativa(Discreta)", "Cuantitativa (Continua)", "Cuantitativa(Discreta)","Cuantitativa(Continua)")
Escala_Medicion <-c("NA", "NA", "No. Piezas", "Horas", "No. Piezas", "Horas")
tabla<-data.frame(Variable, Tipo, Escala_Medicion)
knitr::kable(tabla)
| Variable | Tipo | Escala_Medicion |
|---|---|---|
| Fecha | Cualitativa | NA |
| Cliente | Cualitativa | NA |
| Piezas Programadas | Cuantitativa(Discreta) | No. Piezas |
| Tiempo Min | Cuantitativa (Continua) | Horas |
| Láminas Procesadas | Cuantitativa(Discreta) | No. Piezas |
| Tiempo Calidad | Cuantitativa(Continua) | Horas |
Variable1 <-c("Fecha","Mes", "Kilos")
Tipo1 <-c("Cuantitativa (Continua)","Cualitativa", "Cuantitativa (Continua)")
Escala_Medicion1 <-c("Fecha","NA", "Kilogramos")
tabla1 <-data.frame(Variable1, Tipo1, Escala_Medicion1)
knitr::kable(tabla1)
| Variable1 | Tipo1 | Escala_Medicion1 |
|---|---|---|
| Fecha | Cuantitativa (Continua) | Fecha |
| Mes | Cualitativa | NA |
| Kilos | Cuantitativa (Continua) | Kilogramos |
Variable2 <-c("Fecha", "ID_Producto", "Producto", "Cantidad", "Estado")
Tipo2 <-c("Cualitativa", "Cualitativa", "Cualitativa", "Cuantitativa (Discreta)", "Cualitativa")
Escala_Medicion2 <-c("NA", "NA", "NA", "Unidades", "NA")
tabla2 <-data.frame(Variable2, Tipo2, Escala_Medicion2)
knitr::kable(tabla2)
| Variable2 | Tipo2 | Escala_Medicion2 |
|---|---|---|
| Fecha | Cualitativa | NA |
| ID_Producto | Cualitativa | NA |
| Producto | Cualitativa | NA |
| Cantidad | Cuantitativa (Discreta) | Unidades |
| Estado | Cualitativa | NA |
Se utilizará summary y describe para realizar un análisis estadístico descriptivo
summary(produccion3)
## fecha cliente piezas_prog tiempo_minutos
## Min. :2022-08-01 Length:2681 Min. : 0.0 Min. : 0.00
## 1st Qu.:2022-08-08 Class :character 1st Qu.:15.0 1st Qu.: 15.00
## Median :2022-08-16 Mode :character Median :20.0 Median : 20.00
## Mean :2022-08-15 Mean :22.9 Mean : 22.86
## 3rd Qu.:2022-08-24 3rd Qu.:25.0 3rd Qu.: 25.00
## Max. :2022-08-31 Max. :99.0 Max. :120.00
## NA's :686 NA's :2518
## laminas_procesadas tiempo_calidad
## Min. : 0.000 Min. : 0.000
## 1st Qu.: 0.000 1st Qu.: 0.000
## Median : 0.000 Median : 0.000
## Mean : 6.345 Mean : 2.008
## 3rd Qu.:11.000 3rd Qu.: 1.000
## Max. :98.000 Max. :48.000
## NA's :1285 NA's :2197
summary(scrap1)
## fecha hora cantidad ubicacion_origen
## Min. :2022-08-01 Length:250 Min. : 0.000 Length:250
## 1st Qu.:2022-08-11 Class :character 1st Qu.: 1.000 Class :character
## Median :2022-08-19 Mode :character Median : 2.000 Mode :character
## Mean :2022-08-17 Mean : 6.696
## 3rd Qu.:2022-08-25 3rd Qu.: 7.000
## Max. :2022-08-31 Max. :96.000
summary(merma1)
## Fecha Mes Kilos
## Min. :2022-02-05 Length:50 Min. : 790
## 1st Qu.:2022-05-09 Class :character 1st Qu.:3178
## Median :2022-08-08 Mode :character Median :3925
## Mean :2022-07-31 Mean :3709
## 3rd Qu.:2022-11-01 3rd Qu.:4232
## Max. :2022-11-08 Max. :6140
## NA's :33
describe(produccion3)
## 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
## fecha 1 2681 NaN NA NA NaN NA Inf -Inf -Inf
## cliente* 2 2681 6.46 2.69 6 6.46 2.97 1 11 10
## piezas_prog 3 1995 22.90 14.00 20 20.62 7.41 0 99 99
## tiempo_minutos 4 163 22.87 14.73 20 20.78 7.41 0 120 120
## laminas_procesadas 5 1396 6.34 10.78 0 4.24 0.00 0 98 98
## tiempo_calidad 6 484 2.01 5.30 0 0.64 0.00 0 48 48
## skew kurtosis se
## fecha NA NA NA
## cliente* 0.17 -0.73 0.05
## piezas_prog 1.74 4.05 0.31
## tiempo_minutos 2.54 11.63 1.15
## laminas_procesadas 3.44 17.22 0.29
## tiempo_calidad 4.59 25.98 0.24
describe(scrap1)
## 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
## fecha 1 250 NaN NA NA NaN NA Inf -Inf -Inf
## hora* 2 250 125.50 72.31 125.5 125.50 92.66 1 250 249
## cantidad 3 250 6.70 11.85 2.0 3.88 1.48 0 96 96
## ubicacion_origen* 4 250 2.48 0.85 3.0 2.60 0.00 1 3 2
## skew kurtosis se
## fecha NA NA NA
## hora* 0.00 -1.21 4.57
## cantidad 4.12 21.14 0.75
## ubicacion_origen* -1.10 -0.70 0.05
describe(merma1)
## 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
## Fecha 1 17 NaN NA NA NaN NA Inf -Inf -Inf NA
## Mes* 2 50 4.60 2.60 4 4.53 2.97 1 9 8 0.21
## Kilos 3 50 3708.52 1023.99 3925 3798.65 541.15 790 6140 5350 -0.94
## kurtosis se
## Fecha NA NA
## Mes* -1.35 0.37
## Kilos 1.65 144.81
hist(produccion3$piezas_prog, main = "Piezas producidas", ylab = "Frecuencia", xlab = "Piezas Programadas", col = "red")
## Cualitativo
p <- c(148, 50, 32, 98, 73, 227, 156, 205)
e <- c("DENSO", "HELLA", "MERIDIAN LIGHT", "STILUS 1", "STABILUS 3", "TRMX", "VARROC", "YANFENG")
pct <- round(p/sum(p)*100)
etiquetas <- paste(e, pct)
etiquetas <- paste(e,"%",sep="")
pie(p,labels = etiquetas,
col=rainbow(length(etiquetas)),
main="Pie Chart")
## Gráficos de dispersión.
plot(produccion3$piezas_prog)
plot(scrap1$cantidad)
# Tabla de frecuencia
scrap1 %>%
group_by(ubicacion_origen) %>%
dplyr::summarize(frequency = n())
## # A tibble: 3 × 2
## ubicacion_origen frequency
## <chr> <int>
## 1 SAB/Calidad/Entrega de PT 58
## 2 SAB/Post-Production 13
## 3 SAB/Pre-Production 179
Propuesta 1: Form necesita establecer principalmente un formato para sus bases de datos, de esta manera dicha información podrá ser mas facil de interpretar por cualquier persona, en caso de buscar consultoria de sus procesos.
Propuesta 2: Es necesario tambien analizar el porqué detras de el alto nivel de merma en el mes de agosto, de esta manera se podrá realizar una estrategia para reducir la cantidad de desperdicio generada. Esto es aplicable para el resto de los meses.