MERMA

Importar base de datos

bd <-read.csv("/Users/mac/Downloads/FORM - Merma limpia.csv")

Instalar librerias

# install.packages("tidyverse")
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6      ✔ purrr   0.3.4 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.0      ✔ stringr 1.4.1 
## ✔ readr   2.1.2      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
# install.packages("janitor")
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test

Tipos de Variables

Variable<-c("`Fecha´","`Mes´","`Kilos`")
Type<-c("quanlitative (nominal)", "quantiative (discrete)", "quantitative (discrete)")
table<-data.frame(Variable,Type)
knitr::kable(table)
Variable Type
Fecha´ |quanlitative (nominal) | |Mes´ quantiative (discrete)
Kilos quantitative (discrete)
Escala_de_Medición <- c("Mermas","Fecha")

Eliminar duplicados

bd[duplicated(bd), ]
## [1] Fecha MES   Kilos
## <0 rows> (or 0-length row.names)
sum(duplicated(bd))
## [1] 0

Eliminar negativos con cero

bd1<-bd
bd1[bd1 <0] <-0
summary(bd1)
##     Fecha               MES                Kilos     
##  Length:50          Length:50          Min.   : 790  
##  Class :character   Class :character   1st Qu.:3178  
##  Mode  :character   Mode  :character   Median :3925  
##                                        Mean   :3709  
##                                        3rd Qu.:4232  
##                                        Max.   :6140

Analisis Profundo de la Base de datos

media_bd <- mean(bd$Kilos)
media_bd
## [1] 3708.52
median_bd <- median(bd$Kilos)
median_bd
## [1] 3925
mode_bd <- mode(bd$Kilos)
mode_bd
## [1] "numeric"
hist(bd$Kilos)

Grafica Frecuencia (Fecha)

bd$Fecha<- as.Date(bd$Fecha,format = "%d/%m/%Y")
plot(bd$Fecha, bd$Kilos)

Contar Variables

#Contar Variables
count(bd,Kilos, sort = TRUE)
##    Kilos n
## 1   3140 2
## 2   3810 2
## 3   4190 2
## 4   4200 2
## 5    790 1
## 6    810 1
## 7   1040 1
## 8   2130 1
## 9   2480 1
## 10  2680 1
## 11  2830 1
## 12  2950 1
## 13  2980 1
## 14  2990 1
## 15  3050 1
## 16  3290 1
## 17  3410 1
## 18  3590 1
## 19  3650 1
## 20  3680 1
## 21  3690 1
## 22  3739 1
## 23  3780 1
## 24  3870 1
## 25  3920 1
## 26  3930 1
## 27  3940 1
## 28  3960 1
## 29  3967 1
## 30  4000 1
## 31  4050 1
## 32  4130 1
## 33  4210 1
## 34  4240 1
## 35  4260 1
## 36  4270 1
## 37  4310 1
## 38  4330 1
## 39  4380 1
## 40  4510 1
## 41  4680 1
## 42  4770 1
## 43  5010 1
## 44  5080 1
## 45  5230 1
## 46  6140 1
count(bd,Fecha, sort = TRUE)
##         Fecha n
## 1  0022-02-18 5
## 2  0022-01-11 2
## 3  0022-01-22 2
## 4  0022-08-29 2
## 5  0022-08-31 2
## 6  0022-02-24 1
## 7  0022-03-03 1
## 8  0022-03-08 1
## 9  0022-03-11 1
## 10 0022-03-16 1
## 11 0022-03-23 1
## 12 0022-03-30 1
## 13 0022-04-04 1
## 14 0022-04-11 1
## 15 0022-04-14 1
## 16 0022-04-21 1
## 17 0022-04-27 1
## 18 0022-05-02 1
## 19 0022-05-09 1
## 20 0022-05-14 1
## 21 0022-05-24 1
## 22 0022-05-25 1
## 23 0022-06-07 1
## 24 0022-06-15 1
## 25 0022-06-20 1
## 26 0022-06-27 1
## 27 0022-07-04 1
## 28 0022-07-11 1
## 29 0022-07-16 1
## 30 0022-07-21 1
## 31 0022-07-27 1
## 32 0022-08-08 1
## 33 0022-08-10 1
## 34 0022-08-11 1
## 35 0022-08-13 1
## 36 0022-08-15 1
## 37 0022-08-22 1
## 38 0022-08-30 1
## 39 0022-09-05 1
## 40 0022-09-07 1
## 41 0022-09-15 1
## 42 0022-09-21 1
count(bd,MES, sort = TRUE)
##          MES  n
## 1     Agosto 11
## 2    Febrero  6
## 3      Marzo  6
## 4      Abril  5
## 5      Julio  5
## 6       Mayo  5
## 7      Enero  4
## 8      Junio  4
## 9 Septiembre  4

Eliminar columnas

bd2 <-bd
bd2 <- subset (bd2, select = -c (Fecha))

#R elación Merma vs Mes

library(ggplot2)
ggplot(bd2, aes(x=media_bd, y=MES)) +
  geom_bar(stat="identity", fill="orange") + scale_fill_grey() + # Add bars to the plot
  labs(title = "Relación Mes vs Merma (Datos Completos)", # Add a title
       subtitle = "Merma empresa FORM", # Add a subtitle
       caption = "Relación", # Add a caption
       x = "Mes con mayor cantidad de merma (Kg)")

Eliminar valores con un gramaje menor a 4499(gr)

bd3 <- bd2
bd3 <- bd3[bd3$Kilos> 4499, ]

Relacion de Mes vs Mayor Merma (Kg)

ggplot(bd3, aes(x=media_bd, y=MES)) +
  geom_bar(stat="identity", fill="orange") + scale_fill_grey() + # Add bars to the plot
  labs(title = "Relación Mes vs Merma (Mayor Kg)", # Add a title
       subtitle = "Merma empresa FORM", # Add a subtitle
       caption = "Relación", # Add a caption
       x = "Mes con mayor cantidad de merma en (Kg)")

PROPUESTA #1

Identificar las siguientes observaciones.

¿Que se hace en Agosto que existe una mayor cantidad de merma?

Identificar por que en Mayo se genera un mayor tonelaje de Merma.

¿Que producto te genera mas merma? (kg)

Si bien lo que observo es que no existe un mismo patron de tonelaje durante el año sin embargo, pude ver que en Agosto se realizaron una mayor cantidad de registros de tonelaje a comparacion de los demas meses, por lo que concluyo dos cosas:

1. Existe una actividad en agosto donde los obliga a generar y registrar mas merma.

2. Se acumule demasiada merma de los meses anteriores y que se vean obligados el personal a trabajar mas en ese mes para que puedan tener una cantidad menor de registros para los siguientes meses y espacio suficiente para seguir acumulando.

Por otro lado, el ejemplo que observo es que en Junio solo tuvieron 3 registros de Merma y en Julio/Agosto aumentaron sus registros por mas del 80%..

Por lo que mi propuesta es implementar KPI’s con las personas encargadas de este departamento que realicen una gestion continuaXmes sobre el registro de kilogramos de merma para que haya un orden y se puedan descubrir nuevas areas de oportunidad con los resultados obtenidos.

SCRAP

Base de datos Scrap

#file.choose()
bd <- read.csv("/Users/mac/Downloads/FORM - Scrap Limpia  (1).csv")

Llamar librerias

library(tidyverse)
library(janitor)

Analizar Base de Datos

bd$Fecha<- as.Date(bd$Fecha,format = "%d/%m/%Y")
plot(bd$Fecha, bd$Cantidad)

summary(bd)
##   Referencia            Fecha                Hora             Producto        
##  Length:250         Min.   :2022-08-01   Length:250         Length:250        
##  Class :character   1st Qu.:2022-08-11   Class :character   Class :character  
##  Mode  :character   Median :2022-08-19   Mode  :character   Mode  :character  
##                     Mean   :2022-08-17                                        
##                     3rd Qu.:2022-08-25                                        
##                     Max.   :2022-08-31                                        
##     Cantidad      Unidad.de.medida   Ubicación.de.origen Ubicación.de.desecho
##  Min.   : 0.000   Length:250         Length:250          Length:250          
##  1st Qu.: 1.000   Class :character   Class :character    Class :character    
##  Median : 2.000   Mode  :character   Mode  :character    Mode  :character    
##  Mean   : 6.696                                                              
##  3rd Qu.: 7.000                                                              
##  Max.   :96.000                                                              
##     Estado         
##  Length:250        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Analisis Profundo de la Base de Datos

