Importar base de datos Produccion de carton

#file.choose()
bd <- read.csv("/Users/andreapaolasosa/Desktop/produccionagosto.csv")

Entender base de datos

summary(bd)
##     Fecha                No.           CLIENTE            ID.FORM         
##  Length:2571        Min.   :  1.00   Length:2571        Length:2571       
##  Class :character   1st Qu.: 25.00   Class :character   Class :character  
##  Mode  :character   Median : 50.00   Mode  :character   Mode  :character  
##                     Mean   : 50.83                                        
##                     3rd Qu.: 75.00                                        
##                     Max.   :121.00                                        
##                     NA's   :8                                             
##    PRODUCTO              X             PIEZAS.PROG.        TMO..MIN.        
##  Length:2571        Length:2571        Length:2571        Length:2571       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##    HR..FIN          ESTACION.ARRANQUE  Laminas.procesadas INICIO.SEP.UP     
##  Length:2571        Length:2571        Length:2571        Length:2571       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  FIN.INICIO.DE.SEP.UP INICIO.de.PROCESO  FIN.de.PROCESO     TIEMPO.CALIDAD  
##  Length:2571          Length:2571        Length:2571        Min.   : 0.000  
##  Class :character     Class :character   Class :character   1st Qu.: 0.000  
##  Mode  :character     Mode  :character   Mode  :character   Median : 0.000  
##                                                             Mean   : 2.199  
##                                                             3rd Qu.: 1.000  
##                                                             Max.   :48.000  
##                                                             NA's   :2154    
##  TIEMPO.MATERIALES MERMAS.Maquinas.
##  Min.   : 0.000    Mode:logical    
##  1st Qu.: 0.000    NA's:2571       
##  Median : 1.000                    
##  Mean   : 1.595                    
##  3rd Qu.: 1.000                    
##  Max.   :50.000                    
##  NA's   :2460

1.¿Cuántas variables y cuántos registros tiene la base de datos?

La base cuenta con 2751 registros y 18 variables

str(bd)
## 'data.frame':    2571 obs. of  18 variables:
##  $ Fecha               : chr  "01/08/2022" "01/08/2022" "01/08/2022" "01/08/2022" ...
##  $ 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)." ...
##  $ X                   : chr  "" "" "" "" ...
##  $ PIEZAS.PROG.        : chr  "199" "57" "68" "192" ...
##  $ TMO..MIN.           : chr  "15" "10" "10" "15" ...
##  $ HR..FIN             : chr  "9:15" "9:25" "9:35" "9:50" ...
##  $ ESTACION.ARRANQUE   : chr  "C1" "C1Y2" "C1Y2" "C1" ...
##  $ Laminas.procesadas  : chr  "201" "116" "69" "49" ...
##  $ INICIO.SEP.UP       : chr  "9:00" "9:26" "10:02" "10:12" ...
##  $ FIN.INICIO.DE.SEP.UP: chr  "9:12" "9:31" "10:09" "10.17" ...
##  $ INICIO.de.PROCESO   : chr  "9:13" "9:32" "10:09" "10:18" ...
##  $ FIN.de.PROCESO      : chr  "9:26" "9:53" "10.12" "10:20" ...
##  $ TIEMPO.CALIDAD      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ TIEMPO.MATERIALES   : int  NA NA NA NA NA 3 NA NA NA NA ...
##  $ MERMAS.Maquinas.    : logi  NA NA NA NA NA NA ...
#install.packages("psych")
#library(psych)

2. Aplica al menos 2 tecnicas de limpieza de base de datos y explicalas brevemente, ¿Porqué realizaste estas tecnicas?

Tecnica 1. Remover valores irrelevantes

Eliminar columnas que no aportan informacion valiosa al analisis de esta manera nos quedamos con la informacion de mayor relevancia.

bd1 <- bd
bd1<-subset(bd1,select=-c(No.,ID.FORM,PRODUCTO,X,HR..FIN,ESTACION.ARRANQUE,INICIO.SEP.UP,FIN.INICIO.DE.SEP.UP,INICIO.de.PROCESO,FIN.de.PROCESO,TIEMPO.CALIDAD,TIEMPO.MATERIALES,MERMAS.Maquinas.))
str(bd1)
## 'data.frame':    2571 obs. of  5 variables:
##  $ Fecha             : chr  "01/08/2022" "01/08/2022" "01/08/2022" "01/08/2022" ...
##  $ CLIENTE           : chr  "VARROC" "VARROC" "VARROC" "DENSO" ...
##  $ PIEZAS.PROG.      : chr  "199" "57" "68" "192" ...
##  $ TMO..MIN.         : chr  "15" "10" "10" "15" ...
##  $ Laminas.procesadas: chr  "201" "116" "69" "49" ...

Tecnica 4. Convertir tipos de datos

Convertir de caracter a N/A para poder eliminar los espacios en blanco sin datos

bd2 <- bd1
bd2$TMO..MIN. <- substr(bd2$TMO..MIN., start = 1, stop = 2)
#tibble(bd2)  
bd2$TMO..MIN. <- as.integer(bd2$TMO..MIN.)
## Warning: NAs introduced by coercion
str(bd2)  
## 'data.frame':    2571 obs. of  5 variables:
##  $ Fecha             : chr  "01/08/2022" "01/08/2022" "01/08/2022" "01/08/2022" ...
##  $ CLIENTE           : chr  "VARROC" "VARROC" "VARROC" "DENSO" ...
##  $ PIEZAS.PROG.      : chr  "199" "57" "68" "192" ...
##  $ TMO..MIN.         : int  15 10 10 15 15 30 15 15 15 20 ...
##  $ Laminas.procesadas: chr  "201" "116" "69" "49" ...
bd3 <- bd2
bd3$PIEZAS.PROG. <- substr(bd3$PIEZAS.PROG., start = 1, stop = 2)
#tibble(bd3)  
bd3$PIEZAS.PROG. <- as.integer(bd3$PIEZAS.PROG.)
## Warning: NAs introduced by coercion
str(bd3) 
## 'data.frame':    2571 obs. of  5 variables:
##  $ Fecha             : chr  "01/08/2022" "01/08/2022" "01/08/2022" "01/08/2022" ...
##  $ CLIENTE           : chr  "VARROC" "VARROC" "VARROC" "DENSO" ...
##  $ PIEZAS.PROG.      : int  19 57 68 19 19 40 80 10 10 16 ...
##  $ TMO..MIN.         : int  15 10 10 15 15 30 15 15 15 20 ...
##  $ Laminas.procesadas: chr  "201" "116" "69" "49" ...
bd4 <- bd3
bd4$Laminas.procesadas <- substr(bd4$Laminas.procesadas, start = 1, stop = 2)
#tibble(bd4)  
bd4$Laminas.procesadas <- as.integer(bd4$Laminas.procesadas)
## Warning: NAs introduced by coercion
str(bd4)
## 'data.frame':    2571 obs. of  5 variables:
##  $ Fecha             : chr  "01/08/2022" "01/08/2022" "01/08/2022" "01/08/2022" ...
##  $ CLIENTE           : chr  "VARROC" "VARROC" "VARROC" "DENSO" ...
##  $ PIEZAS.PROG.      : int  19 57 68 19 19 40 80 10 10 16 ...
##  $ TMO..MIN.         : int  15 10 10 15 15 30 15 15 15 20 ...
##  $ Laminas.procesadas: int  20 11 69 49 49 80 41 53 53 55 ...

