Emilio Olvera A01625200

Mayra Campoy Ramos A00226914

Ximena Gutierrez Briseño A00829505

Mariana Ulloa Encinas A01253076

Héctor Javier Villarreal A01570227

Recursos Humanos

Importar las bases de datos

# file.choose()
recursos_humanos <- read.csv("/Users/mayracampoyramos/Desktop/Analisis de Datos Concentracion/recursos_humanos_limpia_buena (1).csv")
summary(recursos_humanos)
##  No..De.Empleado   APELLIDOS            NOMBRE               EDAD      
##  Min.   :  0.00   Length:113         Length:113         Min.   :19.00  
##  1st Qu.:  8.00   Class :character   Class :character   1st Qu.:26.00  
##  Median : 38.00   Mode  :character   Mode  :character   Median :34.00  
##  Mean   : 46.31                                         Mean   :36.29  
##  3rd Qu.: 72.00                                         3rd Qu.:45.00  
##  Max.   :148.00                                         Max.   :73.00  
##     GENERO          FECHA.DE.ALTA           BAJA          ID_PUESTO     
##  Length:113         Length:113         Min.   :0.0000   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:0.0000   1st Qu.: 2.000  
##  Mode  :character   Mode  :character   Median :0.0000   Median : 2.000  
##                                        Mean   :0.3451   Mean   : 6.221  
##                                        3rd Qu.:0.0000   3rd Qu.: 7.000  
##                                        Max.   :3.0000   Max.   :24.000  
##     PUESTO          DEPARTAMENTO       SALARIO.DIARIO.IMSS LUGAR.DE.NACIMIENTO
##  Length:113         Length:113         Min.   :144.4       Length:113         
##  Class :character   Class :character   1st Qu.:176.7       Class :character   
##  Mode  :character   Mode  :character   Median :180.7       Mode  :character   
##                                        Mean   :179.1                          
##                                        3rd Qu.:180.7                          
##                                        Max.   :337.1                          
##      CURP            MUNICIPIO            ESTADO          CODIGO.POSTAL  
##  Length:113         Length:113         Length:113         Min.   :25016  
##  Class :character   Class :character   Class :character   1st Qu.:66640  
##  Mode  :character   Mode  :character   Mode  :character   Median :66646  
##                                                           Mean   :63365  
##                                                           3rd Qu.:66649  
##                                                           Max.   :67493  
##  ESTADO.CIVIL      
##  Length:113        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Observaciones

Analizar los puestos de las bajas.
Analizar si hay mucha diferencia entre los sueldos de los dos diferentes géneros.
Relacionar las bajas con la edad.
Relacionar estado civil con puesto.

Gráfico de dispersión (ggplot):

# install.packages("ggplot2")
library(ggplot2)
ggplot(data=recursos_humanos, mapping = aes(SALARIO.DIARIO.IMSS, EDAD)) + geom_point(aes(color = GENERO)) + theme_bw()

Podemos analizar en esta gráfica que la diferencia entre salarios de los diferentes géneros no es mucha, concluyendo así que FORM no es discriminativo con los sueldos de sus empleados, sin embargo, de esta gráfica tambien podemos destacar que el empleado que más gana es una mujer de 32 años ganando aproximadamente 380 pesos diarios.

Gráfico cuantitativo (Barras de dos variables):

tabla1 <- table(recursos_humanos$BAJA, recursos_humanos$EDAD)
tabla1
##    
##     19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 45
##   0  3  5  6  3  3  1  3  4  1  4  3  3  1  5  4  2  3  1  2  4  4  2  2  2  4
##   3  0  1  1  0  1  0  0  0  2  1  1  0  0  0  0  0  1  0  0  2  0  0  0  0  0
##    
##     46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 67 73
##   0  1  0  1  1  2  2  4  2  2  2  2  1  1  1  1  1  1
##   3  1  1  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0
barplot(tabla1, beside = TRUE, las=1, 
  xlab='Edad', ylab='Bajas de empleados',
  col = c("lightblue", "mistyrose"),
  ylim = c(0, 7))

En este caso podemos observar que los empleados de aproximadamente 19-23 años son los que mas bajas han reportado en FORM.

Gráfico cualitativo (Pay):

table(recursos_humanos$ESTADO.CIVIL)
## 
##      Casado  Divorciado     Soltero Union libre 
##          44           3          46          20
proporciones <- c(44, 3, 46, 20)
etiquetas <- c("Casado", "Divorciado", "Soltero", "Union libre")
pct <- round(proporciones/sum(proporciones)*100)
etiquetas <- paste(etiquetas, pct)
etiquetas <- paste(etiquetas,"%",sep="")
pie(proporciones,labels = etiquetas,
    col=rainbow(length(etiquetas)),
    main="Estado civil de los empleados de FORM")

En esta gráfica de pay podemos observar que la mayor parte de los empleados son solteros con un 41% y casados con un 39%.

table(recursos_humanos$PUESTO)
## 
##       AYUDANTE DE MANTENIMIENTO                AYUDANTE GENERAL 
##                               1                              67 
##                          CHOFER                   CHOFER GESTOR 
##                               4                               1 
##                       COSTURERA            CUSTOMER SERVICE INF 
##                              10                               1 
##                       ENFERMERA                         EXTERNO 
##                               1                               2 
##                          GESTOR            GUARDIA DE SEGURIDAD 
##                               1                               1 
##            INSPECTOR DE CALIDAD                           LIDER 
##                               2                               1 
##                        LIMPIEZA                   MANTENIMIENTO 
##                               1                               1 
##                  MONTACARGUISTA                            MOZO 
##                               1                               1 
## OP. FLEXO-RANURADORA-REFILADORA                 OPERADOR SIERRA 
##                               1                               1 
##                          PINTOR                          RECIBO 
##                               1                               1 
##                       RESIDENTE                        SOLDADOR 
##                               4                               5 
##           SUPERVISOR DE MAQUINA            SUPERVISOR DE PEGADO 
##                               1                               1 
##                     SUPERVISORA 
##                               2
proporciones <- c(1, 67, 4, 1, 10, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 1, 1, 2)
etiquetas <- c("AYUDANTE DE MANTENIMIENTO", "AYUDANTE GENERAL", "CHOFER", "CHOFER GESTOR", "COSTURERA", "CUSTOMER SERVICE INF", "ENFERMERA", "EXTERNO", "GESTOR", "GUARDIA DE SEGURIDAD", "INSPECTOR DE CALIDAD", "LIDER", "LIMPIEZA", "MANTENIMIENTO", "MONTACARGUISTA", "MOZO", "OP. FLEXO-RANURADORA-REFILADORA", "OPERADOR SIERRA", "PINTOR", "RESIDENTE", "SOLDADOR", "SUPERVISOR DE MAQUINA", "SUPERVISOR DE PEGADO", "SUPERVISORA" )
pct <- round(proporciones/sum(proporciones)*100)
etiquetas <- paste(etiquetas, pct)
etiquetas <- paste(etiquetas,"%",sep="")
pie(proporciones,labels = etiquetas,
    col=rainbow(length(etiquetas)),
    main="Puestos de los empleados de FORM")

En esta gráfica de pay podemos observar que el 59% de los empleados son ayudantes generales y el 9% son costureras, siendo los puestos mas cotizados.

Gráfico cuantitativo: (Histograma):

Sueldo <-  recursos_humanos$SALARIO.DIARIO.IMSS   
hist(Sueldo, main = "Sueldo de los empleados", ylab = "# de empleados", col = "lightblue")

En esta gráfica podemos observar fácilmente como la mayor parte de los empleados gananmenos de 200 pesos al día.

# Para realizar la siguiente tabla y gráfico, fue necesario hacer una nueva columna en la base de datos: "ID_PUESTO" con el objetivo de tenerlo como variable cuantitativa.
#En este caso: 
#1) "AYUDANTE DE MANTENIMIENTO"
#2) "AYUDANTE GENERAL"
#3) "CHOFER"
#4) "CHOFER GESTOR"
#5) "COSTURERA"
#6) "CUSTOMER SERVICE INF"
#7) "ENFERMERA"
#8) "EXTERNO"
#9) "GESTOR"
#10) "GUARDIA DE SEGURIDAD"
#11) "INSPECTOR DE CALIDAD"
#12) "LIDER"
#13) "LIMPIEZA"
#14) "MANTENIMIENTO"
#15) "MONTACARGUISTA"
#16) "MOZO"
#17) "OP. FLEXO-RANURADORA-REFILADORA"
#18) "OPERADOR SIERRA"
#19) "PINTOR"
#20) "RESIDENTE"
#21) "SOLDADOR"
#22) "SUPERVISOR DE MAQUINA"
#23) "SUPERVISOR DE PEGADO"
#24) "SUPERVISORA" 

Gráfico cuantitativo gráfico de dispersión:

plot(recursos_humanos$ID_PUESTO, recursos_humanos$SALARIO.DIARIO.IMSS, main = "Salario por puesto", xlab = "Id de Puesto", ylab = "Salario Diario", pch = 21, col= "blue", axes = FALSE)
axis(1, at = 1:24)
axis(2, at = 100:400)

mean(recursos_humanos$SALARIO.DIARIO.IMSS)
## [1] 179.1261

En este gráfico podemos observar que casi todos los puestos tienen un promedio de salario de 179.121, sin embargo, los puestos peores pagados son “Ayudante General”, “Costurera”, “Externo” y “Lider”.

Tabla de frecuencia:

puesto <- c("1", "2", "2", "2", "2", "2", "2","2", "2", "2", "2", "2", "2", "2", "2", "2", "2","2", "2", "2", "2", "2", "2", "2", "2", "2", "2","2", "2", "2", "2", "2", "2", "2", "2", "2", "2","2", "2", "2", "2", "2", "2", "2", "2", "2", "2","2", "2", "2", "2", "2", "2", "2", "2", "2", "2","2", "2", "2", "2","2", "2", "2","2", "2", "2", "2","3", "3", "3", "3", "4", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5","6", "7", "8", "8", "9", "10", "11", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "21","21", "21", "22", "22", "22", "22", "22","23", "23", "24", "24")
bajas <- c("0", "0", "0", "0", "0","0", "0", "0", "0", "0","0", "0", "0", "0", "0", "0", "0", "0", "0", "0","0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "3", "3", "3", "3", "3", "3", "0", "3", "0", "3", "3", "0", "0", "0", "0", "0","0", "0", "0", "0", "0", "0", "0", "0", "0", "0","0", "0", "0", "0", "0","0", "0","3", "3", "3", "0", "0", "0", "0", "0", "0","0", "0", "0", "0", "0", "0", "0", "0", "0", "0","0", "0", "0", "0", "0", "0", "0", "0", "0",  "0",  "0",   "0",   "0", "0", "0",   "0",   "0", "0", "0", "0",    "0", "0", "0", "0",  "3", "0", "0",    "0",  "0",  "0", "0")

tabla <- table(bajas, puesto)
margin.table(tabla, 1) #Suma de Bajas: Han habido 13 bajas
## bajas
##   0   3 
## 100  13
margin.table(tabla, 2) #Suma de los tipos de puesto: Hay más puestos del tipo 2 (Ayudante general)
## puesto
##  1 10 11 12 13 14 15 16 17 18 19  2 20 21 22 23 24  3  4  5  6  7  8  9 
##  1  1  2  1  1  1  1  1  1  1  1 67  1  4  5  2  2  4  1 10  1  1  2  1
addmargins(tabla, c(1, 2))
##      puesto
## bajas   1  10  11  12  13  14  15  16  17  18  19   2  20  21  22  23  24   3
##   0     1   1   2   1   1   1   1   1   1   1   1  55   1   4   4   2   2   4
##   3     0   0   0   0   0   0   0   0   0   0   0  12   0   0   1   0   0   0
##   Sum   1   1   2   1   1   1   1   1   1   1   1  67   1   4   5   2   2   4
##      puesto
## bajas   4   5   6   7   8   9 Sum
##   0     1  10   1   1   2   1 100
##   3     0   0   0   0   0   0  13
##   Sum   1  10   1   1   2   1 113
knitr::kable(tabla)
1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 3 4 5 6 7 8 9
0 1 1 2 1 1 1 1 1 1 1 1 55 1 4 4 2 2 4 1 10 1 1 2 1
3 0 0 0 0 0 0 0 0 0 0 0 12 0 0 1 0 0 0 0 0 0 0 0 0

Con esta tabla podemos observar que han habido 12 bajas del puesto 2: “Ayudante General”, y 1 baja del puesto 22: “Soldador”, lo que significa que ciertos factores como la edad (los más jovenes son los que mas se dan de baja) y el salario que es uno de los peores para el pusto de Ayudante General son vitales cambiar para evitar la rotación en estas áreas.

Propuestas:

1. Realizar un programa de incentivos para los empleados con el objetivo de incrementar su reconocimiento y estancia en la empresa, ofreciendoles mejor sueldo al incrementar su rendimiento (especialmente a los ayudantes generales que son los que han reportado más bajas), o dandoles benficios adicionales como tarjetas de despensa o reconocimientos.

2. Estandarización del proceso de reclutamiento: Se han obsrvado que los empleados que duran menos son los jóvenes ya que son los peores pagados, por lo que se deberían buscar nuevos empleados que sean mayores o debería de haber un incremento de sueldo, pues se ha observado que las variables de género y de estado civil no afectan, deduciendo así que FORM no es una empresa que discrimina, más bien,tiene que mejorar su proceso de selección e incrementar los beneficios dados a los empleados para disminuir la rotación.

Delivery Plan

Importar las bases de datos

# file.choose()
bd <- read.csv("/Users/mayracampoyramos/Desktop/Analisis de Datos Concentracion/Reto/delivery_plan.csv")

summary(bd)
##  CLIENTE.PLANTA       PROYECTO           ID.ODOO              ITEM          
##  Length:231         Length:231         Length:231         Length:231        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##      ENE.22          FEBRERO.22        MARZO.22         ABRIL.22      
##  Min.   :   0.00   Min.   :   0.0   Min.   :   0.0   Min.   :    0.0  
##  1st Qu.:   0.00   1st Qu.:   0.0   1st Qu.:   0.0   1st Qu.:    0.0  
##  Median :   0.00   Median :   0.0   Median :   0.0   Median :    0.0  
##  Mean   :  82.37   Mean   : 103.5   Mean   : 153.9   Mean   :  186.5  
##  3rd Qu.:  26.50   3rd Qu.:   0.0   3rd Qu.:  20.0   3rd Qu.:   24.0  
##  Max.   :3200.00   Max.   :9600.0   Max.   :9600.0   Max.   :16354.0  
##     MAYO.22           JUNIO.22          JULIO.22         AGOSTO.22      
##  Min.   :    0.0   Min.   :    0.0   Min.   :    0.0   Min.   :    0.0  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:    0.0  
##  Median :    0.0   Median :    0.0   Median :    0.0   Median :    0.0  
##  Mean   :  187.6   Mean   :  171.2   Mean   :  316.9   Mean   :  131.5  
##  3rd Qu.:   22.0   3rd Qu.:    1.0   3rd Qu.:   15.5   3rd Qu.:    0.0  
##  Max.   :17665.0   Max.   :11050.0   Max.   :25900.0   Max.   :13200.0  
##  SEPTIEMBRE.22       OCTUBRE.22       NOVIEMBRE.22      DICIEMBRE.22    
##  Min.   :    0.0   Min.   :    0.0   Min.   :  0.000   Min.   :  0.000  
##  1st Qu.:    0.0   1st Qu.:    0.0   1st Qu.:  0.000   1st Qu.:  0.000  
##  Median :    0.0   Median :    0.0   Median :  0.000   Median :  0.000  
##  Mean   :  272.3   Mean   :  120.9   Mean   :  2.113   Mean   :  1.225  
##  3rd Qu.:    0.0   3rd Qu.:    0.0   3rd Qu.:  0.000   3rd Qu.:  0.000  
##  Max.   :29379.0   Max.   :16421.0   Max.   :324.000   Max.   :276.000  
##     ENERO.23          FEBRERO.23    MARZO.23
##  Min.   :  0.0000   Min.   :0    Min.   :0  
##  1st Qu.:  0.0000   1st Qu.:0    1st Qu.:0  
##  Median :  0.0000   Median :0    Median :0  
##  Mean   :  0.5974   Mean   :0    Mean   :0  
##  3rd Qu.:  0.0000   3rd Qu.:0    3rd Qu.:0  
##  Max.   :138.0000   Max.   :0    Max.   :0

Crear Columna

# install.packages("dpylr")
library(plyr)
library(tidyr)

bd1 <- bd
bd1 <- gather(bd1,key = "año", value = "pedidos", 5:16)

aggregate(x=bd1$pedidos,
          by = list(bd1$año),
          FUN= sum)
##          Group.1     x
## 1       ABRIL.22 43080
## 2      AGOSTO.22 30375
## 3   DICIEMBRE.22   283
## 4         ENE.22 19028
## 5     FEBRERO.22 23912
## 6       JULIO.22 73201
## 7       JUNIO.22 39549
## 8       MARZO.22 35559
## 9        MAYO.22 43336
## 10  NOVIEMBRE.22   488
## 11    OCTUBRE.22 27925
## 12 SEPTIEMBRE.22 62912
summary(bd1)
##  CLIENTE.PLANTA       PROYECTO           ID.ODOO              ITEM          
##  Length:2772        Length:2772        Length:2772        Length:2772       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     ENERO.23          FEBRERO.23    MARZO.23     año           
##  Min.   :  0.0000   Min.   :0    Min.   :0   Length:2772       
##  1st Qu.:  0.0000   1st Qu.:0    1st Qu.:0   Class :character  
##  Median :  0.0000   Median :0    Median :0   Mode  :character  
##  Mean   :  0.5974   Mean   :0    Mean   :0                     
##  3rd Qu.:  0.0000   3rd Qu.:0    3rd Qu.:0                     
##  Max.   :138.0000   Max.   :0    Max.   :0                     
##     pedidos       
##  Min.   :    0.0  
##  1st Qu.:    0.0  
##  Median :    0.0  
##  Mean   :  144.2  
##  3rd Qu.:    0.0  
##  Max.   :29379.0

Gráfico cualitativo (Pay):

pie(table(bd1$CLIENTE.PLANTA))

Tabla de frecuencia

bd2 <-bd1
bd2 <- data.frame(bd$ITEM)
bd2
##                                                                                       bd.ITEM
## 1                                                           CABLE SET CAJA BACK UP CANASTILLA
## 2                                                                  Caja intercompañía chica
## 3                                                                        CHAROLA G09 915898  
## 4                                                                              MOTOR GEAR BOX
## 5                                                                          BLOQUEO GAS SPRING
## 6                                                                         INSERTOS CABLE SET 
## 7                                                                            ECU BACKUP HELLA
## 8                                                  ROPACK 45”X48”X34 CON IDENTIFICACIÓN 
## 9                                                                      Y0160815 FLOOR CONSOLE
## 10                                                                   Y0160011 DOOR PANEL REAR
## 11                                                                  Y0160010 DOOR PANEL FRONT
## 12                                            Y0199489 WS IP KIN PTN.WS IP 60 CELL IBT kit 15
## 13                                Y0199488 WS IP BEZEL OC LOWER PTN.WS IP 72 CELL IBT  kit 14
## 14                            Y0194915 BASE CARRIER PTN.WS FC 42C 1BT P2 WS FC 2ND ROW  kit 5
## 15                                                                 TAPA PARA CAJA PIELES U625
## 16                                                              CAJA PARA EMPAQUE PIELES U625
## 17                                                 ROPACK 45”X48”X34 CON IDENTIFICACIÓN 
## 18                                                                             CAJA 910B 4WAY
## 19                                      Kit de empaque para seat back LH y RH, incluye tarima
## 20                   Separador de cartón para Seat Back RHy LH. Uso WIP entre Meridian y PPG
## 21                                                               KIT PIVOTE CONTENEDOR CARTON
## 22                                   SEPARADOR 41" X 44" PARA PIVOTE Y SEAT BACK DE MTM A PPG
## 23                               REJILLA DE 16X PARA PIVOT DE TESLA PARA PROCESO DE MTM A PPG
## 24                                                        Separador 41 x 44" Cuadro Pivot/PPG
## 25                                                            780B SDT 120 CAVIDADES Y0264008
## 26                                                           780B SDT 84 CAVIDADES - Y0387031
## 27                                                             PCORR 5MM TOTE(TRAY) TOP RAILS
## 28                                                        Y0363426-CONSOLE END PANEL(124 DUN)
## 29                                                          Y0363424-CONSOLE ARMREST (17 DUN)
## 30                                                           Y0363425-ARMREST OUTER (105 DUN)
## 31                                                           Y0363427-ARMREST INNER (135 DUN)
## 32                                          Y0264007- DUNAGGE 90 CV ROPACK 48X45X42 (166 DUN)
## 33                                           Y0264007- DUNAGGE 90 CV ROPACK 48X45X42 (14 DUN)
## 34                                           DUNNAGE 80 CV - DUNNAGE FC HINGE COVERS(108 DUN)
## 35                                          DUNNAGE 126 CV - DUNNAGE FC ARMREST LATCH(60 DUN)
## 36                                          Y0392179 - DUNNAGE 72 CV ROPACK 45X48X50 (60 DUN)
## 37                                         Y0494836 - DUNNAGE 198 CV ROPACK 45X48X50 (10 DUN)
## 38                                         Y0392180 - DUNNAGE 198 CV ROPACK 45X48X50 (64 DUN)
## 39                                                                               ARMREST J34A
## 40                                                                           WL 74-75 36X30" 
## 41                                                                            WL 74-75 30X28"
## 42                                                                            VW416PA2 30X28"
## 43                                                                             WL 74-75 FRONT
## 44                                                                                 WL 75 REAR
## 45                                                                                 WL 74 REAR
## 46                                                                                  RACKS WIP
## 47                                                                      RACK L233 (200 RACKS)
## 48                                                                                    ARMREST
## 49                                                                              BACKFRAME 60%
## 50                                                                     BACKFRAME 60% - CELL C
## 51                                                                              CONSOLE LOWER
## 52                                          FRT - HEADREST ASY, M3Y 1R TX FIP PVC BLK (FRONT)
## 53                                                  SIDE - Y 2R HEADREST OUTER  BLK TX (REAR)
## 54                                                 CTR - Y 2R 20 HEADREST PUR BLK TX (CENTER)
## 55                                                        LUMBAR - Y 2R 20 LUMBAR BUN  BLK TX
## 56                                                  ARMREST - Y 2R 5S ARMREST ASSEMBLY BLK TX
## 57                                                                                   Y0124099
## 58                                                          MANGAS DUNNAGE RACK CX721 (CX727)
## 59                                                                     ICP539 MICRO CORRUGADO
## 60                                                                     U725 (DMS ALTERNO) ITB
## 61                                                              ICP P702/P558 MICRO CORRUGADO
## 62                    CAJA RSC 36 DK CELDA CON MICRO CORUUGADO EN 32 PORTA ETIQUETA SW RR A/C
## 63              CAJA RSC ECT 36 DK PAD ECT 36 DK TAPA ECT 32 CK PORTA ETIQUETA\nINNER FR SEAT
## 64                                                   KIT Brasil CAJA RSC CK 32 ECT Kit 95-161
## 65  TAPA CARTON KCS 29ECT PA FC 1135X1117X70MM\nTAPA BRASIL - TR6118 95-144 COROLLA 360 FONDO
## 66                                                                                CAJA 95-069
## 67                                                                                CAJA 95-070
## 68                                                            CAJA 95-075 (NUEVO ID: TR13774)
## 69                                                                                CAJA 95-168
## 70                                                                               AVANZAR 660B
## 71                                                                                   6 CELDAS
## 72                                                                                  10 CELDAS
## 73                                                                                   4 CELDAS
## 74                                                                                 MCA330 KIT
## 75                                                                              CLUSTER U725 
## 76                                                     CHAROLA PE 237 12 X 17 X 2.75 PULGADAS
## 77                              CHAROLA PARA LAMINAS DE DIAL, MEDIDAS DE 527MM X 690MM X 80MM
## 78                                                                   CHAROLA GLASS FRONT 920B
## 79                                                                               CHAROLA DIAL
## 80                                                                              WINDOW PLATE 
## 81                                                                     ML4 SET CONCAVE MIRROR
## 82                                                                              DUNNAGE CX430
## 83                                     CHAROLA PLASTICA 4 MM REFORZADA CON ESQUINEROS (HUD 1)
## 84                                     CHAROLA PLASTICA 4 MM REFORZADA CON ESQUINEROS (HUD 2)
## 85                                                                         CAJA #1 COMMON HUD
## 86                                                                         CAJA #2 COMMON HUD
## 87                                                                                CHAROLA TM3
## 88                                                                                CHAROLA 4.2
## 89                                                                     CHAROLA 780B IC SHIELD
## 90                                                                 CHAROLA 780B IC LOWER CASE
## 91                                                                               CHAROLA A24 
## 92                                                                                  TAPA A24 
## 93                                                                   WINDOW PLATE 780B & U554
## 94                                                                              CASE 780B HUD
## 95                                                                        COVER 780B/U554 HUD
## 96                                                                        OUTER CASE U554 HUD
## 97                                                           OUTER CASE U554 HUD ANTIESTATICO
## 98                                                      WINDOW PLATE 780B & U554 ANTIESTATICO
## 99                                                                           ML7 FLAT MIRROR 
## 100                                                                 ML2 LOWERCASE Y MC SHIELD
## 101                                                                        30 AA WINDOW PLATE
## 102                                                                               30 AA OUTER
## 103                                                                                     30 AA
## 104                                                                  RETRABAJO DE 19 CHAROLAS
## 105                                                                                  MCV 115E
## 106                                                                 SOPORTE DE CARTON MCV 115
## 107                                                          DUNNAGE VALVULA MCV 115(894 DUN)
## 108                                                         DUNNAGE HOUSING MCV 115(3354 DUN)
## 109                                                            DUNNAGE PIPE MCV 115(4025 DUN)
## 110                                                                             CHAROLA FPI16
## 111                                                                               CHAROLA B16
## 112                                                       CHAROLA DIAL HONDA ALTERNA CON FOAM
## 113                                                   CAJA EN PLASTICO CORRUGADO ANTIESTATICO
## 114                                                                          CHAROLA DIAL 14 
## 115                                                                           CHAROLA DIAL U7
## 116                                                                           CHAROLA MX15779
## 117                                                                           CHAROLA DIAL CX
## 118                                                                           CHAROLA CID CH2
## 119                                                                               CHAROLA B16
## 120                                                                            TAPA FORTIFLEX
## 121                                                                                  MCV 128E
## 122                                                                                OUTER CASE
## 123                                                                            CONCAVE MIRROR
## 124                                                                             COMPUTER ASSY
## 125                                                                             MIRROR HOLDER
## 126                                                                               KIT CONCAVE
## 127                                                                              CHAROLA 30AA
## 128                                                                 CHAROLA PIPE NUEVO MODELO
## 129                                                                        TAPA COROPLAST MCV
## 130                                                                      CHAROLA WL CCP FRONT
## 131                                                                               TOTES CX430
## 132                                                                     Charola para JL PECP2
## 133                                                       Caja plastica ESD, 14" x 22.5 x 10"
## 134                                                                          PROYECTO PUERTAS
## 135                                                    362388 REINFORCEMENT MCA MP552 PUERTAS
## 136                                                        DUNNAGE ARMREST FRONT/ARMREST REAR
## 137                                                           362718 UPPER REAR MP552 PUERTAS
## 138                                                                        DUNNAGE AMBULANCIA
## 139                                                                             APPLIQUE REAR
## 140                                                                            APPLIQUE FRONT
## 141                                                            363010580 DUNNAGE SHROUD LOWER
## 142                                                            363010580 DUNNAGE SHROUD UPPER
## 143                                                              PATIN PARA MANEJO DE PALLETS
## 144                                                   467.905-59 INSERT 368.3X60X25.4 MM FOAM
## 145                                          467.416-21 COMPARTIMENT INSERT 1132X712X231MM CC
## 146                                 REFACCIONES P1 - COMPARTIMENT INSERT 535X335X221MM CC ESD
## 147                                 REFACCIONES P2 - COMPARTIMENT INSERT 395X275X154MM CC ESD
## 148                                   VC167 595: DUNNAGE EVOLON 100 CON 1 X 13 CV X 4 DUNNAGE
## 149                                              VC167 599: DUNNAGE EVOLON 100 CON 11 X 13 CV
## 150                                               VC167 602: DUNNAGE EVOLON 100 CON 13 X 8 CV
## 151                                                   DUNNAGE EVOLON 100 CON 27 X 5 CAVIDADES
## 152                                                            BOLSA EVOLON 340MM X 745MM GDE
## 153                                                             BOLSA EVOLON  625x255mm    CH
## 154                                                                              CELDAS AQ450
## 155                                                                         SEPARADORES AQ450
## 156                                                                                     AQ450
## 157                                                                                    GMT625
## 158                                                                                CUCURUCHOS
## 159                                                                          MUESTRAS 4 CAJAS
## 160                                                                         DOLLIES METALICOS
## 161                                                                                      ITEM
## 162                                                                   N61506003-SEPARADOR 003
## 163                                                                        N61506004-CAJA 004
## 164                                                                         N61506309-KIT 309
## 165                                                                         N61506310-KIT 310
## 166                                                                         N61506311-KIT 311
## 167                                                                         N61506342-KIT 342
## 168                                                                       N61506378-CELDA 378
## 169                                                                         N61506380-KIT 380
## 170                                                                         N61506391-KIT 391
## 171                                                                         N61506396-KIT 396
## 172                                                                         N61506397-KIT 397
## 173                                                                       N61506405-CELDA 405
## 174                                                                       N61506411-CELDA 411
## 175                                                                       N61506536-CELDA 536
## 176                                                                        N61506549-CAJA 549
## 177                                                                       N61506550-CELDA 550
## 178                                                                        N61506556-CAJA 556
## 179                                                                       N61506558-CELDA 558
## 180                                                                       N61506566-CELDA 566
## 181                                                                        N61506567-CAJA 567
## 182                                                                       N61506569-CELDA 569
## 183                                                                        N61506571-CAJA 571
## 184                                                                       N61506575-CELDA 575
## 185                                                                       N61506576-CELDA 576
## 186                                                                       N61506589-CELDA 589
## 187                                                                       N61506605-CELDA 605
## 188                                                                       N61506611-CELDA 611
## 189                                                                       N61506615-CELDA 615
## 190                                                                        N61506619-CAJA 619
## 191                                                                       N61506622-CELDA 622
## 192                                                                       N61506646-CELDA 646
## 193                                                                        N61506651-CAJA 651
## 194                                                                       N61506660-CELDA 660
## 195                                                                        N61506664-CAJA 664
## 196                                                                     N61506675 - CELDA 675
## 197                                                                      N61506676 - CAJA 676
## 198                                                                       N61506680-CELDA 680
## 199                                                                       N61506682-CELDA 682
## 200                                                                       N61506694-CELDA 694
## 201                                                                         N61506695-KIT 695
## 202                                                                       N61506696-CELDA 696
## 203                                                                        N61506700-CAJA 700
## 204                                                                       N61506704-CELDA 704
## 205                                                                       N61506706-CELDA 706
## 206                                                                        N61506707-CAJA 707
## 207                                                                         N61506718-KIT 718
## 208                                                                        N61506722-CAJA 722
## 209                                                                         N61506726-KIT 726
## 210                                                                         N61506727-KIT 727
## 211                                                                         N61506729-KIT 729
## 212                                                                       N61506735-CELDA 735
## 213                                                                         N61506745-KIT 745
## 214                                                                         N61506746-KIT 746
## 215                                                                         N61506747-KIT 747
## 216                                                                         N61506763-KIT 763
## 217                                                                         N61506764-KIT 764
## 218                                                                        N61506765-CAJA 765
## 219                                                                         N61506768-KIT 768
## 220                                                                        N61506770-CAJA 770
## 221                                                                         N61506773-KIT 773
## 222                                                                       N61506783-CELDA 783
## 223                                                                         N61506784-KIT 784
## 224                                                                         N61506785-KIT 785
## 225                                                                         N61506808-KIT 808
## 226                                                                         N61506809-KIT 809
## 227                                                                        N61506810-CAJA 810
## 228                                                                         N61506844-KIT 844
## 229                                                                      N61506857-KIT REFLEX
## 230                                                                       N61506862-BODY SIDE
## 231                                                                                  U553 KIT

Grafica de Cualitativa

pie(table(bd$CLIENTE.PLANTA))

Grafica de Cuantitativa

table(bd1$año, bd1$pedidos)
##                
##                   0   1   2   3   4   5   6   7   8   9  10  12  13  14  15  16
##   ABRIL.22      158   2   1   0   0   2   0   0   1   0   2   1   0   0   3   1
##   AGOSTO.22     179   0   0   2   1   1   0   0   0   0   0   0   0   0   1   0
##   DICIEMBRE.22  229   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0
##   ENE.22        155   0   1   0   2   1   2   2   0   0   0   0   0   0   4   1
##   FEBRERO.22    176   1   0   1   2   1   1   0   2   0   4   0   0   1   0   1
##   JULIO.22      157   0   1   1   0   6   1   2   0   1   3   0   0   0   1   1
##   JUNIO.22      173   0   1   0   0   3   1   0   0   1   2   0   0   0   2   0
##   MARZO.22      161   0   1   1   0   1   1   0   0   0   1   0   0   1   0   4
##   MAYO.22       161   0   0   1   0   0   1   0   0   0   0   4   1   0   1   2
##   NOVIEMBRE.22  227   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0
##   OCTUBRE.22    216   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0
##   SEPTIEMBRE.22 198   0   0   0   1   4   0   0   0   0   0   1   0   1   1   0
##                
##                  18  19  20  21  22  23  24  25  26  27  28  29  30  32  34  35
##   ABRIL.22        0   0   1   0   0   0   4   1   2   0   0   1   2   1   0   1
##   AGOSTO.22       0   0   1   0   0   0   0   0   0   0   1   0   0   0   0   2
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          0   1   0   1   1   0   0   1   1   1   0   0   3   2   0   1
##   FEBRERO.22      0   0   0   0   0   0   4   0   0   0   0   0   0   0   1   0
##   JULIO.22        0   0   1   0   0   1   3   0   1   0   0   0   1   0   0   0
##   JUNIO.22        0   0   0   0   0   1   2   0   1   0   0   0   1   0   0   0
##   MARZO.22        0   0   3   0   0   0   1   2   0   0   0   0   0   1   0   0
##   MAYO.22         0   0   0   0   3   0   3   1   0   0   1   1   0   0   0   0
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0
##   OCTUBRE.22      0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   SEPTIEMBRE.22   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
##                
##                  36  38  39  40  41  42  43  44  45  47  48  50  52  53  54  55
##   ABRIL.22        4   0   0   0   2   0   0   0   0   0   1   1   0   0   0   0
##   AGOSTO.22       3   1   0   1   0   0   0   1   0   0   0   4   0   1   0   0
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          0   0   1   1   0   1   0   0   1   1   0   3   1   0   0   1
##   FEBRERO.22      2   0   0   1   0   0   2   0   0   0   2   0   0   0   0   1
##   JULIO.22        0   0   1   3   0   1   0   0   0   0   0   1   0   0   0   0
##   JUNIO.22        1   0   1   2   0   1   0   0   0   0   1   2   0   0   0   0
##   MARZO.22        2   0   0   0   0   0   0   0   0   1   2   3   0   0   0   1
##   MAYO.22         1   0   0   1   2   0   0   0   0   0   1   2   0   0   0   0
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   OCTUBRE.22      0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
##   SEPTIEMBRE.22   0   0   0   1   0   0   0   1   0   0   0   1   0   0   1   0
##                
##                  56  58  60  61  64  65  68  70  71  72  74  77  80  83  86  90
##   ABRIL.22        0   0   4   0   0   1   0   0   0   0   0   0   0   0   0   0
##   AGOSTO.22       0   0   1   0   0   0   0   0   0   0   0   0   2   0   0   0
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          0   1   6   0   0   1   0   0   0   0   0   0   0   1   0   0
##   FEBRERO.22      1   0   1   1   0   1   0   1   0   0   0   0   0   0   0   0
##   JULIO.22        0   0   0   1   0   0   0   1   0   0   0   0   1   0   0   0
##   JUNIO.22        0   1   0   0   0   0   0   1   0   1   0   0   1   0   1   0
##   MARZO.22        0   0   3   1   0   0   0   1   1   0   0   0   0   0   0   0
##   MAYO.22         2   0   1   0   2   0   1   1   0   1   0   0   0   0   0   1
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   OCTUBRE.22      0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   SEPTIEMBRE.22   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0
##                
##                  91  96  98  99 100 104 105 106 107 108 114 115 119 120 124 125
##   ABRIL.22        0   0   0   1   1   0   0   1   0   1   0   0   0   1   0   0
##   AGOSTO.22       0   0   0   0   1   0   0   0   0   0   0   1   1   1   0   0
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          0   2   0   0   1   0   0   0   0   0   1   0   0   1   0   1
##   FEBRERO.22      1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   JULIO.22        0   0   1   0   2   0   0   0   1   0   0   0   0   1   0   1
##   JUNIO.22        0   0   0   0   2   0   0   0   0   2   0   0   0   1   0   1
##   MARZO.22        0   0   0   0   1   1   0   0   0   0   0   0   0   3   0   0
##   MAYO.22         0   1   0   0   3   0   1   0   0   0   0   0   0   0   1   0
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
##   OCTUBRE.22      0   0   0   0   1   0   0   0   0   0   0   0   0   1   0   0
##   SEPTIEMBRE.22   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0
##                
##                 126 130 132 136 137 140 141 144 149 150 157 160 162 164 166 168
##   ABRIL.22        0   1   0   0   0   0   0   0   0   1   0   0   0   0   0   0
##   AGOSTO.22       0   0   0   0   0   0   0   1   0   1   0   0   0   0   0   0
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          1   0   0   0   0   1   0   1   0   0   0   0   0   0   0   0
##   FEBRERO.22      0   0   0   1   0   0   0   0   0   0   1   0   0   0   0   0
##   JULIO.22        0   0   0   0   1   0   1   3   0   0   0   0   0   0   0   0
##   JUNIO.22        0   1   0   0   0   0   0   1   0   3   0   0   0   0   0   0
##   MARZO.22        0   0   0   0   0   1   0   0   0   1   0   1   1   1   1   0
##   MAYO.22         0   0   1   0   0   0   0   1   1   2   0   1   0   0   0   1
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   OCTUBRE.22      0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   SEPTIEMBRE.22   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0
##                
##                 169 174 176 180 182 183 184 185 187 192 196 198 200 210 220 230
##   ABRIL.22        0   0   1   0   0   0   0   0   0   0   1   0   2   0   0   0
##   AGOSTO.22       1   1   0   0   0   0   0   1   0   0   0   0   0   0   0   0
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          0   0   0   0   0   1   0   0   1   0   1   1   0   0   0   2
##   FEBRERO.22      0   0   0   0   0   0   0   0   0   0   0   0   1   0   1   0
##   JULIO.22        0   0   0   0   1   0   1   0   0   0   0   0   1   0   0   0
##   JUNIO.22        0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0
##   MARZO.22        0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   0
##   MAYO.22         0   1   0   1   0   0   0   0   0   0   0   0   5   0   0   0
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   OCTUBRE.22      0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0
##   SEPTIEMBRE.22   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##                
##                 240 250 272 276 278 285 286 288 290 293 298 300 302 305 320 324
##   ABRIL.22        0   1   0   0   1   0   0   0   0   0   0   4   0   0   0   0
##   AGOSTO.22       0   0   1   0   0   1   1   0   1   0   0   1   0   0   0   0
##   DICIEMBRE.22    0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          2   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
##   FEBRERO.22      0   1   0   0   0   0   0   1   0   0   0   3   0   0   2   0
##   JULIO.22        0   0   0   0   0   0   0   0   0   2   1   2   0   0   1   0
##   JUNIO.22        1   0   1   0   0   0   0   0   0   1   0   1   0   0   0   0
##   MARZO.22        2   1   0   0   0   0   0   0   0   0   0   4   1   0   0   0
##   MAYO.22         1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
##   OCTUBRE.22      0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
##   SEPTIEMBRE.22   0   0   0   0   0   0   0   0   0   0   0   1   0   1   0   0
##                
##                 330 332 346 350 360 380 390 400 420 422 436 450 464 479 480 485
##   ABRIL.22        1   0   1   0   0   1   0   3   0   0   0   0   0   0   0   0
##   AGOSTO.22       0   0   0   0   1   0   0   2   0   0   0   0   0   0   0   0
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          0   0   0   1   0   0   0   1   0   0   0   0   0   0   1   0
##   FEBRERO.22      0   0   0   0   0   0   1   1   0   0   0   1   0   0   0   0
##   JULIO.22        0   0   0   1   0   0   0   1   0   0   0   0   0   1   0   0
##   JUNIO.22        0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0
##   MARZO.22        0   0   0   0   1   0   0   2   0   0   0   0   0   0   0   1
##   MAYO.22         0   0   0   0   0   0   0   1   0   1   0   0   1   0   0   0
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   OCTUBRE.22      0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
##   SEPTIEMBRE.22   0   1   0   0   0   0   0   2   0   0   0   0   0   0   0   0
##                
##                 500 506 512 529 540 550 570 600 612 630 640 652 700 712 715 720
##   ABRIL.22        1   0   0   0   0   0   0   0   1   0   0   0   1   0   0   0
##   AGOSTO.22       0   0   1   0   0   0   0   0   0   0   0   1   0   1   1   0
##   DICIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   ENE.22          2   1   0   0   0   0   0   1   0   0   0   0   0   0   0   0
##   FEBRERO.22      1   0   0   0   0   0   0   1   0   0   1   0   0   0   0   0
##   JULIO.22        0   0   0   0   1   0   1   0   0   0   0   0   0   0   0   0
##   JUNIO.22        0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0
##   MARZO.22        2   0   0   1   0   0   0   0   1   0   0   0   1   0   0   0
##   MAYO.22         1   0   0   0   0   0   0   2   0   0   0   0   0   0   0   1
##   NOVIEMBRE.22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   OCTUBRE.22      1   0   0   0   0   0   0   1   0   0   0   0   1   0   0   0
##   SEPTIEMBRE.22   0   0   0   0   0   1   0   1   0   0   0   0   0   0   0   0
##                
##                 736 750 800 900 930 945 950 1000 1014 1022 1027 1100 1132 1200
##   ABRIL.22        0   0   0   0   0   0   0    0    0    0    0    1    0    0
##   AGOSTO.22       0   1   0   0   0   0   0    1    0    0    0    0    0    0
##   DICIEMBRE.22    0   0   0   0   0   0   0    0    0    0    0    0    0    0
##   ENE.22          0   0   2   0   0   1   0    0    0    0    0    0    0    1
##   FEBRERO.22      0   0   0   0   0   0   1    0    0    0    0    0    0    0
##   JULIO.22        1   0   0   1   1   0   0    0    0    1    1    0    0    0
##   JUNIO.22        0   1   0   0   0   0   0    2    0    0    0    1    1    0
##   MARZO.22        0   0   0   0   0   0   0    0    1    0    0    0    0    0
##   MAYO.22         0   0   0   1   0   0   0    0    0    0    0    0    0    0
##   NOVIEMBRE.22    0   0   0   0   0   0   0    0    0    0    0    0    0    0
##   OCTUBRE.22      0   0   0   0   0   0   0    0    0    0    0    0    0    1
##   SEPTIEMBRE.22   0   0   1   0   0   0   0    0    0    0    0    0    0    1
##                
##                 1250 1300 1320 1332 1350 1400 1450 1494 1500 1548 1600 1620
##   ABRIL.22         0    0    0    0    1    0    1    0    0    1    0    0
##   AGOSTO.22        0    0    0    0    0    0    0    1    1    0    1    1
##   DICIEMBRE.22     0    0    0    0    0    0    0    0    0    0    0    0
##   ENE.22           0    0    0    0    0    0    0    0    0    0    0    0
##   FEBRERO.22       0    0    0    0    0    0    0    0    0    0    0    0
##   JULIO.22         0    0    1    1    0    1    0    0    0    0    0    0
##   JUNIO.22         0    0    0    1    0    0    0    0    0    0    0    0
##   MARZO.22         0    1    0    0    0    0    0    0    0    1    0    0
##   MAYO.22          1    0    0    0    0    0    0    0    0    0    1    0
##   NOVIEMBRE.22     0    0    0    0    0    0    0    0    0    0    0    0
##   OCTUBRE.22       0    0    0    0    0    0    0    0    1    0    0    0
##   SEPTIEMBRE.22    0    0    0    0    0    0    0    0    0    0    0    0
##                
##                 1632 1700 1900 2000 2100 2200 2300 2304 2325 2400 2450 2500
##   ABRIL.22         0    0    0    0    0    0    0    1    0    0    0    0
##   AGOSTO.22        0    0    1    0    0    0    0    0    0    0    0    0
##   DICIEMBRE.22     0    0    0    0    0    0    0    0    0    0    0    0
##   ENE.22           0    0    0    1    0    1    0    0    0    0    0    0
##   FEBRERO.22       0    0    0    0    2    0    0    0    0    1    0    0
##   JULIO.22         1    0    0    0    0    0    1    0    1    0    1    0
##   JUNIO.22         0    0    0    0    0    0    0    0    1    1    0    0
##   MARZO.22         0    0    0    0    0    0    0    1    0    1    0    0
##   MAYO.22          0    1    0    0    0    0    0    0    0    1    0    0
##   NOVIEMBRE.22     0    0    0    0    0    0    0    0    0    0    0    0
##   OCTUBRE.22       0    0    0    0    0    0    0    0    0    0    0    0
##   SEPTIEMBRE.22    0    0    0    0    0    0    0    0    0    0    1    1
##                
##                 2800 2900 3200 3498 3900 4000 4169 6500 7000 9600 11050 12800
##   ABRIL.22         0    0    0    0    0    1    0    1    0    0     0     0
##   AGOSTO.22        0    0    0    0    0    0    0    0    0    0     0     0
##   DICIEMBRE.22     0    0    0    0    0    0    0    0    0    0     0     0
##   ENE.22           0    0    1    0    0    0    0    0    0    0     0     0
##   FEBRERO.22       0    0    0    0    0    0    0    0    0    1     0     0
##   JULIO.22         0    0    1    0    1    0    0    0    0    0     0     0
##   JUNIO.22         1    0    0    0    0    0    0    0    0    1     1     0
##   MARZO.22         0    0    0    1    0    0    1    0    0    1     0     0
##   MAYO.22          0    0    0    0    0    0    0    0    0    1     0     0
##   NOVIEMBRE.22     0    0    0    0    0    0    0    0    0    0     0     0
##   OCTUBRE.22       0    2    0    0    0    0    0    0    0    0     0     0
##   SEPTIEMBRE.22    0    0    1    0    0    0    0    0    1    0     0     1
##                
##                 13200 16000 16354 16421 17665 25900 29379
##   ABRIL.22          0     0     1     0     0     0     0
##   AGOSTO.22         1     0     0     0     0     0     0
##   DICIEMBRE.22      0     0     0     0     0     0     0
##   ENE.22            0     0     0     0     0     0     0
##   FEBRERO.22        0     0     0     0     0     0     0
##   JULIO.22          0     1     0     0     0     1     0
##   JUNIO.22          0     0     0     0     0     0     0
##   MARZO.22          0     0     0     0     0     0     0
##   MAYO.22           0     0     0     0     1     0     0
##   NOVIEMBRE.22      0     0     0     0     0     0     0
##   OCTUBRE.22        0     0     0     1     0     0     0
##   SEPTIEMBRE.22     0     0     0     0     0     0     1
barplot(table(bd1$año), main = "Total de pedidos por el año 2022", xlab = "año", ylab = "pedidos" )

Gráfico de dispersion

boxplots=subset(bd1,select=-c(pedidos,año))
boxplot(bd1$pedidos, main ="Total de Pedidos 2022")

plot(bd1$pedidos, horizontal= TRUE)
## Warning in plot.window(...): "horizontal" is not a graphical parameter
## Warning in plot.xy(xy, type, ...): "horizontal" is not a graphical parameter
## Warning in axis(side = side, at = at, labels = labels, ...): "horizontal" is not
## a graphical parameter

## Warning in axis(side = side, at = at, labels = labels, ...): "horizontal" is not
## a graphical parameter
## Warning in box(...): "horizontal" is not a graphical parameter
## Warning in title(...): "horizontal" is not a graphical parameter

Propuestas:

Al analizar los datos podemos darnos cuenta que FROM cuenta con 2 clientes que abarcan la mayor cantidad de los pedidos siendo una diferencia altamente significativos. Por lo que se recomienda buscar clientes que puedan anivelar la cantidad de pedidos y darles un trato preferencial VIP al cumplir con ciertos requsitos, para ello sería necesaria crear una comunidad de clientes VIP para darles ciertas ventajas, y de ese modo no depender de la estabilidad de dos clientes unicamente y aumentar la red de clientes VIP con grandes dantidades de pedidos. Asi aumentando las ventas y el rango del segmento de mercado, para igual no nadamas estar dependiendo de dos clientes, sin intentar crear mas clientes fieles que te puedan comprar grandes cantidad y que confien en ti.

Los pedidos durante los años se encuntran similares sin mucha diferencia en cantidades, en los datos se ve que laestabilidad es positivo, pero si no se sigue creciendo la empresa puede quedar estancada, es necesario implementar KPIs donde se pueda medir la frecuencia de los pedidos por clientes y también el incremento de pedidos que se tiene por mes.

Delivery Performance

Importar las bases de datos

# file.choose()
bd <- read.csv("/Users/mayracampoyramos/Desktop/Analisis de Datos Concentracion/Reto/FORM - Delivery Performance.csv")
bd <- na.omit(bd)
summary(bd)
##      Target    Cliente             Vueltas      Plan.arrival   
##  Min.   :1   Length:1440        Min.   :1.00   Min.   : 0.000  
##  1st Qu.:1   Class :character   1st Qu.:1.00   1st Qu.: 0.000  
##  Median :1   Mode  :character   Median :1.50   Median : 4.000  
##  Mean   :1                      Mean   :1.75   Mean   : 6.625  
##  3rd Qu.:1                      3rd Qu.:2.25   3rd Qu.:10.750  
##  Max.   :1                      Max.   :3.00   Max.   :20.000  
##   Real.arrival    Real.departure     Diference            Date          
##  Min.   : 0.000   Min.   : 0.000   Min.   :-14.3500   Length:1440       
##  1st Qu.: 0.000   1st Qu.: 0.000   1st Qu.:  0.0000   Class :character  
##  Median : 0.000   Median : 0.000   Median :  0.0000   Mode  :character  
##  Mean   : 3.823   Mean   : 4.142   Mean   :  0.3155                     
##  3rd Qu.: 8.000   3rd Qu.: 9.000   3rd Qu.:  0.8000                     
##  Max.   :23.500   Max.   :24.500   Max.   : 20.0000
bd2<-bd
bd2 <- subset(bd2, select =-c (Target))

Tabla de frecuencia

table(bd2$Cliente, bd$Vueltas)
##           
##              1   2   3
##   MAGNA    180   0   0
##   MAHLE    180 180 180
##   PRINTEL  180   0   0
##   VARROC   180 180 180
prop.table(table(bd2$Cliente, bd$Vueltas))
##           
##                1     2     3
##   MAGNA    0.125 0.000 0.000
##   MAHLE    0.125 0.125 0.125
##   PRINTEL  0.125 0.000 0.000
##   VARROC   0.125 0.125 0.125

Se elaboro la tabla de frecuencia para ver los datos de los clientes y sus vueltas.

Gráfico de dispersion

# install.packages("ggplot2")
library("ggplot2")
library("tidyverse")
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ readr   2.1.2      ✔ stringr 1.4.1 
## ✔ purrr   0.3.4      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::arrange()   masks plyr::arrange()
## ✖ purrr::compact()   masks plyr::compact()
## ✖ dplyr::count()     masks plyr::count()
## ✖ dplyr::failwith()  masks plyr::failwith()
## ✖ dplyr::filter()    masks stats::filter()
## ✖ dplyr::id()        masks plyr::id()
## ✖ dplyr::lag()       masks stats::lag()
## ✖ dplyr::mutate()    masks plyr::mutate()
## ✖ dplyr::rename()    masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()
ggplot(data = bd, mapping = aes(Cliente, Vueltas)) + geom_point() + theme_bw()

Como se puede observar en este gráfico,podemos ver que los clientes Mahle y Varroc son los que se mantienen igual en cuanto a sus vueltas vueltas son las vueltas que tuvieron que hacer para la entrega.

Grafica de Pay

table(bd2$Cliente)
## 
##    MAGNA    MAHLE PRINTEL    VARROC 
##      180      540      180      540
proporciones <- c(44, 3, 46, 20)
etiquetas <- c("Plan.arrival", "Real.arrival", "Real.departure","Diference")
pct <- round(proporciones/sum(proporciones)*100)
etiquetas <- paste(etiquetas, pct)
etiquetas <- paste(etiquetas,"%",sep="")
pie(proporciones,labels = etiquetas,
    col=rainbow(length(etiquetas)),
    main="Llegadas y Salidas")

Podemos observar como es que esta dividido las variables de salidas para una mejor visualizacion de los datos obtenidos.

Grafica de dispersion

ggplot(data=bd2, mapping = aes(Cliente, Real.arrival)) + geom_point(aes(color = Diference)) + theme_bw()

Podemos observar que entre los 4 clientes, en los colores se puede ver que la mayoria son oscuros.

Al ser oscuros la mayoria de los puntos de dispersion nos da a conocer que no existe mucha diferencia entre la hora de llegada y la hora que se tiene planeada.

Se aprecia algo positivo ya que estan siguiendo un buen protocolo en cuanto a sus tiempos.

Gráfico de dispersión

boxplot(bd2$Diference ~ bd2$Plan.arrival, horizontal = TRUE)

Se puede ver que existen datos negativos dentro del 20, los cuales pertenecen a Mahle y Printel, la cual nos da a conocer que si hay retrasos, lo cual es normal.

Como objetivo de esto se quiere llegar a proponer planes que hagan que estos numeros negativos mejoren para asi mejorar estos puntos negativos que se muestran.

Propuestas:

1. Previa planificación de rutas

2. Uso de tecnologías móviles y en la nube

3. Empoderamiento de los clientes sobre el seguimiento de sus pedidos

4. Seguimiento del producto desde el punto de partida hasta el final

5. Medición y mejora continua de la experiencia de los clientes.

LS0tCnRpdGxlOiA8c3BhbiBzdHlsZSA9ICJjb2xvcjpvcmFuZ2UiPiAiRW50cmVnYWJsZSAyLjMiCmF1dGhvcjogIkVxdWlwbyA0IgpkYXRlOiAiMjAyMi0wOS0yMyIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgo8aW1nIHNyYz0gIi9Vc2Vycy9tYXlyYWNhbXBveXJhbW9zL0Rvd25sb2Fkcy9pbWFnZXMtNC5wbmciPgoKIyMjIyBFbWlsaW8gT2x2ZXJhIEEwMTYyNTIwMAojIyMjIE1heXJhIENhbXBveSBSYW1vcyBBMDAyMjY5MTQKIyMjIyBYaW1lbmEgR3V0aWVycmV6IEJyaXNlw7FvIEEwMDgyOTUwNQojIyMjIE1hcmlhbmEgVWxsb2EgRW5jaW5hcyBBMDEyNTMwNzYKIyMjIyBIw6ljdG9yIEphdmllciBWaWxsYXJyZWFsIEEwMTU3MDIyNwoKIyAqKlJlY3Vyc29zIEh1bWFub3MqKiAKCiMjIyMgSW1wb3J0YXIgbGFzIGJhc2VzIGRlIGRhdG9zCmBgYHtyfQojIGZpbGUuY2hvb3NlKCkKcmVjdXJzb3NfaHVtYW5vcyA8LSByZWFkLmNzdigiL1VzZXJzL21heXJhY2FtcG95cmFtb3MvRGVza3RvcC9BbmFsaXNpcyBkZSBEYXRvcyBDb25jZW50cmFjaW9uL3JlY3Vyc29zX2h1bWFub3NfbGltcGlhX2J1ZW5hICgxKS5jc3YiKQpzdW1tYXJ5KHJlY3Vyc29zX2h1bWFub3MpCmBgYAoKIyMjIyBPYnNlcnZhY2lvbmVzCiMjIyMjIEFuYWxpemFyIGxvcyBwdWVzdG9zIGRlIGxhcyBiYWphcy4KIyMjIyMgQW5hbGl6YXIgc2kgaGF5IG11Y2hhIGRpZmVyZW5jaWEgZW50cmUgbG9zIHN1ZWxkb3MgZGUgbG9zIGRvcyBkaWZlcmVudGVzIGfDqW5lcm9zLgojIyMjIyBSZWxhY2lvbmFyIGxhcyBiYWphcyBjb24gbGEgZWRhZC4KIyMjIyMgUmVsYWNpb25hciBlc3RhZG8gY2l2aWwgY29uIHB1ZXN0by4KCiMjIyAqR3LDoWZpY28gZGUgZGlzcGVyc2nDs24gKGdncGxvdCk6KgpgYGB7cn0KIyBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikKbGlicmFyeShnZ3Bsb3QyKQpnZ3Bsb3QoZGF0YT1yZWN1cnNvc19odW1hbm9zLCBtYXBwaW5nID0gYWVzKFNBTEFSSU8uRElBUklPLklNU1MsIEVEQUQpKSArIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gR0VORVJPKSkgKyB0aGVtZV9idygpCmBgYAoKIyMjIyBQb2RlbW9zIGFuYWxpemFyIGVuIGVzdGEgZ3LDoWZpY2EgcXVlIGxhIGRpZmVyZW5jaWEgZW50cmUgc2FsYXJpb3MgZGUgbG9zIGRpZmVyZW50ZXMgZ8OpbmVyb3Mgbm8gZXMgbXVjaGEsIGNvbmNsdXllbmRvIGFzw60gcXVlIEZPUk0gbm8gZXMgZGlzY3JpbWluYXRpdm8gY29uIGxvcyBzdWVsZG9zIGRlIHN1cyBlbXBsZWFkb3MsIHNpbiBlbWJhcmdvLCBkZSBlc3RhIGdyw6FmaWNhIHRhbWJpZW4gcG9kZW1vcyBkZXN0YWNhciBxdWUgZWwgZW1wbGVhZG8gcXVlIG3DoXMgZ2FuYSBlcyB1bmEgbXVqZXIgZGUgMzIgYcOxb3MgZ2FuYW5kbyBhcHJveGltYWRhbWVudGUgMzgwIHBlc29zIGRpYXJpb3MuCgojIyMgKkdyw6FmaWNvIGN1YW50aXRhdGl2byAoQmFycmFzIGRlIGRvcyB2YXJpYWJsZXMpOioKYGBge3J9CnRhYmxhMSA8LSB0YWJsZShyZWN1cnNvc19odW1hbm9zJEJBSkEsIHJlY3Vyc29zX2h1bWFub3MkRURBRCkKdGFibGExCmJhcnBsb3QodGFibGExLCBiZXNpZGUgPSBUUlVFLCBsYXM9MSwgCiAgeGxhYj0nRWRhZCcsIHlsYWI9J0JhamFzIGRlIGVtcGxlYWRvcycsCiAgY29sID0gYygibGlnaHRibHVlIiwgIm1pc3R5cm9zZSIpLAogIHlsaW0gPSBjKDAsIDcpKQpgYGAKCiMjIyMgRW4gZXN0ZSBjYXNvIHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGxvcyBlbXBsZWFkb3MgZGUgYXByb3hpbWFkYW1lbnRlIDE5LTIzIGHDsW9zIHNvbiBsb3MgcXVlIG1hcyBiYWphcyBoYW4gcmVwb3J0YWRvIGVuIEZPUk0uCgojIyMgKkdyw6FmaWNvIGN1YWxpdGF0aXZvIChQYXkpOioKYGBge3J9CnRhYmxlKHJlY3Vyc29zX2h1bWFub3MkRVNUQURPLkNJVklMKQpwcm9wb3JjaW9uZXMgPC0gYyg0NCwgMywgNDYsIDIwKQpldGlxdWV0YXMgPC0gYygiQ2FzYWRvIiwgIkRpdm9yY2lhZG8iLCAiU29sdGVybyIsICJVbmlvbiBsaWJyZSIpCnBjdCA8LSByb3VuZChwcm9wb3JjaW9uZXMvc3VtKHByb3BvcmNpb25lcykqMTAwKQpldGlxdWV0YXMgPC0gcGFzdGUoZXRpcXVldGFzLCBwY3QpCmV0aXF1ZXRhcyA8LSBwYXN0ZShldGlxdWV0YXMsIiUiLHNlcD0iIikKcGllKHByb3BvcmNpb25lcyxsYWJlbHMgPSBldGlxdWV0YXMsCiAgICBjb2w9cmFpbmJvdyhsZW5ndGgoZXRpcXVldGFzKSksCiAgICBtYWluPSJFc3RhZG8gY2l2aWwgZGUgbG9zIGVtcGxlYWRvcyBkZSBGT1JNIikKYGBgCgojIyMjIEVuIGVzdGEgZ3LDoWZpY2EgZGUgcGF5IHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGxhIG1heW9yIHBhcnRlIGRlIGxvcyBlbXBsZWFkb3Mgc29uIHNvbHRlcm9zIGNvbiB1biA0MSUgeSBjYXNhZG9zICBjb24gdW4gMzklLgoKYGBge3J9CnRhYmxlKHJlY3Vyc29zX2h1bWFub3MkUFVFU1RPKQpwcm9wb3JjaW9uZXMgPC0gYygxLCA2NywgNCwgMSwgMTAsIDEsIDEsIDIsIDEsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQsIDUsIDEsIDEsIDIpCmV0aXF1ZXRhcyA8LSBjKCJBWVVEQU5URSBERSBNQU5URU5JTUlFTlRPIiwgIkFZVURBTlRFIEdFTkVSQUwiLCAiQ0hPRkVSIiwgIkNIT0ZFUiBHRVNUT1IiLCAiQ09TVFVSRVJBIiwgIkNVU1RPTUVSIFNFUlZJQ0UgSU5GIiwgIkVORkVSTUVSQSIsICJFWFRFUk5PIiwgIkdFU1RPUiIsICJHVUFSRElBIERFIFNFR1VSSURBRCIsICJJTlNQRUNUT1IgREUgQ0FMSURBRCIsICJMSURFUiIsICJMSU1QSUVaQSIsICJNQU5URU5JTUlFTlRPIiwgIk1PTlRBQ0FSR1VJU1RBIiwgIk1PWk8iLCAiT1AuIEZMRVhPLVJBTlVSQURPUkEtUkVGSUxBRE9SQSIsICJPUEVSQURPUiBTSUVSUkEiLCAiUElOVE9SIiwgIlJFU0lERU5URSIsICJTT0xEQURPUiIsICJTVVBFUlZJU09SIERFIE1BUVVJTkEiLCAiU1VQRVJWSVNPUiBERSBQRUdBRE8iLCAiU1VQRVJWSVNPUkEiICkKcGN0IDwtIHJvdW5kKHByb3BvcmNpb25lcy9zdW0ocHJvcG9yY2lvbmVzKSoxMDApCmV0aXF1ZXRhcyA8LSBwYXN0ZShldGlxdWV0YXMsIHBjdCkKZXRpcXVldGFzIDwtIHBhc3RlKGV0aXF1ZXRhcywiJSIsc2VwPSIiKQpwaWUocHJvcG9yY2lvbmVzLGxhYmVscyA9IGV0aXF1ZXRhcywKICAgIGNvbD1yYWluYm93KGxlbmd0aChldGlxdWV0YXMpKSwKICAgIG1haW49IlB1ZXN0b3MgZGUgbG9zIGVtcGxlYWRvcyBkZSBGT1JNIikKYGBgCgojIyMjIEVuIGVzdGEgZ3LDoWZpY2EgZGUgcGF5IHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGVsIDU5JSBkZSBsb3MgZW1wbGVhZG9zIHNvbiBheXVkYW50ZXMgZ2VuZXJhbGVzIHkgZWwgOSUgc29uIGNvc3R1cmVyYXMsIHNpZW5kbyBsb3MgcHVlc3RvcyBtYXMgY290aXphZG9zLgoKIyMjICpHcsOhZmljbyBjdWFudGl0YXRpdm86IChIaXN0b2dyYW1hKToqCgpgYGB7cn0KU3VlbGRvIDwtICByZWN1cnNvc19odW1hbm9zJFNBTEFSSU8uRElBUklPLklNU1MgICAKaGlzdChTdWVsZG8sIG1haW4gPSAiU3VlbGRvIGRlIGxvcyBlbXBsZWFkb3MiLCB5bGFiID0gIiMgZGUgZW1wbGVhZG9zIiwgY29sID0gImxpZ2h0Ymx1ZSIpCmBgYAoKIyMjIyBFbiBlc3RhIGdyw6FmaWNhIHBvZGVtb3Mgb2JzZXJ2YXIgZsOhY2lsbWVudGUgY29tbyBsYSBtYXlvciBwYXJ0ZSBkZSBsb3MgZW1wbGVhZG9zIGdhbmFubWVub3MgZGUgMjAwIHBlc29zIGFsIGTDrWEuCgpgYGB7cn0KCiMgUGFyYSByZWFsaXphciBsYSBzaWd1aWVudGUgdGFibGEgeSBncsOhZmljbywgZnVlIG5lY2VzYXJpbyBoYWNlciB1bmEgbnVldmEgY29sdW1uYSBlbiBsYSBiYXNlIGRlIGRhdG9zOiAiSURfUFVFU1RPIiBjb24gZWwgb2JqZXRpdm8gZGUgdGVuZXJsbyBjb21vIHZhcmlhYmxlIGN1YW50aXRhdGl2YS4KI0VuIGVzdGUgY2FzbzogCiMxKSAiQVlVREFOVEUgREUgTUFOVEVOSU1JRU5UTyIKIzIpICJBWVVEQU5URSBHRU5FUkFMIgojMykgIkNIT0ZFUiIKIzQpICJDSE9GRVIgR0VTVE9SIgojNSkgIkNPU1RVUkVSQSIKIzYpICJDVVNUT01FUiBTRVJWSUNFIElORiIKIzcpICJFTkZFUk1FUkEiCiM4KSAiRVhURVJOTyIKIzkpICJHRVNUT1IiCiMxMCkgIkdVQVJESUEgREUgU0VHVVJJREFEIgojMTEpICJJTlNQRUNUT1IgREUgQ0FMSURBRCIKIzEyKSAiTElERVIiCiMxMykgIkxJTVBJRVpBIgojMTQpICJNQU5URU5JTUlFTlRPIgojMTUpICJNT05UQUNBUkdVSVNUQSIKIzE2KSAiTU9aTyIKIzE3KSAiT1AuIEZMRVhPLVJBTlVSQURPUkEtUkVGSUxBRE9SQSIKIzE4KSAiT1BFUkFET1IgU0lFUlJBIgojMTkpICJQSU5UT1IiCiMyMCkgIlJFU0lERU5URSIKIzIxKSAiU09MREFET1IiCiMyMikgIlNVUEVSVklTT1IgREUgTUFRVUlOQSIKIzIzKSAiU1VQRVJWSVNPUiBERSBQRUdBRE8iCiMyNCkgIlNVUEVSVklTT1JBIiAKCmBgYAoKIyMjICpHcsOhZmljbyBjdWFudGl0YXRpdm8gZ3LDoWZpY28gZGUgZGlzcGVyc2nDs246KgpgYGB7cn0KcGxvdChyZWN1cnNvc19odW1hbm9zJElEX1BVRVNUTywgcmVjdXJzb3NfaHVtYW5vcyRTQUxBUklPLkRJQVJJTy5JTVNTLCBtYWluID0gIlNhbGFyaW8gcG9yIHB1ZXN0byIsIHhsYWIgPSAiSWQgZGUgUHVlc3RvIiwgeWxhYiA9ICJTYWxhcmlvIERpYXJpbyIsIHBjaCA9IDIxLCBjb2w9ICJibHVlIiwgYXhlcyA9IEZBTFNFKQpheGlzKDEsIGF0ID0gMToyNCkKYXhpcygyLCBhdCA9IDEwMDo0MDApCgptZWFuKHJlY3Vyc29zX2h1bWFub3MkU0FMQVJJTy5ESUFSSU8uSU1TUykKYGBgCgojIyMjIEVuIGVzdGUgZ3LDoWZpY28gcG9kZW1vcyBvYnNlcnZhciBxdWUgY2FzaSB0b2RvcyBsb3MgcHVlc3RvcyB0aWVuZW4gdW4gcHJvbWVkaW8gZGUgc2FsYXJpbyBkZSAxNzkuMTIxLCBzaW4gZW1iYXJnbywgbG9zIHB1ZXN0b3MgcGVvcmVzIHBhZ2Fkb3Mgc29uICJBeXVkYW50ZSBHZW5lcmFsIiwgIkNvc3R1cmVyYSIsICJFeHRlcm5vIiB5ICJMaWRlciIuCgojIyMgKlRhYmxhIGRlIGZyZWN1ZW5jaWE6KgpgYGB7cn0KCnB1ZXN0byA8LSBjKCIxIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCAiMiIsICIyIiwgIjIiLCIyIiwgIjIiLCAiMiIsICIyIiwiMiIsICIyIiwgIjIiLCIyIiwgIjIiLCAiMiIsICIyIiwiMyIsICIzIiwgIjMiLCAiMyIsICI0IiwgIjUiLCAiNSIsICI1IiwgIjUiLCAiNSIsICI1IiwgIjUiLCAiNSIsICI1IiwgIjUiLCI2IiwgIjciLCAiOCIsICI4IiwgIjkiLCAiMTAiLCAiMTEiLCAiMTEiLCAiMTIiLCAiMTMiLCAiMTQiLCAiMTUiLCAiMTYiLCAiMTciLCAiMTgiLCAiMTkiLCAiMjAiLCAiMjEiLCAiMjEiLCIyMSIsICIyMSIsICIyMiIsICIyMiIsICIyMiIsICIyMiIsICIyMiIsIjIzIiwgIjIzIiwgIjI0IiwgIjI0IikKYmFqYXMgPC0gYygiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMyIsICIzIiwgIjMiLCAiMyIsICIzIiwgIjMiLCAiMCIsICIzIiwgIjAiLCAiMyIsICIzIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCIwIiwgIjAiLCIzIiwgIjMiLCAiMyIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICIwIiwgIjAiLCAiMCIsICAiMCIsICAiMCIsICAgIjAiLCAgICIwIiwgIjAiLCAiMCIsICAgIjAiLCAgICIwIiwgIjAiLCAiMCIsICIwIiwgICAgIjAiLCAiMCIsICIwIiwgIjAiLCAgIjMiLCAiMCIsICIwIiwgICAgIjAiLCAgIjAiLCAgIjAiLCAiMCIpCgp0YWJsYSA8LSB0YWJsZShiYWphcywgcHVlc3RvKQptYXJnaW4udGFibGUodGFibGEsIDEpICNTdW1hIGRlIEJhamFzOiBIYW4gaGFiaWRvIDEzIGJhamFzCm1hcmdpbi50YWJsZSh0YWJsYSwgMikgI1N1bWEgZGUgbG9zIHRpcG9zIGRlIHB1ZXN0bzogSGF5IG3DoXMgcHVlc3RvcyBkZWwgdGlwbyAyIChBeXVkYW50ZSBnZW5lcmFsKQphZGRtYXJnaW5zKHRhYmxhLCBjKDEsIDIpKQprbml0cjo6a2FibGUodGFibGEpCmBgYAoKIyMjIyBDb24gZXN0YSB0YWJsYSBwb2RlbW9zIG9ic2VydmFyIHF1ZSBoYW4gaGFiaWRvIDEyIGJhamFzIGRlbCBwdWVzdG8gMjogIkF5dWRhbnRlIEdlbmVyYWwiLCB5IDEgYmFqYSBkZWwgcHVlc3RvIDIyOiAiU29sZGFkb3IiLCBsbyBxdWUgc2lnbmlmaWNhIHF1ZSBjaWVydG9zIGZhY3RvcmVzIGNvbW8gbGEgZWRhZCAobG9zIG3DoXMgam92ZW5lcyBzb24gbG9zIHF1ZSBtYXMgc2UgZGFuIGRlIGJhamEpIHkgZWwgc2FsYXJpbyBxdWUgZXMgdW5vIGRlIGxvcyBwZW9yZXMgcGFyYSBlbCBwdXN0byBkZSBBeXVkYW50ZSBHZW5lcmFsIHNvbiB2aXRhbGVzIGNhbWJpYXIgcGFyYSBldml0YXIgbGEgcm90YWNpw7NuIGVuIGVzdGFzIMOhcmVhcy4KCiMjIyAqUHJvcHVlc3Rhcyo6CgojIyMjIDEuIFJlYWxpemFyIHVuIHByb2dyYW1hIGRlIGluY2VudGl2b3MgcGFyYSBsb3MgZW1wbGVhZG9zIGNvbiBlbCBvYmpldGl2byBkZSBpbmNyZW1lbnRhciBzdSByZWNvbm9jaW1pZW50byB5IGVzdGFuY2lhIGVuIGxhIGVtcHJlc2EsIG9mcmVjaWVuZG9sZXMgbWVqb3Igc3VlbGRvIGFsIGluY3JlbWVudGFyIHN1IHJlbmRpbWllbnRvIChlc3BlY2lhbG1lbnRlIGEgbG9zIGF5dWRhbnRlcyBnZW5lcmFsZXMgcXVlIHNvbiBsb3MgcXVlIGhhbiByZXBvcnRhZG8gbcOhcyBiYWphcyksIG8gZGFuZG9sZXMgYmVuZmljaW9zIGFkaWNpb25hbGVzIGNvbW8gdGFyamV0YXMgZGUgZGVzcGVuc2EgbyByZWNvbm9jaW1pZW50b3MuCgojIyMjIDIuIEVzdGFuZGFyaXphY2nDs24gZGVsIHByb2Nlc28gZGUgcmVjbHV0YW1pZW50bzogU2UgaGFuIG9ic3J2YWRvIHF1ZSBsb3MgZW1wbGVhZG9zIHF1ZSBkdXJhbiBtZW5vcyBzb24gbG9zIGrDs3ZlbmVzIHlhIHF1ZSBzb24gbG9zIHBlb3JlcyBwYWdhZG9zLCBwb3IgbG8gcXVlIHNlIGRlYmVyw61hbiBidXNjYXIgbnVldm9zIGVtcGxlYWRvcyBxdWUgc2VhbiBtYXlvcmVzIG8gZGViZXLDrWEgZGUgaGFiZXIgdW4gaW5jcmVtZW50byBkZSBzdWVsZG8sIHB1ZXMgc2UgaGEgb2JzZXJ2YWRvIHF1ZSBsYXMgdmFyaWFibGVzIGRlICBnw6luZXJvIHkgZGUgZXN0YWRvIGNpdmlsIG5vIGFmZWN0YW4sIGRlZHVjaWVuZG8gYXPDrSBxdWUgRk9STSBubyBlcyB1bmEgZW1wcmVzYSBxdWUgZGlzY3JpbWluYSwgbcOhcyBiaWVuLHRpZW5lIHF1ZSBtZWpvcmFyIHN1IHByb2Nlc28gZGUgc2VsZWNjacOzbiBlIGluY3JlbWVudGFyIGxvcyBiZW5lZmljaW9zIGRhZG9zIGEgbG9zIGVtcGxlYWRvcyBwYXJhIGRpc21pbnVpciBsYSByb3RhY2nDs24uCgojICoqRGVsaXZlcnkgUGxhbioqCgojIyMjIEltcG9ydGFyIGxhcyBiYXNlcyBkZSBkYXRvcwpgYGB7cn0KIyBmaWxlLmNob29zZSgpCmJkIDwtIHJlYWQuY3N2KCIvVXNlcnMvbWF5cmFjYW1wb3lyYW1vcy9EZXNrdG9wL0FuYWxpc2lzIGRlIERhdG9zIENvbmNlbnRyYWNpb24vUmV0by9kZWxpdmVyeV9wbGFuLmNzdiIpCgpzdW1tYXJ5KGJkKQpgYGAKCiMjIyAqQ3JlYXIgQ29sdW1uYSoKYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygiZHB5bHIiKQpsaWJyYXJ5KHBseXIpCmxpYnJhcnkodGlkeXIpCgpiZDEgPC0gYmQKYmQxIDwtIGdhdGhlcihiZDEsa2V5ID0gImHDsW8iLCB2YWx1ZSA9ICJwZWRpZG9zIiwgNToxNikKCmFnZ3JlZ2F0ZSh4PWJkMSRwZWRpZG9zLAogICAgICAgICAgYnkgPSBsaXN0KGJkMSRhw7FvKSwKICAgICAgICAgIEZVTj0gc3VtKQoKc3VtbWFyeShiZDEpCmBgYAoKIyMjICpHcsOhZmljbyBjdWFsaXRhdGl2byAoUGF5KToqCmBgYHtyfQpwaWUodGFibGUoYmQxJENMSUVOVEUuUExBTlRBKSkKYGBgCgoKIyMjICpUYWJsYSBkZSBmcmVjdWVuY2lhKgpgYGB7cn0KYmQyIDwtYmQxCmJkMiA8LSBkYXRhLmZyYW1lKGJkJElURU0pCmJkMgpgYGAKCiMjIyAqR3JhZmljYSBkZSBDdWFsaXRhdGl2YSoKYGBge3J9CnBpZSh0YWJsZShiZCRDTElFTlRFLlBMQU5UQSkpCmBgYAoKCiMjIyAqR3JhZmljYSBkZSBDdWFudGl0YXRpdmEqCmBgYHtyfQp0YWJsZShiZDEkYcOxbywgYmQxJHBlZGlkb3MpCgpiYXJwbG90KHRhYmxlKGJkMSRhw7FvKSwgbWFpbiA9ICJUb3RhbCBkZSBwZWRpZG9zIHBvciBlbCBhw7FvIDIwMjIiLCB4bGFiID0gImHDsW8iLCB5bGFiID0gInBlZGlkb3MiICkKCmBgYAoKIyMjICpHcsOhZmljbyBkZSBkaXNwZXJzaW9uKgpgYGB7cn0KYm94cGxvdHM9c3Vic2V0KGJkMSxzZWxlY3Q9LWMocGVkaWRvcyxhw7FvKSkKYm94cGxvdChiZDEkcGVkaWRvcywgbWFpbiA9IlRvdGFsIGRlIFBlZGlkb3MgMjAyMiIpCgpwbG90KGJkMSRwZWRpZG9zLCBob3Jpem9udGFsPSBUUlVFKQpgYGAKCiMjIyAqUHJvcHVlc3Rhcyo6CiMjIyMgQWwgYW5hbGl6YXIgbG9zIGRhdG9zIHBvZGVtb3MgZGFybm9zIGN1ZW50YSBxdWUgRlJPTSBjdWVudGEgY29uIDIgY2xpZW50ZXMgcXVlIGFiYXJjYW4gbGEgbWF5b3IgY2FudGlkYWQgZGUgbG9zIHBlZGlkb3Mgc2llbmRvIHVuYSBkaWZlcmVuY2lhIGFsdGFtZW50ZSBzaWduaWZpY2F0aXZvcy4gUG9yIGxvIHF1ZSBzZSByZWNvbWllbmRhIGJ1c2NhciBjbGllbnRlcyBxdWUgcHVlZGFuIGFuaXZlbGFyIGxhIGNhbnRpZGFkIGRlIHBlZGlkb3MgeSBkYXJsZXMgdW4gdHJhdG8gcHJlZmVyZW5jaWFsIFZJUCBhbCBjdW1wbGlyIGNvbiBjaWVydG9zIHJlcXVzaXRvcywgcGFyYSBlbGxvIHNlcsOtYSBuZWNlc2FyaWEgY3JlYXIgdW5hIGNvbXVuaWRhZCBkZSBjbGllbnRlcyBWSVAgcGFyYSBkYXJsZXMgY2llcnRhcyB2ZW50YWphcywgeSBkZSBlc2UgbW9kbyBubyBkZXBlbmRlciBkZSBsYSBlc3RhYmlsaWRhZCBkZSBkb3MgY2xpZW50ZXMgdW5pY2FtZW50ZSB5IGF1bWVudGFyIGxhIHJlZCBkZSBjbGllbnRlcyBWSVAgY29uIGdyYW5kZXMgZGFudGlkYWRlcyBkZSBwZWRpZG9zLiBBc2kgYXVtZW50YW5kbyBsYXMgdmVudGFzIHkgZWwgcmFuZ28gZGVsIHNlZ21lbnRvIGRlIG1lcmNhZG8sIHBhcmEgaWd1YWwgbm8gbmFkYW1hcyBlc3RhciBkZXBlbmRpZW5kbyBkZSBkb3MgY2xpZW50ZXMsIHNpbiBpbnRlbnRhciBjcmVhciBtYXMgY2xpZW50ZXMgZmllbGVzIHF1ZSB0ZSBwdWVkYW4gY29tcHJhciBncmFuZGVzIGNhbnRpZGFkIHkgcXVlIGNvbmZpZW4gZW4gdGkuCgojIyMjIExvcyBwZWRpZG9zIGR1cmFudGUgbG9zIGHDsW9zIHNlIGVuY3VudHJhbiBzaW1pbGFyZXMgc2luIG11Y2hhIGRpZmVyZW5jaWEgZW4gY2FudGlkYWRlcywgZW4gbG9zIGRhdG9zIHNlIHZlIHF1ZSBsYWVzdGFiaWxpZGFkIGVzIHBvc2l0aXZvLCBwZXJvIHNpIG5vIHNlIHNpZ3VlIGNyZWNpZW5kbyBsYSBlbXByZXNhIHB1ZWRlIHF1ZWRhciBlc3RhbmNhZGEsIGVzIG5lY2VzYXJpbyBpbXBsZW1lbnRhciBLUElzIGRvbmRlIHNlIHB1ZWRhIG1lZGlyIGxhIGZyZWN1ZW5jaWEgZGUgbG9zIHBlZGlkb3MgcG9yIGNsaWVudGVzIHkgdGFtYmnDqW4gZWwgaW5jcmVtZW50byBkZSBwZWRpZG9zIHF1ZSBzZSB0aWVuZSBwb3IgbWVzLgoKIyAqKkRlbGl2ZXJ5IFBlcmZvcm1hbmNlKioKCiMjIyMgSW1wb3J0YXIgbGFzIGJhc2VzIGRlIGRhdG9zCmBgYHtyfQojIGZpbGUuY2hvb3NlKCkKYmQgPC0gcmVhZC5jc3YoIi9Vc2Vycy9tYXlyYWNhbXBveXJhbW9zL0Rlc2t0b3AvQW5hbGlzaXMgZGUgRGF0b3MgQ29uY2VudHJhY2lvbi9SZXRvL0ZPUk0gLSBEZWxpdmVyeSBQZXJmb3JtYW5jZS5jc3YiKQpiZCA8LSBuYS5vbWl0KGJkKQpzdW1tYXJ5KGJkKQpiZDI8LWJkCmJkMiA8LSBzdWJzZXQoYmQyLCBzZWxlY3QgPS1jIChUYXJnZXQpKQpgYGAKCiMjIyAqVGFibGEgZGUgZnJlY3VlbmNpYSoKYGBge3J9CnRhYmxlKGJkMiRDbGllbnRlLCBiZCRWdWVsdGFzKQpwcm9wLnRhYmxlKHRhYmxlKGJkMiRDbGllbnRlLCBiZCRWdWVsdGFzKSkKYGBgCgojIyMjIFNlIGVsYWJvcm8gbGEgdGFibGEgZGUgZnJlY3VlbmNpYSBwYXJhIHZlciBsb3MgZGF0b3MgZGUgbG9zIGNsaWVudGVzIHkgc3VzIHZ1ZWx0YXMuCgojIyMgKkdyw6FmaWNvIGRlIGRpc3BlcnNpb24qCmBgYHtyfQojIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQpsaWJyYXJ5KCJnZ3Bsb3QyIikKbGlicmFyeSgidGlkeXZlcnNlIikKCmdncGxvdChkYXRhID0gYmQsIG1hcHBpbmcgPSBhZXMoQ2xpZW50ZSwgVnVlbHRhcykpICsgZ2VvbV9wb2ludCgpICsgdGhlbWVfYncoKQpgYGAKCiMjIyMjIENvbW8gc2UgcHVlZGUgb2JzZXJ2YXIgZW4gZXN0ZSBncsOhZmljbyxwb2RlbW9zIHZlciBxdWUgbG9zIGNsaWVudGVzIE1haGxlIHkgVmFycm9jIHNvbiBsb3MgcXVlIHNlIG1hbnRpZW5lbiBpZ3VhbCBlbiBjdWFudG8gYSBzdXMgdnVlbHRhcyB2dWVsdGFzIHNvbiBsYXMgdnVlbHRhcyBxdWUgdHV2aWVyb24gcXVlIGhhY2VyIHBhcmEgbGEgZW50cmVnYS4KCiMjIyAqR3JhZmljYSBkZSBQYXkqCmBgYHtyfQp0YWJsZShiZDIkQ2xpZW50ZSkKcHJvcG9yY2lvbmVzIDwtIGMoNDQsIDMsIDQ2LCAyMCkKZXRpcXVldGFzIDwtIGMoIlBsYW4uYXJyaXZhbCIsICJSZWFsLmFycml2YWwiLCAiUmVhbC5kZXBhcnR1cmUiLCJEaWZlcmVuY2UiKQpwY3QgPC0gcm91bmQocHJvcG9yY2lvbmVzL3N1bShwcm9wb3JjaW9uZXMpKjEwMCkKZXRpcXVldGFzIDwtIHBhc3RlKGV0aXF1ZXRhcywgcGN0KQpldGlxdWV0YXMgPC0gcGFzdGUoZXRpcXVldGFzLCIlIixzZXA9IiIpCnBpZShwcm9wb3JjaW9uZXMsbGFiZWxzID0gZXRpcXVldGFzLAogICAgY29sPXJhaW5ib3cobGVuZ3RoKGV0aXF1ZXRhcykpLAogICAgbWFpbj0iTGxlZ2FkYXMgeSBTYWxpZGFzIikKYGBgCgojIyMjIFBvZGVtb3Mgb2JzZXJ2YXIgY29tbyBlcyBxdWUgZXN0YSBkaXZpZGlkbyBsYXMgdmFyaWFibGVzIGRlIHNhbGlkYXMgcGFyYSB1bmEgbWVqb3IgdmlzdWFsaXphY2lvbiBkZSBsb3MgZGF0b3Mgb2J0ZW5pZG9zLgoKIyMjICpHcmFmaWNhIGRlIGRpc3BlcnNpb24qCmBgYHtyfQpnZ3Bsb3QoZGF0YT1iZDIsIG1hcHBpbmcgPSBhZXMoQ2xpZW50ZSwgUmVhbC5hcnJpdmFsKSkgKyBnZW9tX3BvaW50KGFlcyhjb2xvciA9IERpZmVyZW5jZSkpICsgdGhlbWVfYncoKQpgYGAKCiMjIyMgUG9kZW1vcyBvYnNlcnZhciBxdWUgZW50cmUgbG9zIDQgY2xpZW50ZXMsIGVuIGxvcyBjb2xvcmVzIHNlIHB1ZWRlIHZlciBxdWUgbGEgbWF5b3JpYSBzb24gb3NjdXJvcy4KIyMjIyBBbCBzZXIgb3NjdXJvcyBsYSBtYXlvcmlhIGRlIGxvcyBwdW50b3MgZGUgZGlzcGVyc2lvbiBub3MgZGEgYSBjb25vY2VyIHF1ZSBubyBleGlzdGUgbXVjaGEgZGlmZXJlbmNpYSBlbnRyZSBsYSBob3JhIGRlIGxsZWdhZGEgeSBsYSBob3JhIHF1ZSBzZSB0aWVuZSBwbGFuZWFkYS4KIyMjIyBTZSBhcHJlY2lhIGFsZ28gcG9zaXRpdm8geWEgcXVlIGVzdGFuIHNpZ3VpZW5kbyB1biBidWVuIHByb3RvY29sbyBlbiBjdWFudG8gYSBzdXMgdGllbXBvcy4gCiMjIyAqR3LDoWZpY28gZGUgZGlzcGVyc2nDs24qCmBgYHtyfQpib3hwbG90KGJkMiREaWZlcmVuY2UgfiBiZDIkUGxhbi5hcnJpdmFsLCBob3Jpem9udGFsID0gVFJVRSkKYGBgCgojIyMjIFNlIHB1ZWRlIHZlciBxdWUgZXhpc3RlbiBkYXRvcyBuZWdhdGl2b3MgZGVudHJvIGRlbCAyMCwgbG9zIGN1YWxlcyBwZXJ0ZW5lY2VuIGEgTWFobGUgeSBQcmludGVsLCBsYSBjdWFsIG5vcyBkYSBhIGNvbm9jZXIgcXVlIHNpIGhheSByZXRyYXNvcywgbG8gY3VhbCBlcyBub3JtYWwuCiMjIyMgQ29tbyBvYmpldGl2byBkZSBlc3RvIHNlIHF1aWVyZSBsbGVnYXIgYSBwcm9wb25lciBwbGFuZXMgcXVlIGhhZ2FuIHF1ZSBlc3RvcyBudW1lcm9zIG5lZ2F0aXZvcyBtZWpvcmVuIHBhcmEgYXNpIG1lam9yYXIgZXN0b3MgcHVudG9zIG5lZ2F0aXZvcyBxdWUgc2UgbXVlc3RyYW4uCgojIyMgKlByb3B1ZXN0YXMqOgoKIyMjIyAxLiBQcmV2aWEgcGxhbmlmaWNhY2nDs24gZGUgcnV0YXMKIyMjIyAyLiBVc28gZGUgdGVjbm9sb2fDrWFzIG3Ds3ZpbGVzIHkgZW4gbGEgbnViZQojIyMjIDMuIEVtcG9kZXJhbWllbnRvIGRlIGxvcyBjbGllbnRlcyBzb2JyZSBlbCBzZWd1aW1pZW50byBkZSBzdXMgcGVkaWRvcwojIyMjIDQuIFNlZ3VpbWllbnRvIGRlbCBwcm9kdWN0byBkZXNkZSBlbCBwdW50byBkZSBwYXJ0aWRhIGhhc3RhIGVsIGZpbmFsCiMjIyMgNS4gTWVkaWNpw7NuIHkgbWVqb3JhIGNvbnRpbnVhIGRlIGxhIGV4cGVyaWVuY2lhIGRlIGxvcyBjbGllbnRlcy4KCg==