library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
describe(bd)
## 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
## Referencia*              1 250 125.50 72.31  125.5  125.50 92.66   1  250   249
## Fecha                    2 250    NaN    NA     NA     NaN    NA Inf -Inf  -Inf
## Hora*                    3 250 125.50 72.31  125.5  125.50 92.66   1  250   249
## Producto*                4 250  44.38 24.72   45.0   44.12 25.95   1   95    94
## Cantidad                 5 250   6.70 11.85    2.0    3.88  1.48   0   96    96
## Unidad.de.medida*        6 250   1.00  0.00    1.0    1.00  0.00   1    1     0
## Ubicación.de.origen*     7 250   2.48  0.85    3.0    2.60  0.00   1    3     2
## Ubicación.de.desecho*    8 250   1.00  0.00    1.0    1.00  0.00   1    1     0
## Estado*                  9 250   1.00  0.00    1.0    1.00  0.00   1    1     0
##                        skew kurtosis   se
## Referencia*            0.00    -1.21 4.57
## Fecha                    NA       NA   NA
## Hora*                  0.00    -1.21 4.57
## Producto*              0.01    -0.79 1.56
## Cantidad               4.12    21.14 0.75
## Unidad.de.medida*       NaN      NaN 0.00
## Ubicación.de.origen*  -1.10    -0.70 0.05
## Ubicación.de.desecho*   NaN      NaN 0.00
## Estado*                 NaN      NaN 0.00
str(bd)
## 'data.frame':    250 obs. of  9 variables:
##  $ Referencia          : chr  "SP/08731" "SP/08730" "SP/08729" "SP/08728" ...
##  $ Fecha               : Date, format: "2022-08-31" "2022-08-31" ...
##  $ Hora                : chr  "14:55:40" "14:49:25" "13:49:29" "09:30:07" ...
##  $ Producto            : chr  "[BACKFRAME 60% CUELLO ARMADO] 18805. 60% Backframe. Cuello Armado." "[N61506747 CAJA] N61506747. Kit. Caja." "[N61506729 SEPARADOR] N61506729. Kit. Separador." "[341332 DIVISOR - U611 & U625] 341332. U611. U625. Divisor Troquelado." ...
##  $ Cantidad            : num  2 1 1 31 1 1 1 9 2 1 ...
##  $ Unidad.de.medida    : chr  "Unidad(es)" "Unidad(es)" "Unidad(es)" "Unidad(es)" ...
##  $ Ubicación.de.origen : chr  "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Calidad/Entrega de PT" "SAB/Pre-Production" ...
##  $ Ubicación.de.desecho: chr  "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" ...
##  $ Estado              : chr  "Hecho" "Hecho" "Hecho" "Hecho" ...
tabyl(bd, Producto, Ubicación.de.origen)
##                                                                                               Producto
##                                            [2065WY AS 30 99 0000 00 000 TAPA - BOX 2064WY] BOX  2064WY
##                                                                 [241B EXPORT CAJA] 241B. Export. Caja.
##                                     [341332 CELDA - U611 & U625] 341332. U611. U625. Celda Troquelada.
##                                 [341332 CHAROLA - U611 & U625] 341332. U611. U625. Charola Troquelada.
##                                 [341332 DIVISOR - U611 & U625] 341332. U611. U625. Divisor Troquelado.
##                                                                            [357790-TAPA] 357790. Tapa.
##                                                                              [358268-CAJA] 358268-CAJA
##                                                                              [358268-TAPA] 358268-TAPA
##                    [428579 AS 30 99 0000 00 000 INSERTO- FORD DAMPER] 14306. Damper Ford DTP. Inserto.
##              [428818 AS 30 99 0000 00 000 INSERTO - CHRYSLER INSERT DJ] CHRYSLER INSERT DJ PART 694087
##                   [429296 AS 30 99 0000 00 000 INSERTO - INSERT TMC 150 TESLA] 14783. TMC150. Inserto.
##           [446265 AS  30 99 0000 00 000 CAPA INTERMEDIA- PAD 43X36 DAIMLER] 14454. Daimler Pad 43 X 36
##                        [467.416-24 COMPARTIMENT INSERT 535X335X221MM CC ESD] Refacciones. P1. Celdado.
##                                         [496455 FS 30 99 0000 00 000 CARTÓN - BOX 0371813] BOX 0371813
##  [500033 AS 30 99 0000 00 000 INSERTO - Inserto FORD China 500033] 17397. 500033. FORD China. Inserto.
##                                 [642762 PACKING, SHEET, 565.2X742.9 - INSERT 642762] 642762. Pad. S.M.
##        [643920 CART, SOM, 746.8X569.0X292.1, RSC - BOX 643920 STABOMAT] 13891. 643920. Stabomat. Caja.
##                                                                                 [647713] 647713. Caja.
##                                   [938830 FS 30 99 0000 00 000 CARTÓN - SIZE 24"] 24". Caja Terminada.
##                              [939069 FS 30 99 0000 00 000 CARTÓN -BOX 939069 34"] 34". Caja Terminada.
##                                                 [A - CELDA SUDAFRICA BMW G01 LCI] Sudafrica. A. Pieza.
##                                                 [B - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. B. Pieza.
##                                     [BACKFRAME 60% CUELLO ARMADO] 18805. 60% Backframe. Cuello Armado.
##                                             [BACKFRAME 60% TAPA BASE] 18271. 60% Backframe. Tapa Base.
##                                                [BOX 143907 - CELDA] 143907. Solares. Celda Troquelada.
##                                                  [BOX 143907 - TAPA] 143907. Solares. Tapa Troquelada.
##                                                 [C - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. C. Pieza.
##    [CAJA ( ARMREST / HR REAR) TMC 110 MODEL Y] 19148. Modelo Y. TMC0110. Armrest & Rear & Center. Caja
##                                                                            [CAJA 695] N61506695. Caja.
##                                                                              [CAJA 726] N61506726 CAJA
##                                                                              [CAJA 734949] CAJA 734949
##                                                                             [CAJA 784] 784. Kit. Caja.
##                                                                  [CAJA 95161] 19079. 95161. Kit. Caja.
##                               [Caja backup canastilla gris] CAJA DE CARTÓN BACK UP CANASTILLA GRIS- P3
##                                                 [CAJA INDUSTRIAL 16" ROTATIVA] 16". Lamina Troquelada.
##                                        [CAJA INDUSTRIAL 24" ROTATIVA COMPLETA] 24". Lamina Troquelada.
##                                                 [CAJA INDUSTRIAL 34" ROTATIVA] 34". Lamina Troquelada.
##                                           [CAJA INDUSTRIAL 48" CON SELLO (PP)] 48". Lamina Troquelada.
##                                                               [CAJA MCV] Toyota. MCV. Caja Troquelada.
##                                                            [CAJA RSC DE KIT REFLEX] 857. Reflex. Caja.
##                                                              [CAJA RSC SHOCK TOWER] Shock Tower. Caja.
##                                                                        [CAJA RSC TGTX] TGTX. Caja RSC.
##                                                               [CELDA 955061] 955061. Celda Troquelada.
##                                                     [Celda Audi coupe] 18892. Coupe. Celda Troquelada.
##                                                      [CELDA AUDI Q5] 14096. Audi Q5. Celda Troquelada.
##                       [CELDA CON MICRO CORUUGAD O EN 32 PORTA ETIQUETA] TR13777 KIT TGTX. Caja + Celda
##                                                          [CELDA GM177] 14100. GM177. Celda Troquelada.
##                                             [CELDA VW CHATTANOOGA] Chattanooga. St3. Celda Troquelada.
##                                                          [CELL C] 60% Backframe. Separador con Doblez.
##                                                           [CHAROLA 955061] 955061. Charola Troquelada.
##                                                 [Charola audi coupe] 18890. Coupe. Charola Troquelada.
##                                                  [CHAROLA AUDI Q5] 14128. Audi Q5. Charola Troquelada.
##                                                      [CHAROLA GM177] 14131. GM177. Charola Troquelada.
##                                   [CHAROLA VW CHATTANOOGA] Chattanooga. St1 y St3. Charola Troquelada.
##                                                            [Console cell] Console Lower. Celda Armada.
##                                                 [D - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. D. Pieza.
##                                                  [DIVISOR AUDI Q5] 14234. Audi Q5. Divisor Troquelado.
##                        [DIVISOR CON DOBLEZ VW CHATTANOOGA] Chattanooga. St1 y St3. Divisor Troquelado.
##                                                                 [DIVISOR GM177] 14238. GM177. Divisor.
##                                                                 [DIVISOR REFLEX] 857. Reflex. Divisor.
##                            [DIVISOR ZIGZAG VW CHATTANOOGA] Chattanooga. St1 y St3. Zig Zag Troquelado.
##                                                 [E - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. E. Pieza.
##                                                 [F - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. F. Pieza.
##                                         [HSC P702 ICP] 17215. P558. P702. CD539. ICP. Caja HSC. Pieza.
##                                                    [INSERTO 241B EXPORT] 14308. 241B. Export. Inserto.
##                                             [Inserto Nextracker 3.0] Nextracker. 2.0. Damper. Inserto.
##                                                 [INSERTO SOLARES] 143907. Solares. Inserto Troquelada.
##                                               [MITAD DE CUELLO SHOCK TOWER] Shock Tower. Mitad Cuello.
##                                                              [MQ4A-Dunnage-part2] Kia. Inserto. Pieza.
##                                                               [MQ4A-Dunnage-tray] Kia. Charola. Pieza.
##                                                                      [N61506396 CAJA] N61506396. Caja.
##                                                            [N61506396 SEPARADOR] N61506396. Separador.
##                                                       [N61506729 SEPARADOR] N61506729. Kit. Separador.
##                                                                 [N61506747 CAJA] N61506747. Kit. Caja.
##                                                                 [N61506747 TAPA] N61506747. Kit. Tapa.
##                                 [NEXTRACKER 2.0 DAMPER CUELLO] 18976. Nextracker. 2.0. Damper. Cuello,
##                  [NEXTRACKER 2.0 DAMPER TAPA DE COROPLAST] Nextracker. 2.0. Damper. Tapa de Coroplast.
##                                                 [PTN.WS IP 60 CELL IBT] Y0199489 PTN.WS IP 60 CELL IBT
##      [REJILLA DE 16X PARA PIVOT DE TESLA PARA PROCESO DE MTM A PPG] CELDA PIVOTE CONTENEDOR RETORNABLE
##                                                               [SEAT BACK CAJA] Seat Back. Caja HSC 1/2
##                                                           [SEAT BACK CELDADO] Seat Back. Celda Armada.
##      [SEPARADOR 41" X 44" PARA PIVOTE Y SEAT BACK DE MTM A PPG] SEPARADOR PIVOTE CONTENEDOR RETORNABLE
##                                                [SEPARADOR MOTORGEAR] Motorgear. Separador para Celdas.
##                                                                            [TAPA 695] N61506695. Tapa.
##                                                                  [TAPA AVANAZAR] Avanzar. Tapa. Pieza.
##                                                                 [TESLA XDA90 CELDA A] XDA90. A. Pieza.
##                                                                 [TESLA XDA90 CELDA B] XDA90. B. Pieza.
##                                                   [TESLA XDA90 CHAROLA SUAJADA] XDA90. Charola. Pieza.
##                                                                [TMC 050 - RSC] Console lower - TMC 050
##                                                        [TMC 095] 19162. Modelo Y. TMC095. Front. Caja.
##                                                                           [TMC XXX] Armrest. Caja RSC.
##          [TR11910 CHAROLA C/2 DIV #20 SMOOTH C/32 CAVIDADES] TR11910. U725. DMS. ITB. Charola con ITB.
##                   [TR12438 TAPA ICP 539 TAPA 2415-2 EN CPARTÓN SENCILLO CORRUGADO] 18840. CD539. Tapa.
##                                                                 [TR12440 TAPA P558] 18842. P558. Tapa.
##                       [TR13776 CAJA RSC CK 44 ECT C/ PORTA ETIQUETA] TR13776. Caja con Porta Etiqueta.
##  SAB/Calidad/Entrega de PT SAB/Post-Production SAB/Pre-Production
##                          1                   0                  1
##                          1                   0                  0
##                          0                   0                 10
##                          0                   0                  5
##                          0                   0                  5
##                          2                   0                  1
##                          2                   0                  0
##                          2                   0                  0
##                          1                   0                  0
##                          1                   0                  2
##                          1                   0                  0
##                          2                   0                  0
##                          1                   0                  0
##                          0                   1                  0
##                          1                   0                  0
##                          3                   0                  0
##                          1                   0                  1
##                          1                   0                  2
##                          1                   0                  0
##                          1                   0                  0
##                          0                   0                  3
##                          0                   0                  3
##                          1                   0                  0
##                          1                   0                  0
##                          0                   0                  3
##                          0                   0                  1
##                          0                   0                  3
##                          0                   0                  1
##                          0                   1                  0
##                          0                   1                  0
##                          0                   0                  1
##                          0                   2                  0
##                          0                   0                  1
##                          0                   1                  0
##                          0                   0                 12
##                          0                   0                  3
##                          0                   0                 11
##                          0                   0                  7
##                          0                   0                  2
##                          0                   1                  0
##                          2                   0                  0
##                          0                   0                  1
##                          0                   0                  6
##                          0                   0                  3
##                          0                   0                 10
##                          1                   0                  0
##                          0                   0                  9
##                          0                   0                  1
##                          1                   0                  0
##                          0                   0                  5
##                          0                   0                  2
##                          0                   0                  5
##                          0                   0                  5
##                          0                   0                  5
##                          2                   0                  0
##                          0                   0                  3
##                          0                   0                  4
##                          0                   0                  4
##                          0                   0                  5
##                          0                   1                  0
##                          0                   0                  4
##                          0                   0                  2
##                          0                   0                  3
##                          0                   0                  4
##                          2                   0                  0
##                          3                   0                  1
##                          0                   0                  1
##                          0                   0                  1
##                          0                   0                  3
##                          0                   0                  3
##                          1                   1                  0
##                          0                   1                  0
##                          1                   0                  0
##                          3                   0                  0
##                          2                   0                  0
##                          2                   0                  0
##                          2                   0                  0
##                          1                   0                  0
##                          1                   0                  0
##                          2                   0                  0
##                          1                   0                  0
##                          1                   0                  0
##                          1                   0                  0
##                          0                   1                  0
##                          0                   0                  2
##                          0                   0                  3
##                          0                   0                  1
##                          0                   0                  2
##                          0                   0                  1
##                          1                   0                  1
##                          0                   0                  1
##                          3                   0                  0
##                          0                   1                  0
##                          1                   0                  0
##                          0                   1                  0
variable<-c("Referencia","Fecha", "Hora", "Producto", "Cantidad", "Unidad.de.medida", "Ubicación.de.origen", "Ubicación.de.desecho")