Tecnica 5. Valores faltantes

bd5 <- bd4
bd5$TMO..MIN.[is.na(bd4$TMO..MIN.)]<-mean(bd5$TMO..MIN., na.rm = TRUE)
summary (bd5)
##     Fecha             CLIENTE           PIEZAS.PROG.     TMO..MIN.     
##  Length:2571        Length:2571        Min.   : 0.00   Min.   : 0.000  
##  Class :character   Class :character   1st Qu.:15.00   1st Qu.: 9.842  
##  Mode  :character   Mode  :character   Median :20.00   Median : 9.842  
##                                        Mean   :22.57   Mean   : 9.842  
##                                        3rd Qu.:25.00   3rd Qu.:10.000  
##                                        Max.   :99.00   Max.   :70.000  
##                                        NA's   :687                     
##  Laminas.procesadas
##  Min.   : 0.0      
##  1st Qu.: 0.0      
##  Median : 0.0      
##  Mean   : 5.1      
##  3rd Qu.:10.0      
##  Max.   :97.0      
##  NA's   :1189

Tecnica 5. Valores faltantes

Reemplazar cero con N/A para eliminar valores innecesarios.

bd6 <- bd5
bd6$Laminas.procesadas[bd6$Laminas.procesadas < 1]<- NA
summary (bd6)
##     Fecha             CLIENTE           PIEZAS.PROG.     TMO..MIN.     
##  Length:2571        Length:2571        Min.   : 0.00   Min.   : 0.000  
##  Class :character   Class :character   1st Qu.:15.00   1st Qu.: 9.842  
##  Mode  :character   Mode  :character   Median :20.00   Median : 9.842  
##                                        Mean   :22.57   Mean   : 9.842  
##                                        3rd Qu.:25.00   3rd Qu.:10.000  
##                                        Max.   :99.00   Max.   :70.000  
##                                        NA's   :687                     
##  Laminas.procesadas
##  Min.   : 1.0      
##  1st Qu.:10.0      
##  Median :11.0      
##  Mean   :14.1      
##  3rd Qu.:12.0      
##  Max.   :97.0      
##  NA's   :2071

Tecnica 5. Valores faltantes

Borrar todos los registros NA de una tabla para tener una base de datos precisa y no contabilizar el dia que no hubo produccion

bd7 <- bd6
bd7 <- na.omit(bd7)    
str(bd7)
## 'data.frame':    494 obs. of  5 variables:
##  $ Fecha             : chr  "01/08/2022" "01/08/2022" "01/08/2022" "01/08/2022" ...
##  $ CLIENTE           : chr  "VARROC" "VARROC" "VARROC" "DENSO" ...
##  $ PIEZAS.PROG.      : int  19 57 68 19 19 40 80 10 10 16 ...
##  $ TMO..MIN.         : num  15 10 10 15 15 30 15 15 15 20 ...
##  $ Laminas.procesadas: int  20 11 69 49 49 80 41 53 53 55 ...
##  - attr(*, "na.action")= 'omit' Named int [1:2077] 29 30 31 32 33 34 35 36 37 38 ...
##   ..- attr(*, "names")= chr [1:2077] "29" "30" "31" "32" ...

3.Clasifica cada variable en cualitativa, cuantitativa discreta o cuantitativa continua.

Variable<-c("Fecha","CLIENTE","PIEZAS.PROG","TMO..MIN.","Laminas.procesadas")
Type<-c("Cuantitativa(Discreta)","Cualitativa", "Cuantitativa(Discreta)", "Cuantitativa(Discreta)", "Cuantitativa(Discreta)")
table<-data.frame(Variable,Type)
knitr::kable(table)
Variable Type
Fecha Cuantitativa(Discreta)
CLIENTE Cualitativa
PIEZAS.PROG Cuantitativa(Discreta)
TMO..MIN. Cuantitativa(Discreta)
Laminas.procesadas Cuantitativa(Discreta)

4. Elige la escala de medición de cada variable.

Variable<-c("Fecha","CLIENTE","PIEZAS.PROG","TMO..MIN.","Laminas.procesadas")
Type<-c("Cuantitativa(Discreta)","Cualitativa", "Cuantitativa(Discreta)", "Cuantitativa(Discreta)", "Cuantitativa(Discreta)")
Escala_de_Medición <- c("Fecha","Empresa","Numero de produccion", "Minutos","Sobrante")
table<-data.frame(Variable,Type)
knitr::kable(table)
Variable Type
Fecha Cuantitativa(Discreta)
CLIENTE Cualitativa
PIEZAS.PROG Cuantitativa(Discreta)
TMO..MIN. Cuantitativa(Discreta)
Laminas.procesadas Cuantitativa(Discreta)

5 Realizar un análisis estadístico descriptivo en el que logres destacar el conjunto de datos, que apoyan a la empresa a mejorar su operación.

Tablas cruzadas