type<-c("Cualitativo (nominal)","Cuantitativo (disccreta)", "Cuantitativo (discreta)", "Cualitativo (nominal)","Cuantitativo (Continua)", "Cualitativo (nominal)", "Cualitativo (nominal)","Cualitativo (nominal)")

table<-data.frame(variable,type)
knitr::kable(table)
variable type
Referencia Cualitativo (nominal)
Fecha Cuantitativo (disccreta)
Hora Cuantitativo (discreta)
Producto Cualitativo (nominal)
Cantidad Cuantitativo (Continua)
Unidad.de.medida Cualitativo (nominal)
Ubicación.de.origen Cualitativo (nominal)
Ubicación.de.desecho Cualitativo (nominal)
Variable<-c("Referencia", "Fecha", "Producto","Cantidad", "Unidad.de.medida","Ubicación.de.origen","Ubicación.de.desecho","Estado")
Type<-c("Cualitativa", "Cuantitativa (discreta)", "Cualitativa", "Cuantitativa (discreta)", "Cuantitativa (discreta)", "Cualitativa", "Cualitativa", "Cualitativa")
Escala_de_Medición<-c("Numero", "Fecha", "Categoría", "Kg", "Medición", "Posición", "Posición", "Estado")

Limpieza Base de Datos

bd1 <- bd
bd1<- subset(bd1, select = -c (Referencia, Producto, Unidad.de.medida, Hora, Ubicación.de.desecho, Estado))


bd2 <- bd
bd2<- subset(bd2, select = -c (Referencia, Producto, Unidad.de.medida, Hora, Ubicación.de.desecho, Estado))

Analisis Estadistico

media <- mean(bd2$Cantidad)

mediana <- median(bd2$Cantidad)

mode <- function (x) {
  ux <- unique(x)
  ux [which.max(tabulate(match(x,ux)))]
}

mode <- mode(bd2$Cantidad)
mode
## [1] 1
hist(bd2$Cantidad)

Grafica de Relacion de SAB

count(bd1, Fecha, sort = TRUE)
##         Fecha  n
## 1  2022-08-16 24
## 2  2022-08-24 21
## 3  2022-08-19 17
## 4  2022-08-30 17
## 5  2022-08-03 13
## 6  2022-08-10 13
## 7  2022-08-12 12
## 8  2022-08-26 12
## 9  2022-08-27 12
## 10 2022-08-22 11
## 11 2022-08-25 11
## 12 2022-08-31 10
## 13 2022-08-17  9
## 14 2022-08-20  9
## 15 2022-08-29  8
## 16 2022-08-05  7
## 17 2022-08-06  7
## 18 2022-08-04  6
## 19 2022-08-15  6
## 20 2022-08-02  5
## 21 2022-08-09  5
## 22 2022-08-13  5
## 23 2022-08-08  4
## 24 2022-08-11  3
## 25 2022-08-01  2
## 26 2022-08-23  1
count(bd2, Ubicación.de.origen, sort = TRUE)
##         Ubicación.de.origen   n
## 1        SAB/Pre-Production 179
## 2 SAB/Calidad/Entrega de PT  58
## 3       SAB/Post-Production  13
ggplot(bd2, aes(x=media, y= Ubicación.de.origen)) +
  geom_bar(stat="identity", fill="blue") + scale_fill_grey() + # Add bars to the plot
  labs(title = "Relación SAB", # Add a title
       subtitle = "Scrap empresa FORM", # Add a subtitle
       caption = "Relación", # Add a caption
       x = "x")

PROPUESTA #2

Observaciones Personales

Pude Identificar que en Agosto existe una cantidad menor de scrap en donde FORM puede aprovechar para aplicar metodos de reciclaje y una mayor productividad dentro de este departameto.

En cuanto a mi propuesta es identificar una tecnologi que sea capaz de brindar una mayor cantidad de reciclado durante este mes para asi poder obtener mayor desperdicio el cual se pueda utilizar.

Al igual identificar a traves de un analisis de las variables, las variables que nos ofrezcan mayor reciclado para poder identificar mayores oportunidades de obtener desperdecio.

PRODUCCION

Importar base de datos

#file.choose()
FORM <- read.csv("/Users/mac/Downloads/form_prod.csv")

Entender Base de Datos

resumen <- summary(FORM)
resumen
##       No.          CLIENTE            ID.FORM            PRODUCTO        
##  Min.   :  1.0   Length:2568        Length:2568        Length:2568       
##  1st Qu.: 25.0   Class :character   Class :character   Class :character  
##  Median : 50.0   Mode  :character   Mode  :character   Mode  :character  
##  Mean   : 50.8                                                           
##  3rd Qu.: 75.0                                                           
##  Max.   :121.0                                                           
##  NA's   :8                                                               
##     FECHA           PIEZAS.PROG.        TMO..MIN.           HR..FIN         
##  Length:2568        Length:2568        Length:2568        Length:2568       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  ESTACION.ARRANQUE  Laminas.procesadas INICIO.SEP.UP      fin.de.set.up     
##  Length:2568        Min.   :   0.0     Length:2568        Length:2568       
##  Class :character   1st Qu.:   0.5     Class :character   Class :character  
##  Mode  :character   Median :  60.0     Mode  :character   Mode  :character  
##                     Mean   : 108.9                                          
##                     3rd Qu.: 200.0                                          
##                     Max.   :1125.0                                          
##                     NA's   :593                                             
##  INICIO.de.PROCESO  FIN.de.PROCESO     TIEMPO.CALIDAD     TIEMPO.MATERIALES
##  Length:2568        Length:2568        Length:2568        Min.   : 0.000   
##  Class :character   Class :character   Class :character   1st Qu.: 0.000   
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000   
##                                                           Mean   : 2.535   
##                                                           3rd Qu.: 1.000   
##                                                           Max.   :48.000   
##                                                           NA's   :2243     
##  MERMAS.Maquinas.
##  Min.   : 0.000  
##  1st Qu.: 0.000  
##  Median : 1.000  
##  Mean   : 1.626  
##  3rd Qu.: 1.000  
##  Max.   :50.000  
##  NA's   :2461

Llamar librerias

library(tidyverse)
library(janitor)
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
## The following object is masked from 'package:purrr':
## 
##     compact

Analisis Profundo de la Base de Datos

str(FORM)
## 'data.frame':    2568 obs. of  17 variables:
##  $ No.               : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ CLIENTE           : chr  "VARROC" "VARROC" "VARROC" "DENSO" ...
##  $ ID.FORM           : chr  "VL-017-13938" "VL-017-13936" "VL-017-14729" "" ...
##  $ PRODUCTO          : chr  "763 . KIT. CAJA." "747 KIT. CAJA HSC. ( 2 Partes)" "747 KIT. TAPA." "TOYOTA. MCV. Insterto D 2R. CORTE. 1 Golpe = 12 piezas. ( 9 Pza. / Celda)." ...
##  $ FECHA             : chr  "01/08/22" "01/08/22" "01/08/22" "01/08/22" ...
##  $ PIEZAS.PROG.      : chr  "199" "57" "68" "192" ...
##  $ TMO..MIN.         : chr  "15" "10" "10" "15" ...
##  $ HR..FIN           : chr  "09:15:00" "09:25:00" "09:35:00" "09:50:00" ...
##  $ ESTACION.ARRANQUE : chr  "C1" "C1Y2" "C1Y2" "C1" ...
##  $ Laminas.procesadas: int  201 116 69 49 49 801 41 53 53 55 ...
##  $ INICIO.SEP.UP     : chr  "09:00:00" "09:26:00" "10:02:00" "10:12:00" ...
##  $ fin.de.set.up     : chr  "09:12:00" "09:31:00" "10:09:00" "10:17:00" ...
##  $ INICIO.de.PROCESO : chr  "09:13:00" "09:32:00" "10:09:00" "10:18:00" ...
##  $ FIN.de.PROCESO    : chr  "09:26:00" "09:53:00" "00:00:00" "10:20:00" ...
##  $ TIEMPO.CALIDAD    : chr  "1" "1" "1" "1" ...
##  $ TIEMPO.MATERIALES : int  NA NA NA NA NA 3 NA NA NA NA ...
##  $ MERMAS.Maquinas.  : int  NA NA NA NA NA NA NA NA NA NA ...
Variable<-c("No.","CLIENTE","ID.FORM ", "P..DUCTO","PIEZAS.P..G.","TMO..MIN.","HR..FIN","ESTACION.AR..NQUE","Laminas.Procesadas"," INICIO.SEP.UP","FIN.INICIO.DE.SEP.UP","INICIO.de.P....SO", "FIN.de.P....SO","TIEMPO..CALIDAD","TIEMPO.MATERIALES","MERMAS.Maquinas.","Date")
Type<-c("Cuantitativa (Discreta)", "Cualitativa", "Cuantitativa (Discreta)", "Cualitativa", "Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cualitativa","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)")
table<-data.frame(Variable,Type)
knitr::kable(table)
Variable Type
No. Cuantitativa (Discreta)
CLIENTE Cualitativa
ID.FORM Cuantitativa (Discreta)
P..DUCTO Cualitativa
PIEZAS.P..G. Cuantitativa (Discreta)
TMO..MIN. Cuantitativa (Discreta)
HR..FIN Cuantitativa (Discreta)
ESTACION.AR..NQUE Cualitativa
Laminas.Procesadas Cuantitativa (Discreta)
INICIO.SEP.UP Cuantitativa (Discreta)
FIN.INICIO.DE.SEP.UP Cuantitativa (Discreta)
INICIO.de.P….SO Cuantitativa (Discreta)
FIN.de.P….SO Cuantitativa (Discreta)
TIEMPO..CALIDAD Cuantitativa (Discreta)
TIEMPO.MATERIALES Cuantitativa (Discreta)
MERMAS.Maquinas. Cuantitativa (Discreta)
Date Cuantitativa (Discreta)