cruzada1<-table(bd7$Fecha,bd7$PIEZAS.PROG.)
knitr::kable(cruzada1)
10 12 15 16 19 20 24 25 26 30 32 35 40 45 50 57 60 68 70 80
01/08/2022 11 0 0 5 14 24 1 0 2 0 4 0 6 0 3 1 1 1 0 3
02/08/2022 5 0 5 0 0 9 0 2 0 2 0 0 1 0 0 0 0 0 0 0
03/08/2022 4 0 1 0 0 3 0 6 0 0 0 1 3 0 0 0 1 0 0 0
04/08/2022 2 1 3 0 0 3 0 10 0 0 0 3 0 0 0 0 0 0 0 0
05/08/2022 5 0 2 0 0 3 0 5 0 3 0 0 0 0 0 0 0 0 0 0
06/08/2022 3 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0
08/08/2022 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 0 0 0 0 0
09/08/2022 4 0 0 0 0 4 0 5 0 0 0 4 0 0 1 0 3 0 1 0
10/08/2022 7 0 1 0 0 8 0 3 0 0 0 1 2 0 0 0 1 0 0 0
11/08/2022 6 0 1 0 0 4 0 8 0 1 0 0 2 0 1 0 2 0 0 0
12/08/2022 7 0 1 0 0 1 0 7 0 1 0 1 0 0 0 0 0 0 0 0
13/08/2022 1 0 2 0 0 4 0 3 0 0 0 0 1 0 0 0 1 0 0 0
15/08/2022 7 0 2 0 0 3 0 4 0 1 0 1 1 0 0 0 0 0 1 0
16/08/2022 4 0 1 0 0 3 0 6 0 2 0 0 0 1 0 0 0 0 0 0
17/08/2022 10 0 4 0 0 3 0 2 0 1 0 0 1 0 0 0 0 0 0 0
18/08/2022 6 0 3 0 0 2 0 3 0 2 0 2 2 0 0 0 0 0 0 0
19/08/2022 1 0 1 0 0 1 0 2 0 1 0 0 0 0 0 0 0 0 1 0
20/08/2022 7 0 1 0 0 2 0 0 0 0 0 2 2 0 0 0 1 0 0 0
22/08/2022 1 0 0 0 0 1 0 7 0 1 0 0 0 0 0 0 0 0 0 0
23/08/2022 1 0 0 0 0 1 0 2 0 0 0 0 2 0 0 0 0 0 0 0
24/08/2022 1 0 5 0 0 3 0 2 0 0 0 0 1 0 0 0 0 0 0 0
25/08/2022 5 0 1 0 0 2 0 3 0 2 0 0 0 0 0 0 0 0 0 0
26/08/2022 4 0 0 0 0 2 0 5 0 0 0 3 0 0 0 0 0 0 0 0
27/08/2022 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
29/08/2022 9 0 0 0 0 1 0 5 0 0 0 1 1 0 0 0 1 0 0 0
30/08/2022 8 0 4 0 0 5 0 4 0 0 0 1 1 0 0 0 0 0 0 0
31/08/2022 15 1 0 0 0 3 0 6 0 0 0 1 0 0 0 0 0 0 0 0
cruzada2<-table(bd7$Laminas.procesadas,bd7$TMO..MIN.)
knitr::kable(cruzada2)
0 9.84184675834971 10 11 12 15 20 25 30 35 40 45 50 60 65 70
1 1 1 0 2 2 0 0 0 0 0 0 0 0 0 0 0
2 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0
3 1 5 0 0 3 0 0 0 0 0 0 0 0 0 0 0
4 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 4 5 5 1 0 0 0 0 0 0 0 0 0 0 0 0
10 3 42 71 33 7 0 2 2 1 0 0 1 0 0 0 0
11 1 24 48 37 14 0 0 0 0 0 0 0 0 0 0 0
12 1 25 21 25 20 0 0 0 0 0 0 0 0 0 0 0
13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
14 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0
16 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0
17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
19 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
20 0 3 0 0 0 1 1 13 0 1 0 2 0 1 0 0
21 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0
22 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 0
23 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
25 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
27 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0
32 0 1 0 1 0 0 0 0 0 2 0 0 0 0 0 0
33 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0
35 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
38 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0
40 0 1 0 1 0 0 0 1 0 0 2 0 0 0 0 0
41 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0
44 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
49 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0
50 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
51 0 0 2 0 0 3 0 0 0 0 0 0 0 0 0 0
53 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0
55 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
65 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0
69 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
79 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
80 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0
97 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

Gráficos de datos cualitativos y cuantitativos

Datos cualitativos

barplot(prop.table(table(bd7$Laminas.procesadas)),col=c("pink","yellow","red","green"),main="Fabricante por estado", ylab ="Frecuencias",las=1)

pie(prop.table(table(bd7$CLIENTE)),col=c("pink","blue","yellow","orange","red","grey","green","black","white"),main="Empresa", ylab ="Frecuencias",las=1)

Gráficos de dispersión

plot(bd7$TMO..MIN., xlab = "Proceso de lamina", ylab = "Tiempo", main = "Tiempo por Lamina" )

Importar base de datos Scrap

#file.choose()
base <- read.csv("/Users/andreapaolasosa/Desktop/FORM - Scrap.csv")

Entender base de datos

summary(base)
##   Referencia           Fecha             Producto            Cantidad      
##  Length:251         Length:251         Length:251         Min.   :   0.00  
##  Class :character   Class :character   Class :character   1st Qu.:   1.00  
##  Mode  :character   Mode  :character   Mode  :character   Median :   2.00  
##                                                           Mean   :  13.34  
##                                                           3rd Qu.:   7.00  
##                                                           Max.   :1674.00  
##  Unidad.de.medida   Ubicación.de.origen Ubicación.de.desecho    Estado         
##  Length:251         Length:251          Length:251           Length:251        
##  Class :character   Class :character    Class :character     Class :character  
##  Mode  :character   Mode  :character    Mode  :character     Mode  :character  
##                                                                                
##                                                                                
## 

1.¿Cuántas variables y cuántos registros tiene la base de datos?

250 registros y 8 variables

str(base)
## 'data.frame':    251 obs. of  8 variables:
##  $ Referencia          : chr  "agosto 2022 (250)" "SP/08731" "SP/08730" "SP/08729" ...
##  $ Fecha               : chr  "" "2022-08-31 14:55:40" "2022-08-31 14:49:25" "2022-08-31 13:49:29" ...
##  $ Producto            : chr  "" "[BACKFRAME 60% CUELLO ARMADO] 18805. 60% Backframe. Cuello Armado." "[N61506747 CAJA] N61506747. Kit. Caja." "[N61506729 SEPARADOR] N61506729. Kit. Separador." ...
##  $ Cantidad            : num  1674 2 1 1 31 ...
##  $ Unidad.de.medida    : chr  "" "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" ...
##  $ Ubicación.de.desecho: chr  "" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" "Virtual Locations/Scrapped" ...
##  $ Estado              : chr  "" "Hecho" "Hecho" "Hecho" ...
#install.packages("psych")
#library(psych)

*2. Aplica al menos 2 tecnicas de limpieza de base de datos

#Tecnica 1. Remover valores irrelevantes Eliminar columnas

base2 <- base
base2 <- subset(base2, select = -c (Referencia,Unidad.de.medida)) 

#Tecnica 1. Remover valores irrelevantes Eliminar renglones

base3 <- base2
base3 <- base3[base3$Cantidad>0,]  
summary (base3)
##     Fecha             Producto            Cantidad       Ubicación.de.origen
##  Length:250         Length:250         Min.   :   1.00   Length:250         
##  Class :character   Class :character   1st Qu.:   1.00   Class :character   
##  Mode  :character   Mode  :character   Median :   2.00   Mode  :character   
##                                        Mean   :  13.39                      
##                                        3rd Qu.:   7.00                      
##                                        Max.   :1674.00                      
##  Ubicación.de.desecho    Estado         
##  Length:250           Length:250        
##  Class :character     Class :character  
##  Mode  :character     Mode  :character  
##                                         
##                                         
## 

3.Clasifica cada variable en cualitativa, cuantitativa discreta o cuantitativa continua.

Variable<-c("Fecha","Producto","Cantidad","Ubicación.de.origen","Ubicación.de.desecho","Estado")
Type<-c("Cuantitativa(Discreta)","Cualitativa", "Cualitativa", "Cualitativa", "Cualitativa","Cualitativa")
table<-data.frame(Variable,Type)
knitr::kable(table)
Variable Type
Fecha Cuantitativa(Discreta)
Producto Cualitativa
Cantidad Cualitativa
Ubicación.de.origen Cualitativa
Ubicación.de.desecho Cualitativa
Estado Cualitativa

4. Elige la escala de medición de cada variable.

Variable2<-c("Fecha","Producto","Cantidad","Ubicación.de.origen","Ubicación.de.desecho","Estado")
Type<-c("Cuantitativa(Discreta)","Cualitativa", "Cualitativa", "Cualitativa", "Cualitativa","Cualitativa")
Escala_de_Medición2 <- c("Fecha","Producto","Numero de produccion", "Origen","Ubicacion","Completado")
table2<-data.frame(Variable,Type)
knitr::kable(table2)
Variable Type
Fecha Cuantitativa(Discreta)
Producto Cualitativa
Cantidad Cualitativa
Ubicación.de.origen Cualitativa
Ubicación.de.desecho Cualitativa
Estado Cualitativa