Escala de medicion

Variable<-c("No.","CLIENTE","ID.FORM ", "P..DUCTO","PIEZAS.P..G.","TMO..MIN.","HR..FIN","ESTACION.AR..NQUE","Laminas.Procesadas"," INICIO.SEP.UP","FIN.INICIO.DE.SEP.UP","INICIO.de.P....SO", "FIN.de.P....SO","TIEMPO..CALIDAD","TIEMPO.MATERIALES","MERMAS.Maquinas.","Date")
Type<-c("Cuantitativa (Discreta)", "Cualitativa", "Cuantitativa (Discreta)", "Cualitativa", "Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cualitativa","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)","Cuantitativa (Discreta)")
Escala_de_Medición <- c("Numero", "Empresa", "ID","Categoria", "Piezas", "Minutos","Tiempo","Maquina","Sobrante","Hora","Hora","Hora","Hora","Tiempo","Tiempo","Mermas","Fecha")
table<-data.frame(Variable,Type,Escala_de_Medición)
knitr::kable(table)
Variable Type Escala_de_Medición
No. Cuantitativa (Discreta) Numero
CLIENTE Cualitativa Empresa
ID.FORM Cuantitativa (Discreta) ID
P..DUCTO Cualitativa Categoria
PIEZAS.P..G. Cuantitativa (Discreta) Piezas
TMO..MIN. Cuantitativa (Discreta) Minutos
HR..FIN Cuantitativa (Discreta) Tiempo
ESTACION.AR..NQUE Cualitativa Maquina
Laminas.Procesadas Cuantitativa (Discreta) Sobrante
INICIO.SEP.UP Cuantitativa (Discreta) Hora
FIN.INICIO.DE.SEP.UP Cuantitativa (Discreta) Hora
INICIO.de.P….SO Cuantitativa (Discreta) Hora
FIN.de.P….SO Cuantitativa (Discreta) Hora
TIEMPO..CALIDAD Cuantitativa (Discreta) Tiempo
TIEMPO.MATERIALES Cuantitativa (Discreta) Tiempo
MERMAS.Maquinas. Cuantitativa (Discreta) Mermas
Date Cuantitativa (Discreta) Fecha

Limpieza Base de Datos (3)

bd[duplicated(bd), ]
## [1] Referencia           Fecha                Hora                
## [4] Producto             Cantidad             Unidad.de.medida    
## [7] Ubicación.de.origen  Ubicación.de.desecho Estado              
## <0 rows> (or 0-length row.names)
sum(duplicated(bd))
## [1] 0
bd1<-bd
bd1[bd1 <0] <-0
summary(bd1)
##   Referencia            Fecha                Hora             Producto        
##  Length:250         Min.   :2022-08-01   Length:250         Length:250        
##  Class :character   1st Qu.:2022-08-11   Class :character   Class :character  
##  Mode  :character   Median :2022-08-19   Mode  :character   Mode  :character  
##                     Mean   :2022-08-17                                        
##                     3rd Qu.:2022-08-25                                        
##                     Max.   :2022-08-31                                        
##     Cantidad      Unidad.de.medida   Ubicación.de.origen Ubicación.de.desecho
##  Min.   : 0.000   Length:250         Length:250          Length:250          
##  1st Qu.: 1.000   Class :character   Class :character    Class :character    
##  Median : 2.000   Mode  :character   Mode  :character    Mode  :character    
##  Mean   : 6.696                                                              
##  3rd Qu.: 7.000                                                              
##  Max.   :96.000                                                              
##     Estado         
##  Length:250        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Analisis Grafico

barplot(table(FORM$CLIENTE))

boxplots=subset(FORM,select=-c(CLIENTE))
boxplot(table (FORM$CLIENTE), main = "Pedidos de Clientes", xlab = "Clientes", ylab = "Cantidad")

PROPUESTA #3

Observaciones Personales

Se logro identificar que Stabilus y TRMX son los clientes que mas tienen actividad con FORM, por otro lado se puede observar que los clientes tienen un rango de pedidos entre 0 y 200 por lo que podriamos implementar un KPI que mida la cantidad de pedidos que se realicen y llevar un seguimiento durante el tiempo para saber como esta evolucionando si en tendencia positiva o negativa.