5 Realizar un análisis estadístico descriptivo en el que logres destacar el conjunto de datos, que apoyan a la empresa a mejorar su operación.

Tablas cruzadas

cruzada3<-table(base3$Cantidad,base3$Estado)
knitr::kable(cruzada3)
Hecho
1 0 76
2 0 59
2.5 0 2
3 0 14
4 0 18
5 0 4
6 0 11
7 0 4
8 0 10
9 0 6
10 0 8
11 0 1
12 0 4
13 0 2
14 0 1
15 0 3
16 0 2
18 0 1
19 0 2
20 0 5
24 0 4
28 0 1
31 0 1
36 0 2
40 0 1
43 0 1
48 0 1
51 0 1
56 0 1
60 0 1
80 0 1
96 0 1
1674.0016 1 0
cruzada4<-table(base3$Producto,base3$Ubicación.de.desecho)
knitr::kable(cruzada4)
Virtual Locations/Scrapped
1 0
[2065WY AS 30 99 0000 00 000 TAPA - BOX 2064WY] BOX 2064WY 0 2
[241B EXPORT CAJA] 241B. Export. Caja. 0 1
[341332 CELDA - U611 & U625] 341332. U611. U625. Celda Troquelada. 0 10
[341332 CHAROLA - U611 & U625] 341332. U611. U625. Charola Troquelada. 0 5
[341332 DIVISOR - U611 & U625] 341332. U611. U625. Divisor Troquelado. 0 5
[357790-TAPA] 357790. Tapa. 0 3
[358268-CAJA] 358268-CAJA 0 2
[358268-TAPA] 358268-TAPA 0 2
[428579 AS 30 99 0000 00 000 INSERTO- FORD DAMPER] 14306. Damper Ford DTP. Inserto. 0 1
[428818 AS 30 99 0000 00 000 INSERTO - CHRYSLER INSERT DJ] CHRYSLER INSERT DJ PART 694087 0 3
[429296 AS 30 99 0000 00 000 INSERTO - INSERT TMC 150 TESLA] 14783. TMC150. Inserto. 0 1
[446265 AS 30 99 0000 00 000 CAPA INTERMEDIA- PAD 43X36 DAIMLER] 14454. Daimler Pad 43 X 36 0 2
[467.416-24 COMPARTIMENT INSERT 535X335X221MM CC ESD] Refacciones. P1. Celdado. 0 1
[496455 FS 30 99 0000 00 000 CARTÓN - BOX 0371813] BOX 0371813 0 1
[500033 AS 30 99 0000 00 000 INSERTO - Inserto FORD China 500033] 17397. 500033. FORD China. Inserto. 0 1
[642762 PACKING, SHEET, 565.2X742.9 - INSERT 642762] 642762. Pad. S.M. 0 3
[643920 CART, SOM, 746.8X569.0X292.1, RSC - BOX 643920 STABOMAT] 13891. 643920. Stabomat. Caja. 0 2
[647713] 647713. Caja. 0 3
[938830 FS 30 99 0000 00 000 CARTÓN - SIZE 24”] 24”. Caja Terminada. 0 1
[939069 FS 30 99 0000 00 000 CARTÓN -BOX 939069 34”] 34”. Caja Terminada. 0 1
[A - CELDA SUDAFRICA BMW G01 LCI] Sudafrica. A. Pieza. 0 3
[B - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. B. Pieza. 0 3
[BACKFRAME 60% CUELLO ARMADO] 18805. 60% Backframe. Cuello Armado. 0 1
[BACKFRAME 60% TAPA BASE] 18271. 60% Backframe. Tapa Base. 0 1
[BOX 143907 - CELDA] 143907. Solares. Celda Troquelada. 0 3
[BOX 143907 - TAPA] 143907. Solares. Tapa Troquelada. 0 1
[C - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. C. Pieza. 0 3
[CAJA ( ARMREST / HR REAR) TMC 110 MODEL Y] 19148. Modelo Y. TMC0110. Armrest & Rear & Center. Caja 0 1
[CAJA 695] N61506695. Caja. 0 1
[CAJA 726] N61506726 CAJA 0 1
[CAJA 734949] CAJA 734949 0 1
[CAJA 784] 784. Kit. Caja. 0 2
[CAJA 95161] 19079. 95161. Kit. Caja. 0 1
[Caja backup canastilla gris] CAJA DE CARTÓN BACK UP CANASTILLA GRIS- P3 0 1
[CAJA INDUSTRIAL 16” ROTATIVA] 16”. Lamina Troquelada. 0 12
[CAJA INDUSTRIAL 24” ROTATIVA COMPLETA] 24”. Lamina Troquelada. 0 3
[CAJA INDUSTRIAL 34” ROTATIVA] 34”. Lamina Troquelada. 0 11
[CAJA INDUSTRIAL 48” CON SELLO (PP)] 48”. Lamina Troquelada. 0 7
[CAJA MCV] Toyota. MCV. Caja Troquelada. 0 2
[CAJA RSC DE KIT REFLEX] 857. Reflex. Caja. 0 1
[CAJA RSC SHOCK TOWER] Shock Tower. Caja. 0 2
[CAJA RSC TGTX] TGTX. Caja RSC. 0 1
[CELDA 955061] 955061. Celda Troquelada. 0 6
[Celda Audi coupe] 18892. Coupe. Celda Troquelada. 0 3
[CELDA AUDI Q5] 14096. Audi Q5. Celda Troquelada. 0 10
[CELDA CON MICRO CORUUGAD O EN 32 PORTA ETIQUETA] TR13777 KIT TGTX. Caja + Celda 0 1
[CELDA GM177] 14100. GM177. Celda Troquelada. 0 9
[CELDA VW CHATTANOOGA] Chattanooga. St3. Celda Troquelada. 0 1
[CELL C] 60% Backframe. Separador con Doblez. 0 1
[CHAROLA 955061] 955061. Charola Troquelada. 0 5
[Charola audi coupe] 18890. Coupe. Charola Troquelada. 0 2
[CHAROLA AUDI Q5] 14128. Audi Q5. Charola Troquelada. 0 5
[CHAROLA GM177] 14131. GM177. Charola Troquelada. 0 5
[CHAROLA VW CHATTANOOGA] Chattanooga. St1 y St3. Charola Troquelada. 0 5
[Console cell] Console Lower. Celda Armada. 0 1
[D - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. D. Pieza. 0 3
[DIVISOR AUDI Q5] 14234. Audi Q5. Divisor Troquelado. 0 4
[DIVISOR CON DOBLEZ VW CHATTANOOGA] Chattanooga. St1 y St3. Divisor Troquelado. 0 4
[DIVISOR GM177] 14238. GM177. Divisor. 0 5
[DIVISOR REFLEX] 857. Reflex. Divisor. 0 1
[DIVISOR ZIGZAG VW CHATTANOOGA] Chattanooga. St1 y St3. Zig Zag Troquelado. 0 4
[E - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. E. Pieza. 0 2
[F - CELDA SUDAFRICA BMW G01 LCI] Sudáfrica. F. Pieza. 0 3
[HSC P702 ICP] 17215. P558. P702. CD539. ICP. Caja HSC. Pieza. 0 4
[INSERTO 241B EXPORT] 14308. 241B. Export. Inserto. 0 2
[Inserto Nextracker 3.0] Nextracker. 2.0. Damper. Inserto. 0 4
[INSERTO SOLARES] 143907. Solares. Inserto Troquelada. 0 1
[MITAD DE CUELLO SHOCK TOWER] Shock Tower. Mitad Cuello. 0 1
[MQ4A-Dunnage-part2] Kia. Inserto. Pieza. 0 3
[MQ4A-Dunnage-tray] Kia. Charola. Pieza. 0 3
[N61506396 CAJA] N61506396. Caja. 0 2
[N61506396 SEPARADOR] N61506396. Separador. 0 1
[N61506729 SEPARADOR] N61506729. Kit. Separador. 0 1
[N61506747 CAJA] N61506747. Kit. Caja. 0 3
[N61506747 TAPA] N61506747. Kit. Tapa. 0 2
[NEXTRACKER 2.0 DAMPER CUELLO] 18976. Nextracker. 2.0. Damper. Cuello, 0 2
[NEXTRACKER 2.0 DAMPER TAPA DE COROPLAST] Nextracker. 2.0. Damper. Tapa de Coroplast. 0 2
[PTN.WS IP 60 CELL IBT] Y0199489 PTN.WS IP 60 CELL IBT 0 1
[REJILLA DE 16X PARA PIVOT DE TESLA PARA PROCESO DE MTM A PPG] CELDA PIVOTE CONTENEDOR RETORNABLE 0 1
[SEAT BACK CAJA] Seat Back. Caja HSC 1/2 0 2
[SEAT BACK CELDADO] Seat Back. Celda Armada. 0 1
[SEPARADOR 41” X 44” PARA PIVOTE Y SEAT BACK DE MTM A PPG] SEPARADOR PIVOTE CONTENEDOR RETORNABLE 0 1
[SEPARADOR MOTORGEAR] Motorgear. Separador para Celdas. 0 1
[TAPA 695] N61506695. Tapa. 0 1
[TAPA AVANAZAR] Avanzar. Tapa. Pieza. 0 2
[TESLA XDA90 CELDA A] XDA90. A. Pieza. 0 3
[TESLA XDA90 CELDA B] XDA90. B. Pieza. 0 1
[TESLA XDA90 CHAROLA SUAJADA] XDA90. Charola. Pieza. 0 2
[TMC 050 - RSC] Console lower - TMC 050 0 1
[TMC 095] 19162. Modelo Y. TMC095. Front. Caja. 0 2
[TMC XXX] Armrest. Caja RSC. 0 1
[TR11910 CHAROLA C/2 DIV #20 SMOOTH C/32 CAVIDADES] TR11910. U725. DMS. ITB. Charola con ITB. 0 3
[TR12438 TAPA ICP 539 TAPA 2415-2 EN CPARTÓN SENCILLO CORRUGADO] 18840. CD539. Tapa. 0 1
[TR12440 TAPA P558] 18842. P558. Tapa. 0 1
[TR13776 CAJA RSC CK 44 ECT C/ PORTA ETIQUETA] TR13776. Caja con Porta Etiqueta. 0 1

Gráficos de datos cualitativos y cuantitativos

#Datos cualitativos

barplot(prop.table(table(base3$Producto)),col=c("pink","purple","yellow","orange","red","grey","green","black","white"),main="Productos", ylab ="Frecuencias",las=1)

Importar base de datos Merma

#file.choose()
datos <- read.csv("/Users/andreapaolasosa/Desktop/FORM - Merma.csv")

Entender base de datos

summary(datos)
##     Fecha               Mes               Kilos          
##  Length:60          Length:60          Length:60         
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character

1.¿Cuántas variables y cuántos registros tiene la base de datos?

La base tiene 60 registros y 3 variables

str(datos)
## 'data.frame':    60 obs. of  3 variables:
##  $ Fecha: chr  "11/01/22" "11/01/22" "22/01/22" "22/01/22" ...
##  $ Mes  : chr  "ENERO" "ENERO" "ENERO" "ENERO" ...
##  $ Kilos: chr  "5080" "3810" "2990" "2680" ...
#install.packages("psych")
#library(psych)

2. Aplica al menos 2 tecnicas de limpieza de base de datos y explicalas brevemente, ¿Porqué realizaste estas tecnicas?

#Tecnica 1. Remover valores irrelevantes Eliminar columnas

datos2 <- datos
datos2 <- subset(datos2, select = -c (Fecha)) 

3.Clasifica cada variable en cualitativa, cuantitativa discreta o cuantitativa continua.

Variable<-c("Mes","Kilos")
Type<-c("Cuantitativo (discreto)","Cuantitativo (discreto)")
table<-data.frame(Variable,Type)
knitr::kable(table)
Variable Type
Mes Cuantitativo (discreto)
Kilos Cuantitativo (discreto)

4. Elige la escala de medición de cada variable.

Variable<-c("Mes","Kilos")
Type<-c("Cuantitativo (discreto)","Cuantitativo (discreto)")
Escala_de_Medición <- c("Mes","Peso")
table<-data.frame(Variable,Type)
knitr::kable(table)
Variable Type
Mes Cuantitativo (discreto)
Kilos Cuantitativo (discreto)

Reflexion

Mediante la actividad realizada se pudo obtener un mejor analisis acerca de las diferentes areas de la empresa FORM. A raiz de los resultados se puede realizar una mejor interpretacion para la creacion de nuevas estrategias.

LS0tCnRpdGxlOiA8c3BhbiBzdHlsZT0iQ29sb3I6b3JhbmdlIj4gQWN0aXZpZGFkIFI1CmF1dGhvcjogIkFuZHJlYSAgUGFvbGEgU29zYSBBMDA4MjczNTkiCmRhdGU6ICIyMDIyLTA5LTI4IgpvdXRwdXQ6CiAgIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KIyBJbXBvcnRhciBiYXNlIGRlIGRhdG9zIFByb2R1Y2Npb24gZGUgY2FydG9uCmBgYHtyfQojZmlsZS5jaG9vc2UoKQpiZCA8LSByZWFkLmNzdigiL1VzZXJzL2FuZHJlYXBhb2xhc29zYS9EZXNrdG9wL3Byb2R1Y2Npb25hZ29zdG8uY3N2IikKYGBgCgojIyMgRW50ZW5kZXIgYmFzZSBkZSBkYXRvcwpgYGB7cn0Kc3VtbWFyeShiZCkKYGBgCgojIyMgKjEuwr9DdcOhbnRhcyB2YXJpYWJsZXMgeSBjdcOhbnRvcyByZWdpc3Ryb3MgdGllbmUgbGEgYmFzZSBkZSBkYXRvcz8qCiMjIyBMYSBiYXNlIGN1ZW50YSBjb24gMjc1MSByZWdpc3Ryb3MgeSAxOCB2YXJpYWJsZXMKYGBge3J9CnN0cihiZCkKI2luc3RhbGwucGFja2FnZXMoInBzeWNoIikKI2xpYnJhcnkocHN5Y2gpCmBgYAoKIyMjICoyLiBBcGxpY2EgYWwgbWVub3MgMiB0ZWNuaWNhcyBkZSBsaW1waWV6YSBkZSBiYXNlIGRlIGRhdG9zIHkgZXhwbGljYWxhcyBicmV2ZW1lbnRlLCDCv1BvcnF1w6kgcmVhbGl6YXN0ZSBlc3RhcyB0ZWNuaWNhcz8qCgojIyMjIFRlY25pY2EgMS4gIFJlbW92ZXIgdmFsb3JlcyBpcnJlbGV2YW50ZXMKRWxpbWluYXIgY29sdW1uYXMgcXVlIG5vIGFwb3J0YW4gaW5mb3JtYWNpb24gdmFsaW9zYSBhbCBhbmFsaXNpcyBkZSBlc3RhIG1hbmVyYSBub3MgcXVlZGFtb3MgY29uIGxhIGluZm9ybWFjaW9uIGRlIG1heW9yIHJlbGV2YW5jaWEuCmBgYHtyfQpiZDEgPC0gYmQKYmQxPC1zdWJzZXQoYmQxLHNlbGVjdD0tYyhOby4sSUQuRk9STSxQUk9EVUNUTyxYLEhSLi5GSU4sRVNUQUNJT04uQVJSQU5RVUUsSU5JQ0lPLlNFUC5VUCxGSU4uSU5JQ0lPLkRFLlNFUC5VUCxJTklDSU8uZGUuUFJPQ0VTTyxGSU4uZGUuUFJPQ0VTTyxUSUVNUE8uQ0FMSURBRCxUSUVNUE8uTUFURVJJQUxFUyxNRVJNQVMuTWFxdWluYXMuKSkKc3RyKGJkMSkKYGBgCgojIyMjIFRlY25pY2EgNC4gQ29udmVydGlyIHRpcG9zIGRlIGRhdG9zCkNvbnZlcnRpciBkZSBjYXJhY3RlciBhIE4vQSBwYXJhIHBvZGVyIGVsaW1pbmFyIGxvcyBlc3BhY2lvcyBlbiBibGFuY28gc2luIGRhdG9zCmBgYHtyfQpiZDIgPC0gYmQxCmJkMiRUTU8uLk1JTi4gPC0gc3Vic3RyKGJkMiRUTU8uLk1JTi4sIHN0YXJ0ID0gMSwgc3RvcCA9IDIpCiN0aWJibGUoYmQyKSAgCmJkMiRUTU8uLk1JTi4gPC0gYXMuaW50ZWdlcihiZDIkVE1PLi5NSU4uKQpzdHIoYmQyKSAgCmBgYAoKYGBge3J9CmJkMyA8LSBiZDIKYmQzJFBJRVpBUy5QUk9HLiA8LSBzdWJzdHIoYmQzJFBJRVpBUy5QUk9HLiwgc3RhcnQgPSAxLCBzdG9wID0gMikKI3RpYmJsZShiZDMpICAKYmQzJFBJRVpBUy5QUk9HLiA8LSBhcy5pbnRlZ2VyKGJkMyRQSUVaQVMuUFJPRy4pCnN0cihiZDMpIApgYGAKCmBgYHtyfQpiZDQgPC0gYmQzCmJkNCRMYW1pbmFzLnByb2Nlc2FkYXMgPC0gc3Vic3RyKGJkNCRMYW1pbmFzLnByb2Nlc2FkYXMsIHN0YXJ0ID0gMSwgc3RvcCA9IDIpCiN0aWJibGUoYmQ0KSAgCmJkNCRMYW1pbmFzLnByb2Nlc2FkYXMgPC0gYXMuaW50ZWdlcihiZDQkTGFtaW5hcy5wcm9jZXNhZGFzKQpzdHIoYmQ0KQpgYGAKCiMjIyMgVGVjbmljYSA1LiBWYWxvcmVzIGZhbHRhbnRlcwpgYGB7cn0KYmQ1IDwtIGJkNApiZDUkVE1PLi5NSU4uW2lzLm5hKGJkNCRUTU8uLk1JTi4pXTwtbWVhbihiZDUkVE1PLi5NSU4uLCBuYS5ybSA9IFRSVUUpCnN1bW1hcnkgKGJkNSkKYGBgCgojIyMjIFRlY25pY2EgNS4gVmFsb3JlcyBmYWx0YW50ZXMKUmVlbXBsYXphciBjZXJvIGNvbiBOL0EgcGFyYSBlbGltaW5hciB2YWxvcmVzIGlubmVjZXNhcmlvcy4KYGBge3J9CmJkNiA8LSBiZDUKYmQ2JExhbWluYXMucHJvY2VzYWRhc1tiZDYkTGFtaW5hcy5wcm9jZXNhZGFzIDwgMV08LSBOQQpzdW1tYXJ5IChiZDYpCmBgYAoKIyMjIyBUZWNuaWNhIDUuIFZhbG9yZXMgZmFsdGFudGVzCkJvcnJhciB0b2RvcyBsb3MgcmVnaXN0cm9zIE5BIGRlIHVuYSB0YWJsYSBwYXJhIHRlbmVyIHVuYSBiYXNlIGRlIGRhdG9zIHByZWNpc2EgeSBubyBjb250YWJpbGl6YXIgZWwgZGlhIHF1ZSBubyBodWJvIHByb2R1Y2Npb24KYGBge3J9CmJkNyA8LSBiZDYKYmQ3IDwtIG5hLm9taXQoYmQ3KSAgICAKc3RyKGJkNykKYGBgCgojIyMgKjMuQ2xhc2lmaWNhIGNhZGEgdmFyaWFibGUgZW4gY3VhbGl0YXRpdmEsIGN1YW50aXRhdGl2YSBkaXNjcmV0YSBvIGN1YW50aXRhdGl2YSBjb250aW51YS4qCmBgYHtyfQpWYXJpYWJsZTwtYygiRmVjaGEiLCJDTElFTlRFIiwiUElFWkFTLlBST0ciLCJUTU8uLk1JTi4iLCJMYW1pbmFzLnByb2Nlc2FkYXMiKQpUeXBlPC1jKCJDdWFudGl0YXRpdmEoRGlzY3JldGEpIiwiQ3VhbGl0YXRpdmEiLCAiQ3VhbnRpdGF0aXZhKERpc2NyZXRhKSIsICJDdWFudGl0YXRpdmEoRGlzY3JldGEpIiwgIkN1YW50aXRhdGl2YShEaXNjcmV0YSkiKQp0YWJsZTwtZGF0YS5mcmFtZShWYXJpYWJsZSxUeXBlKQprbml0cjo6a2FibGUodGFibGUpCmBgYAoKIyMjICo0LiBFbGlnZSBsYSBlc2NhbGEgZGUgbWVkaWNpw7NuIGRlIGNhZGEgdmFyaWFibGUuKgpgYGB7cn0KVmFyaWFibGU8LWMoIkZlY2hhIiwiQ0xJRU5URSIsIlBJRVpBUy5QUk9HIiwiVE1PLi5NSU4uIiwiTGFtaW5hcy5wcm9jZXNhZGFzIikKVHlwZTwtYygiQ3VhbnRpdGF0aXZhKERpc2NyZXRhKSIsIkN1YWxpdGF0aXZhIiwgIkN1YW50aXRhdGl2YShEaXNjcmV0YSkiLCAiQ3VhbnRpdGF0aXZhKERpc2NyZXRhKSIsICJDdWFudGl0YXRpdmEoRGlzY3JldGEpIikKRXNjYWxhX2RlX01lZGljacOzbiA8LSBjKCJGZWNoYSIsIkVtcHJlc2EiLCJOdW1lcm8gZGUgcHJvZHVjY2lvbiIsICJNaW51dG9zIiwiU29icmFudGUiKQp0YWJsZTwtZGF0YS5mcmFtZShWYXJpYWJsZSxUeXBlKQprbml0cjo6a2FibGUodGFibGUpCmBgYAoKIyMjICo1IFJlYWxpemFyIHVuIGFuw6FsaXNpcyBlc3RhZMOtc3RpY28gZGVzY3JpcHRpdm8gZW4gZWwgcXVlIGxvZ3JlcyBkZXN0YWNhciBlbCBjb25qdW50byBkZSBkYXRvcywgcXVlIGFwb3lhbiBhIGxhIGVtcHJlc2EgYSBtZWpvcmFyIHN1IG9wZXJhY2nDs24uKgojIyMgVGFibGFzIGNydXphZGFzCmBgYHtyfQpjcnV6YWRhMTwtdGFibGUoYmQ3JEZlY2hhLGJkNyRQSUVaQVMuUFJPRy4pCmtuaXRyOjprYWJsZShjcnV6YWRhMSkKCmNydXphZGEyPC10YWJsZShiZDckTGFtaW5hcy5wcm9jZXNhZGFzLGJkNyRUTU8uLk1JTi4pCmtuaXRyOjprYWJsZShjcnV6YWRhMikKYGBgCgojIyMgR3LDoWZpY29zIGRlIGRhdG9zIGN1YWxpdGF0aXZvcyB5IGN1YW50aXRhdGl2b3MKRGF0b3MgY3VhbGl0YXRpdm9zCmBgYHtyfQpiYXJwbG90KHByb3AudGFibGUodGFibGUoYmQ3JExhbWluYXMucHJvY2VzYWRhcykpLGNvbD1jKCJwaW5rIiwieWVsbG93IiwicmVkIiwiZ3JlZW4iKSxtYWluPSJGYWJyaWNhbnRlIHBvciBlc3RhZG8iLCB5bGFiID0iRnJlY3VlbmNpYXMiLGxhcz0xKQpwaWUocHJvcC50YWJsZSh0YWJsZShiZDckQ0xJRU5URSkpLGNvbD1jKCJwaW5rIiwiYmx1ZSIsInllbGxvdyIsIm9yYW5nZSIsInJlZCIsImdyZXkiLCJncmVlbiIsImJsYWNrIiwid2hpdGUiKSxtYWluPSJFbXByZXNhIiwgeWxhYiA9IkZyZWN1ZW5jaWFzIixsYXM9MSkKYGBgCgojIyMgR3LDoWZpY29zIGRlIGRpc3BlcnNpw7NuCmBgYHtyfQpwbG90KGJkNyRUTU8uLk1JTi4sIHhsYWIgPSAiUHJvY2VzbyBkZSBsYW1pbmEiLCB5bGFiID0gIlRpZW1wbyIsIG1haW4gPSAiVGllbXBvIHBvciBMYW1pbmEiICkKYGBgCgojIEltcG9ydGFyIGJhc2UgZGUgZGF0b3MgU2NyYXAKYGBge3J9CiNmaWxlLmNob29zZSgpCmJhc2UgPC0gcmVhZC5jc3YoIi9Vc2Vycy9hbmRyZWFwYW9sYXNvc2EvRGVza3RvcC9GT1JNIC0gU2NyYXAuY3N2IikKYGBgCgojIyMgRW50ZW5kZXIgYmFzZSBkZSBkYXRvcwpgYGB7cn0Kc3VtbWFyeShiYXNlKQpgYGAKCiMjIyAqMS7Cv0N1w6FudGFzIHZhcmlhYmxlcyB5IGN1w6FudG9zIHJlZ2lzdHJvcyB0aWVuZSBsYSBiYXNlIGRlIGRhdG9zPyoKMjUwIHJlZ2lzdHJvcyB5IDggdmFyaWFibGVzCmBgYHtyfQpzdHIoYmFzZSkKI2luc3RhbGwucGFja2FnZXMoInBzeWNoIikKI2xpYnJhcnkocHN5Y2gpCmBgYAoKIyMjICoyLiBBcGxpY2EgYWwgbWVub3MgMiB0ZWNuaWNhcyBkZSBsaW1waWV6YSBkZSBiYXNlIGRlIGRhdG9zIAojVGVjbmljYSAxLiBSZW1vdmVyIHZhbG9yZXMgaXJyZWxldmFudGVzCkVsaW1pbmFyIGNvbHVtbmFzCmBgYHtyfQpiYXNlMiA8LSBiYXNlCmJhc2UyIDwtIHN1YnNldChiYXNlMiwgc2VsZWN0ID0gLWMgKFJlZmVyZW5jaWEsVW5pZGFkLmRlLm1lZGlkYSkpIApgYGAKCiNUZWNuaWNhIDEuIFJlbW92ZXIgdmFsb3JlcyBpcnJlbGV2YW50ZXMKRWxpbWluYXIgcmVuZ2xvbmVzCmBgYHtyfQpiYXNlMyA8LSBiYXNlMgpiYXNlMyA8LSBiYXNlM1tiYXNlMyRDYW50aWRhZD4wLF0gIApzdW1tYXJ5IChiYXNlMykKCmBgYAoKIyMjICozLkNsYXNpZmljYSBjYWRhIHZhcmlhYmxlIGVuIGN1YWxpdGF0aXZhLCBjdWFudGl0YXRpdmEgZGlzY3JldGEgbyBjdWFudGl0YXRpdmEgY29udGludWEuKgpgYGB7cn0KVmFyaWFibGU8LWMoIkZlY2hhIiwiUHJvZHVjdG8iLCJDYW50aWRhZCIsIlViaWNhY2nDs24uZGUub3JpZ2VuIiwiVWJpY2FjacOzbi5kZS5kZXNlY2hvIiwiRXN0YWRvIikKVHlwZTwtYygiQ3VhbnRpdGF0aXZhKERpc2NyZXRhKSIsIkN1YWxpdGF0aXZhIiwgIkN1YWxpdGF0aXZhIiwgIkN1YWxpdGF0aXZhIiwgIkN1YWxpdGF0aXZhIiwiQ3VhbGl0YXRpdmEiKQp0YWJsZTwtZGF0YS5mcmFtZShWYXJpYWJsZSxUeXBlKQprbml0cjo6a2FibGUodGFibGUpCmBgYAoKIyMjICo0LiBFbGlnZSBsYSBlc2NhbGEgZGUgbWVkaWNpw7NuIGRlIGNhZGEgdmFyaWFibGUuKiAKYGBge3J9ClZhcmlhYmxlMjwtYygiRmVjaGEiLCJQcm9kdWN0byIsIkNhbnRpZGFkIiwiVWJpY2FjacOzbi5kZS5vcmlnZW4iLCJVYmljYWNpw7NuLmRlLmRlc2VjaG8iLCJFc3RhZG8iKQpUeXBlPC1jKCJDdWFudGl0YXRpdmEoRGlzY3JldGEpIiwiQ3VhbGl0YXRpdmEiLCAiQ3VhbGl0YXRpdmEiLCAiQ3VhbGl0YXRpdmEiLCAiQ3VhbGl0YXRpdmEiLCJDdWFsaXRhdGl2YSIpCkVzY2FsYV9kZV9NZWRpY2nDs24yIDwtIGMoIkZlY2hhIiwiUHJvZHVjdG8iLCJOdW1lcm8gZGUgcHJvZHVjY2lvbiIsICJPcmlnZW4iLCJVYmljYWNpb24iLCJDb21wbGV0YWRvIikKdGFibGUyPC1kYXRhLmZyYW1lKFZhcmlhYmxlLFR5cGUpCmtuaXRyOjprYWJsZSh0YWJsZTIpCmBgYAoKIyMjICo1IFJlYWxpemFyIHVuIGFuw6FsaXNpcyBlc3RhZMOtc3RpY28gZGVzY3JpcHRpdm8gZW4gZWwgcXVlIGxvZ3JlcyBkZXN0YWNhciBlbCBjb25qdW50byBkZSBkYXRvcywgcXVlIGFwb3lhbiBhIGxhIGVtcHJlc2EgYSBtZWpvcmFyIHN1IG9wZXJhY2nDs24uKgojIyMgVGFibGFzIGNydXphZGFzCmBgYHtyfQpjcnV6YWRhMzwtdGFibGUoYmFzZTMkQ2FudGlkYWQsYmFzZTMkRXN0YWRvKQprbml0cjo6a2FibGUoY3J1emFkYTMpCmBgYAoKYGBge3J9CmNydXphZGE0PC10YWJsZShiYXNlMyRQcm9kdWN0byxiYXNlMyRVYmljYWNpw7NuLmRlLmRlc2VjaG8pCmtuaXRyOjprYWJsZShjcnV6YWRhNCkKYGBgCgojIyMgR3LDoWZpY29zIGRlIGRhdG9zIGN1YWxpdGF0aXZvcyB5IGN1YW50aXRhdGl2b3MKI0RhdG9zIGN1YWxpdGF0aXZvcwpgYGB7cn0KYmFycGxvdChwcm9wLnRhYmxlKHRhYmxlKGJhc2UzJFByb2R1Y3RvKSksY29sPWMoInBpbmsiLCJwdXJwbGUiLCJ5ZWxsb3ciLCJvcmFuZ2UiLCJyZWQiLCJncmV5IiwiZ3JlZW4iLCJibGFjayIsIndoaXRlIiksbWFpbj0iUHJvZHVjdG9zIiwgeWxhYiA9IkZyZWN1ZW5jaWFzIixsYXM9MSkKYGBgCgojIEltcG9ydGFyIGJhc2UgZGUgZGF0b3MgTWVybWEKYGBge3J9CiNmaWxlLmNob29zZSgpCmRhdG9zIDwtIHJlYWQuY3N2KCIvVXNlcnMvYW5kcmVhcGFvbGFzb3NhL0Rlc2t0b3AvRk9STSAtIE1lcm1hLmNzdiIpCmBgYAoKIyMjIEVudGVuZGVyIGJhc2UgZGUgZGF0b3MKYGBge3J9CnN1bW1hcnkoZGF0b3MpCmBgYAoKIyMjICoxLsK/Q3XDoW50YXMgdmFyaWFibGVzIHkgY3XDoW50b3MgcmVnaXN0cm9zIHRpZW5lIGxhIGJhc2UgZGUgZGF0b3M/KgpMYSBiYXNlIHRpZW5lIDYwIHJlZ2lzdHJvcyB5IDMgdmFyaWFibGVzCmBgYHtyfQpzdHIoZGF0b3MpCiNpbnN0YWxsLnBhY2thZ2VzKCJwc3ljaCIpCiNsaWJyYXJ5KHBzeWNoKQpgYGAKCiMjIyAqMi4gQXBsaWNhIGFsIG1lbm9zIDIgdGVjbmljYXMgZGUgbGltcGllemEgZGUgYmFzZSBkZSBkYXRvcyB5IGV4cGxpY2FsYXMgYnJldmVtZW50ZSwgwr9Qb3JxdcOpIHJlYWxpemFzdGUgZXN0YXMgdGVjbmljYXM/KgojVGVjbmljYSAxLiBSZW1vdmVyIHZhbG9yZXMgaXJyZWxldmFudGVzCkVsaW1pbmFyIGNvbHVtbmFzCmBgYHtyfQpkYXRvczIgPC0gZGF0b3MKZGF0b3MyIDwtIHN1YnNldChkYXRvczIsIHNlbGVjdCA9IC1jIChGZWNoYSkpIApgYGAKCiMjIyAqMy5DbGFzaWZpY2EgY2FkYSB2YXJpYWJsZSBlbiBjdWFsaXRhdGl2YSwgY3VhbnRpdGF0aXZhIGRpc2NyZXRhIG8gY3VhbnRpdGF0aXZhIGNvbnRpbnVhLioKYGBge3J9ClZhcmlhYmxlPC1jKCJNZXMiLCJLaWxvcyIpClR5cGU8LWMoIkN1YW50aXRhdGl2byAoZGlzY3JldG8pIiwiQ3VhbnRpdGF0aXZvIChkaXNjcmV0bykiKQp0YWJsZTwtZGF0YS5mcmFtZShWYXJpYWJsZSxUeXBlKQprbml0cjo6a2FibGUodGFibGUpCmBgYAoKIyMjICo0LiBFbGlnZSBsYSBlc2NhbGEgZGUgbWVkaWNpw7NuIGRlIGNhZGEgdmFyaWFibGUuKiAKYGBge3J9ClZhcmlhYmxlPC1jKCJNZXMiLCJLaWxvcyIpClR5cGU8LWMoIkN1YW50aXRhdGl2byAoZGlzY3JldG8pIiwiQ3VhbnRpdGF0aXZvIChkaXNjcmV0bykiKQpFc2NhbGFfZGVfTWVkaWNpw7NuIDwtIGMoIk1lcyIsIlBlc28iKQp0YWJsZTwtZGF0YS5mcmFtZShWYXJpYWJsZSxUeXBlKQprbml0cjo6a2FibGUodGFibGUpCmBgYAoKIyMjIFJlZmxleGlvbgpNZWRpYW50ZSBsYSBhY3RpdmlkYWQgcmVhbGl6YWRhIHNlIHB1ZG8gb2J0ZW5lciB1biBtZWpvciBhbmFsaXNpcyAgYWNlcmNhICBkZSBsYXMgZGlmZXJlbnRlcyBhcmVhcyBkZSBsYSBlbXByZXNhIEZPUk0uIEEgcmFpeiBkZSBsb3MgcmVzdWx0YWRvcyBzZSBwdWVkZSByZWFsaXphciAgdW5hIG1lam9yIGludGVycHJldGFjaW9uIHBhcmEgbGEgY3JlYWNpb24gIGRlIG51ZXZhcyBlc3RyYXRlZ2lhcy4KCgo=