LS0tCnRpdGxlOiAiTWVybWEgRm9ybSIKYXV0aG9yOiAiQ2FybG9zIENhcnJpbGxvIEEwMTc1MTE2OSIKZGF0ZTogIjIwMjItMDktMjciCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVHJ1ZQogICAgdG9jX2Zsb2F0OiBUcnVlCiAgICB0aGVtZTogY2VydWxlYW4KICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgo8aW1nIHNyYz0iL1VzZXJzL21hYy9Eb3dubG9hZHMvVEVDIEltYWdlbi53ZWJwIj4KCjxpbWcgc3JjPSIvVXNlcnMvbWFjL0Rvd25sb2Fkcy9Gb3JtIEltYWdlbi5wbmciPgoKIyAqKk1FUk1BKiogCgojIEltcG9ydGFyIGJhc2UgZGUgZGF0b3MKYGBge3J9CgpiZCA8LXJlYWQuY3N2KCIvVXNlcnMvbWFjL0Rvd25sb2Fkcy9GT1JNIC0gTWVybWEgbGltcGlhLmNzdiIpCmBgYAoKIyBJbnN0YWxhciBsaWJyZXJpYXMgCmBgYHtyfQoKIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKIyBpbnN0YWxsLnBhY2thZ2VzKCJqYW5pdG9yIikKbGlicmFyeShqYW5pdG9yKQpgYGAKCiMgVGlwb3MgZGUgVmFyaWFibGVzCmBgYHtyfQoKVmFyaWFibGU8LWMoImBGZWNoYcK0IiwiYE1lc8K0IiwiYEtpbG9zYCIpClR5cGU8LWMoInF1YW5saXRhdGl2ZSAobm9taW5hbCkiLCAicXVhbnRpYXRpdmUgKGRpc2NyZXRlKSIsICJxdWFudGl0YXRpdmUgKGRpc2NyZXRlKSIpCnRhYmxlPC1kYXRhLmZyYW1lKFZhcmlhYmxlLFR5cGUpCmtuaXRyOjprYWJsZSh0YWJsZSkKRXNjYWxhX2RlX01lZGljacOzbiA8LSBjKCJNZXJtYXMiLCJGZWNoYSIpCmBgYAoKIyBFbGltaW5hciBkdXBsaWNhZG9zCmBgYHtyfQoKYmRbZHVwbGljYXRlZChiZCksIF0Kc3VtKGR1cGxpY2F0ZWQoYmQpKQpgYGAKCiMgRWxpbWluYXIgbmVnYXRpdm9zIGNvbiBjZXJvCmBgYHtyfQoKYmQxPC1iZApiZDFbYmQxIDwwXSA8LTAKc3VtbWFyeShiZDEpCmBgYAoKIyBBbmFsaXNpcyBQcm9mdW5kbyBkZSBsYSBCYXNlIGRlIGRhdG9zCmBgYHtyfQoKbWVkaWFfYmQgPC0gbWVhbihiZCRLaWxvcykKbWVkaWFfYmQKCm1lZGlhbl9iZCA8LSBtZWRpYW4oYmQkS2lsb3MpCm1lZGlhbl9iZAoKbW9kZV9iZCA8LSBtb2RlKGJkJEtpbG9zKQptb2RlX2JkCgpoaXN0KGJkJEtpbG9zKQoKYGBgCgojIEdyYWZpY2EgRnJlY3VlbmNpYSAoRmVjaGEpCmBgYHtyfQoKYmQkRmVjaGE8LSBhcy5EYXRlKGJkJEZlY2hhLGZvcm1hdCA9ICIlZC8lbS8lWSIpCnBsb3QoYmQkRmVjaGEsIGJkJEtpbG9zKQoKYGBgCgpDb250YXIgVmFyaWFibGVzCmBgYHtyfQoKI0NvbnRhciBWYXJpYWJsZXMKY291bnQoYmQsS2lsb3MsIHNvcnQgPSBUUlVFKQpjb3VudChiZCxGZWNoYSwgc29ydCA9IFRSVUUpCmNvdW50KGJkLE1FUywgc29ydCA9IFRSVUUpCmBgYAoKIyBFbGltaW5hciBjb2x1bW5hcyAKYGBge3J9CgpiZDIgPC1iZApiZDIgPC0gc3Vic2V0IChiZDIsIHNlbGVjdCA9IC1jIChGZWNoYSkpCmBgYAoKI1IgZWxhY2nDs24gTWVybWEgdnMgTWVzCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmdncGxvdChiZDIsIGFlcyh4PW1lZGlhX2JkLCB5PU1FUykpICsKICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIGZpbGw9Im9yYW5nZSIpICsgc2NhbGVfZmlsbF9ncmV5KCkgKyAjIEFkZCBiYXJzIHRvIHRoZSBwbG90CiAgbGFicyh0aXRsZSA9ICJSZWxhY2nDs24gTWVzIHZzIE1lcm1hIChEYXRvcyBDb21wbGV0b3MpIiwgIyBBZGQgYSB0aXRsZQogICAgICAgc3VidGl0bGUgPSAiTWVybWEgZW1wcmVzYSBGT1JNIiwgIyBBZGQgYSBzdWJ0aXRsZQogICAgICAgY2FwdGlvbiA9ICJSZWxhY2nDs24iLCAjIEFkZCBhIGNhcHRpb24KICAgICAgIHggPSAiTWVzIGNvbiBtYXlvciBjYW50aWRhZCBkZSBtZXJtYSAoS2cpIikKYGBgCgojIEVsaW1pbmFyIHZhbG9yZXMgY29uIHVuIGdyYW1hamUgbWVub3IgYSA0NDk5KGdyKQpgYGB7cn0KCmJkMyA8LSBiZDIKYmQzIDwtIGJkM1tiZDMkS2lsb3M+IDQ0OTksIF0KYGBgCgojIFJlbGFjaW9uIGRlIE1lcyB2cyBNYXlvciBNZXJtYSAoS2cpCmBgYHtyfQpnZ3Bsb3QoYmQzLCBhZXMoeD1tZWRpYV9iZCwgeT1NRVMpKSArCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBmaWxsPSJvcmFuZ2UiKSArIHNjYWxlX2ZpbGxfZ3JleSgpICsgIyBBZGQgYmFycyB0byB0aGUgcGxvdAogIGxhYnModGl0bGUgPSAiUmVsYWNpw7NuIE1lcyB2cyBNZXJtYSAoTWF5b3IgS2cpIiwgIyBBZGQgYSB0aXRsZQogICAgICAgc3VidGl0bGUgPSAiTWVybWEgZW1wcmVzYSBGT1JNIiwgIyBBZGQgYSBzdWJ0aXRsZQogICAgICAgY2FwdGlvbiA9ICJSZWxhY2nDs24iLCAjIEFkZCBhIGNhcHRpb24KICAgICAgIHggPSAiTWVzIGNvbiBtYXlvciBjYW50aWRhZCBkZSBtZXJtYSBlbiAoS2cpIikKYGBgCgojICoqUFJPUFVFU1RBICMxKioKCiMgKklkZW50aWZpY2FyIGxhcyBzaWd1aWVudGVzIG9ic2VydmFjaW9uZXMuKgoKIyMjIyAgwr9RdWUgc2UgaGFjZSBlbiBBZ29zdG8gcXVlIGV4aXN0ZSB1bmEgbWF5b3IgY2FudGlkYWQgZGUgbWVybWE/CgojIyMjICBJZGVudGlmaWNhciBwb3IgcXVlIGVuIE1heW8gc2UgZ2VuZXJhIHVuIG1heW9yIHRvbmVsYWplIGRlIE1lcm1hLgoKIyMjIyAgwr9RdWUgcHJvZHVjdG8gdGUgZ2VuZXJhIG1hcyBtZXJtYT8gKGtnKQoKIyMjIyAgU2kgYmllbiBsbyBxdWUgb2JzZXJ2byBlcyBxdWUgbm8gZXhpc3RlIHVuIG1pc21vIHBhdHJvbiBkZSB0b25lbGFqZSBkdXJhbnRlIGVsIGHDsW8gc2luIGVtYmFyZ28sIHB1ZGUgdmVyIHF1ZSBlbiBBZ29zdG8gc2UgcmVhbGl6YXJvbiB1bmEgbWF5b3IgY2FudGlkYWQgZGUgcmVnaXN0cm9zIGRlIHRvbmVsYWplIGEgY29tcGFyYWNpb24gZGUgbG9zIGRlbWFzIG1lc2VzLCBwb3IgbG8gcXVlIGNvbmNsdXlvIGRvcyBjb3NhczoKCiMjIyMgIDEuIEV4aXN0ZSB1bmEgYWN0aXZpZGFkIGVuIGFnb3N0byBkb25kZSBsb3Mgb2JsaWdhIGEgZ2VuZXJhciB5IHJlZ2lzdHJhciBtYXMgbWVybWEuCiMjIyMgIDIuIFNlIGFjdW11bGUgZGVtYXNpYWRhIG1lcm1hIGRlIGxvcyBtZXNlcyBhbnRlcmlvcmVzIHkgcXVlIHNlIHZlYW4gb2JsaWdhZG9zIGVsIHBlcnNvbmFsIGEgdHJhYmFqYXIgbWFzIGVuIGVzZSBtZXMgcGFyYSBxdWUgcHVlZGFuIHRlbmVyIHVuYSBjYW50aWRhZCBtZW5vciBkZSByZWdpc3Ryb3MgcGFyYSBsb3Mgc2lndWllbnRlcyBtZXNlcyB5IGVzcGFjaW8gc3VmaWNpZW50ZSBwYXJhIHNlZ3VpciBhY3VtdWxhbmRvLgoKIyMjIyAgUG9yIG90cm8gbGFkbywgZWwgZWplbXBsbyBxdWUgb2JzZXJ2byBlcyBxdWUgZW4gSnVuaW8gc29sbyB0dXZpZXJvbiAzIHJlZ2lzdHJvcyBkZSBNZXJtYSB5IGVuIEp1bGlvL0Fnb3N0byBhdW1lbnRhcm9uIHN1cyByZWdpc3Ryb3MgcG9yIG1hcyBkZWwgODAlLi4KCiMjIyMgIFBvciBsbyBxdWUgbWkgcHJvcHVlc3RhIGVzIGltcGxlbWVudGFyIEtQSSdzIGNvbiBsYXMgcGVyc29uYXMgZW5jYXJnYWRhcyBkZSBlc3RlIGRlcGFydGFtZW50byBxdWUgcmVhbGljZW4gdW5hIGdlc3Rpb24gY29udGludWFYbWVzIHNvYnJlIGVsIHJlZ2lzdHJvIGRlIGtpbG9ncmFtb3MgZGUgbWVybWEgcGFyYSBxdWUgaGF5YSB1biBvcmRlbiB5IHNlIHB1ZWRhbiBkZXNjdWJyaXIgbnVldmFzIGFyZWFzIGRlIG9wb3J0dW5pZGFkIGNvbiBsb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3MuCgojICoqU0NSQVAqKgoKCjxpbWcgc3JjPSIvVXNlcnMvbWFjL0Rvd25sb2Fkcy9Gb3JtIEltYWdlbi5wbmciPgoKIyBCYXNlIGRlIGRhdG9zIFNjcmFwIAoKYGBge3J9CiNmaWxlLmNob29zZSgpCmJkIDwtIHJlYWQuY3N2KCIvVXNlcnMvbWFjL0Rvd25sb2Fkcy9GT1JNIC0gU2NyYXAgTGltcGlhICAoMSkuY3N2IikKYGBgCgojIExsYW1hciBsaWJyZXJpYXMKCmBgYHtyfQoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoamFuaXRvcikKYGBgCgoKIyBBbmFsaXphciBCYXNlIGRlIERhdG9zCgpgYGB7cn0KYmQkRmVjaGE8LSBhcy5EYXRlKGJkJEZlY2hhLGZvcm1hdCA9ICIlZC8lbS8lWSIpCnBsb3QoYmQkRmVjaGEsIGJkJENhbnRpZGFkKQoKc3VtbWFyeShiZCkKYGBgCgojIEFuYWxpc2lzIFByb2Z1bmRvIGRlIGxhIEJhc2UgZGUgRGF0b3MKYGBge3J9CgpsaWJyYXJ5KHBzeWNoKQpkZXNjcmliZShiZCkKc3RyKGJkKQoKdGFieWwoYmQsIFByb2R1Y3RvLCBVYmljYWNpw7NuLmRlLm9yaWdlbikKCnZhcmlhYmxlPC1jKCJSZWZlcmVuY2lhIiwiRmVjaGEiLCAiSG9yYSIsICJQcm9kdWN0byIsICJDYW50aWRhZCIsICJVbmlkYWQuZGUubWVkaWRhIiwgIlViaWNhY2nDs24uZGUub3JpZ2VuIiwgIlViaWNhY2nDs24uZGUuZGVzZWNobyIpCgp0eXBlPC1jKCJDdWFsaXRhdGl2byAobm9taW5hbCkiLCJDdWFudGl0YXRpdm8gKGRpc2NjcmV0YSkiLCAiQ3VhbnRpdGF0aXZvIChkaXNjcmV0YSkiLCAiQ3VhbGl0YXRpdm8gKG5vbWluYWwpIiwiQ3VhbnRpdGF0aXZvIChDb250aW51YSkiLCAiQ3VhbGl0YXRpdm8gKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZvIChub21pbmFsKSIsIkN1YWxpdGF0aXZvIChub21pbmFsKSIpCgp0YWJsZTwtZGF0YS5mcmFtZSh2YXJpYWJsZSx0eXBlKQprbml0cjo6a2FibGUodGFibGUpCgpWYXJpYWJsZTwtYygiUmVmZXJlbmNpYSIsICJGZWNoYSIsICJQcm9kdWN0byIsIkNhbnRpZGFkIiwgIlVuaWRhZC5kZS5tZWRpZGEiLCJVYmljYWNpw7NuLmRlLm9yaWdlbiIsIlViaWNhY2nDs24uZGUuZGVzZWNobyIsIkVzdGFkbyIpClR5cGU8LWMoIkN1YWxpdGF0aXZhIiwgIkN1YW50aXRhdGl2YSAoZGlzY3JldGEpIiwgIkN1YWxpdGF0aXZhIiwgIkN1YW50aXRhdGl2YSAoZGlzY3JldGEpIiwgIkN1YW50aXRhdGl2YSAoZGlzY3JldGEpIiwgIkN1YWxpdGF0aXZhIiwgIkN1YWxpdGF0aXZhIiwgIkN1YWxpdGF0aXZhIikKRXNjYWxhX2RlX01lZGljacOzbjwtYygiTnVtZXJvIiwgIkZlY2hhIiwgIkNhdGVnb3LDrWEiLCAiS2ciLCAiTWVkaWNpw7NuIiwgIlBvc2ljacOzbiIsICJQb3NpY2nDs24iLCAiRXN0YWRvIikKYGBgCgoKIyBMaW1waWV6YSBCYXNlIGRlIERhdG9zIApgYGB7cn0KYmQxIDwtIGJkCmJkMTwtIHN1YnNldChiZDEsIHNlbGVjdCA9IC1jIChSZWZlcmVuY2lhLCBQcm9kdWN0bywgVW5pZGFkLmRlLm1lZGlkYSwgSG9yYSwgVWJpY2FjacOzbi5kZS5kZXNlY2hvLCBFc3RhZG8pKQoKCmJkMiA8LSBiZApiZDI8LSBzdWJzZXQoYmQyLCBzZWxlY3QgPSAtYyAoUmVmZXJlbmNpYSwgUHJvZHVjdG8sIFVuaWRhZC5kZS5tZWRpZGEsIEhvcmEsIFViaWNhY2nDs24uZGUuZGVzZWNobywgRXN0YWRvKSkKYGBgCgojIEFuYWxpc2lzIEVzdGFkaXN0aWNvCmBgYHtyfQoKbWVkaWEgPC0gbWVhbihiZDIkQ2FudGlkYWQpCgptZWRpYW5hIDwtIG1lZGlhbihiZDIkQ2FudGlkYWQpCgptb2RlIDwtIGZ1bmN0aW9uICh4KSB7CiAgdXggPC0gdW5pcXVlKHgpCiAgdXggW3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh4LHV4KSkpXQp9Cgptb2RlIDwtIG1vZGUoYmQyJENhbnRpZGFkKQptb2RlCgpoaXN0KGJkMiRDYW50aWRhZCkKYGBgCgoKIyBHcmFmaWNhIGRlIFJlbGFjaW9uIGRlIFNBQgpgYGB7cn0KCmNvdW50KGJkMSwgRmVjaGEsIHNvcnQgPSBUUlVFKQpjb3VudChiZDIsIFViaWNhY2nDs24uZGUub3JpZ2VuLCBzb3J0ID0gVFJVRSkKCmdncGxvdChiZDIsIGFlcyh4PW1lZGlhLCB5PSBVYmljYWNpw7NuLmRlLm9yaWdlbikpICsKICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIGZpbGw9ImJsdWUiKSArIHNjYWxlX2ZpbGxfZ3JleSgpICsgIyBBZGQgYmFycyB0byB0aGUgcGxvdAogIGxhYnModGl0bGUgPSAiUmVsYWNpw7NuIFNBQiIsICMgQWRkIGEgdGl0bGUKICAgICAgIHN1YnRpdGxlID0gIlNjcmFwIGVtcHJlc2EgRk9STSIsICMgQWRkIGEgc3VidGl0bGUKICAgICAgIGNhcHRpb24gPSAiUmVsYWNpw7NuIiwgIyBBZGQgYSBjYXB0aW9uCiAgICAgICB4ID0gIngiKQpgYGAKCgojICoqUFJPUFVFU1RBICMyKioKCiMgKk9ic2VydmFjaW9uZXMgUGVyc29uYWxlcyoKCiMjIyMgUHVkZSBJZGVudGlmaWNhciBxdWUgZW4gQWdvc3RvIGV4aXN0ZSB1bmEgY2FudGlkYWQgbWVub3IgZGUgc2NyYXAgZW4gZG9uZGUgRk9STSBwdWVkZSBhcHJvdmVjaGFyIHBhcmEgYXBsaWNhciBtZXRvZG9zIGRlIHJlY2ljbGFqZSB5IHVuYSBtYXlvciBwcm9kdWN0aXZpZGFkIGRlbnRybyBkZSBlc3RlIGRlcGFydGFtZXRvLgoKIyMjIyBFbiBjdWFudG8gYSBtaSBwcm9wdWVzdGEgZXMgaWRlbnRpZmljYXIgdW5hIHRlY25vbG9naSBxdWUgc2VhIGNhcGF6IGRlIGJyaW5kYXIgdW5hIG1heW9yIGNhbnRpZGFkIGRlIHJlY2ljbGFkbyBkdXJhbnRlIGVzdGUgbWVzIHBhcmEgYXNpIHBvZGVyIG9idGVuZXIgbWF5b3IgZGVzcGVyZGljaW8gZWwgY3VhbCBzZSBwdWVkYSB1dGlsaXphci4KCiMjIyMgQWwgaWd1YWwgaWRlbnRpZmljYXIgYSB0cmF2ZXMgZGUgdW4gYW5hbGlzaXMgZGUgbGFzIHZhcmlhYmxlcywgbGFzIHZhcmlhYmxlcyBxdWUgbm9zIG9mcmV6Y2FuIG1heW9yIHJlY2ljbGFkbyBwYXJhIHBvZGVyIGlkZW50aWZpY2FyIG1heW9yZXMgb3BvcnR1bmlkYWRlcyBkZSBvYnRlbmVyIGRlc3BlcmRlY2lvLgoKCiMgICoqUFJPRFVDQ0lPTioqCgoKPGltZyBzcmM9Ii9Vc2Vycy9tYWMvRG93bmxvYWRzL0Zvcm0gSW1hZ2VuLnBuZyI+CgojIEltcG9ydGFyIGJhc2UgZGUgZGF0b3MKCmBgYHtyfQoKI2ZpbGUuY2hvb3NlKCkKRk9STSA8LSByZWFkLmNzdigiL1VzZXJzL21hYy9Eb3dubG9hZHMvZm9ybV9wcm9kLmNzdiIpCmBgYAoKIyBFbnRlbmRlciBCYXNlIGRlIERhdG9zCmBgYHtyfQoKcmVzdW1lbiA8LSBzdW1tYXJ5KEZPUk0pCnJlc3VtZW4KYGBgCgoKIyBMbGFtYXIgbGlicmVyaWFzCmBgYHtyfQoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoamFuaXRvcikKbGlicmFyeShwbHlyKQpgYGAKCgojIEFuYWxpc2lzIFByb2Z1bmRvIGRlIGxhIEJhc2UgZGUgRGF0b3MKYGBge3J9CgpzdHIoRk9STSkKVmFyaWFibGU8LWMoIk5vLiIsIkNMSUVOVEUiLCJJRC5GT1JNICIsICJQLi5EVUNUTyIsIlBJRVpBUy5QLi5HLiIsIlRNTy4uTUlOLiIsIkhSLi5GSU4iLCJFU1RBQ0lPTi5BUi4uTlFVRSIsIkxhbWluYXMuUHJvY2VzYWRhcyIsIiBJTklDSU8uU0VQLlVQIiwiRklOLklOSUNJTy5ERS5TRVAuVVAiLCJJTklDSU8uZGUuUC4uLi5TTyIsICJGSU4uZGUuUC4uLi5TTyIsIlRJRU1QTy4uQ0FMSURBRCIsIlRJRU1QTy5NQVRFUklBTEVTIiwiTUVSTUFTLk1hcXVpbmFzLiIsIkRhdGUiKQpUeXBlPC1jKCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsICJDdWFsaXRhdGl2YSIsICJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsICJDdWFsaXRhdGl2YSIsICJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFsaXRhdGl2YSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIpCnRhYmxlPC1kYXRhLmZyYW1lKFZhcmlhYmxlLFR5cGUpCmtuaXRyOjprYWJsZSh0YWJsZSkKCmBgYAoKCiMgRXNjYWxhIGRlIG1lZGljaW9uCmBgYHtyfQoKVmFyaWFibGU8LWMoIk5vLiIsIkNMSUVOVEUiLCJJRC5GT1JNICIsICJQLi5EVUNUTyIsIlBJRVpBUy5QLi5HLiIsIlRNTy4uTUlOLiIsIkhSLi5GSU4iLCJFU1RBQ0lPTi5BUi4uTlFVRSIsIkxhbWluYXMuUHJvY2VzYWRhcyIsIiBJTklDSU8uU0VQLlVQIiwiRklOLklOSUNJTy5ERS5TRVAuVVAiLCJJTklDSU8uZGUuUC4uLi5TTyIsICJGSU4uZGUuUC4uLi5TTyIsIlRJRU1QTy4uQ0FMSURBRCIsIlRJRU1QTy5NQVRFUklBTEVTIiwiTUVSTUFTLk1hcXVpbmFzLiIsIkRhdGUiKQpUeXBlPC1jKCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsICJDdWFsaXRhdGl2YSIsICJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsICJDdWFsaXRhdGl2YSIsICJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFsaXRhdGl2YSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIsIkN1YW50aXRhdGl2YSAoRGlzY3JldGEpIiwiQ3VhbnRpdGF0aXZhIChEaXNjcmV0YSkiLCJDdWFudGl0YXRpdmEgKERpc2NyZXRhKSIpCkVzY2FsYV9kZV9NZWRpY2nDs24gPC0gYygiTnVtZXJvIiwgIkVtcHJlc2EiLCAiSUQiLCJDYXRlZ29yaWEiLCAiUGllemFzIiwgIk1pbnV0b3MiLCJUaWVtcG8iLCJNYXF1aW5hIiwiU29icmFudGUiLCJIb3JhIiwiSG9yYSIsIkhvcmEiLCJIb3JhIiwiVGllbXBvIiwiVGllbXBvIiwiTWVybWFzIiwiRmVjaGEiKQp0YWJsZTwtZGF0YS5mcmFtZShWYXJpYWJsZSxUeXBlLEVzY2FsYV9kZV9NZWRpY2nDs24pCmtuaXRyOjprYWJsZSh0YWJsZSkKYGBgCgoKIyBMaW1waWV6YSBCYXNlIGRlIERhdG9zICgzKQpgYGB7cn0KCmJkW2R1cGxpY2F0ZWQoYmQpLCBdCnN1bShkdXBsaWNhdGVkKGJkKSkKCmJkMTwtYmQKYmQxW2JkMSA8MF0gPC0wCnN1bW1hcnkoYmQxKQoKCgpgYGAKCgojIEFuYWxpc2lzIEdyYWZpY28KYGBge3J9CgpiYXJwbG90KHRhYmxlKEZPUk0kQ0xJRU5URSkpCgpib3hwbG90cz1zdWJzZXQoRk9STSxzZWxlY3Q9LWMoQ0xJRU5URSkpCmJveHBsb3QodGFibGUgKEZPUk0kQ0xJRU5URSksIG1haW4gPSAiUGVkaWRvcyBkZSBDbGllbnRlcyIsIHhsYWIgPSAiQ2xpZW50ZXMiLCB5bGFiID0gIkNhbnRpZGFkIikKCmBgYAoKIyAqKlBST1BVRVNUQSAjMyoqCgojICpPYnNlcnZhY2lvbmVzIFBlcnNvbmFsZXMqCgojIyMjIFNlIGxvZ3JvIGlkZW50aWZpY2FyIHF1ZSBTdGFiaWx1cyB5IFRSTVggc29uIGxvcyBjbGllbnRlcyBxdWUgbWFzIHRpZW5lbiBhY3RpdmlkYWQgY29uIEZPUk0sIHBvciBvdHJvIGxhZG8gc2UgcHVlZGUgb2JzZXJ2YXIgcXVlIGxvcyBjbGllbnRlcyB0aWVuZW4gdW4gcmFuZ28gZGUgcGVkaWRvcyBlbnRyZSAwIHkgMjAwIHBvciBsbyBxdWUgcG9kcmlhbW9zIGltcGxlbWVudGFyIHVuIEtQSSBxdWUgbWlkYSBsYSBjYW50aWRhZCBkZSBwZWRpZG9zIHF1ZSBzZSByZWFsaWNlbiB5IGxsZXZhciB1biBzZWd1aW1pZW50byBkdXJhbnRlIGVsIHRpZW1wbyBwYXJhIHNhYmVyIGNvbW8gZXN0YSBldm9sdWNpb25hbmRvIHNpIGVuIHRlbmRlbmNpYSBwb3NpdGl2YSBvIG5lZ2F0aXZhLgoKCgoKCgo=