## Descargar librerías
library(foreign)
library(dplyr) # data manipulation
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(forcats) # to work with categorical variables
library(ggplot2) # data visualization
library(readr) # read specific csv files
library(janitor) # data exploration and cleaning
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(Hmisc) # several useful functions for data analysis
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
library(psych) # functions for multivariate analysis
##
## Attaching package: 'psych'
## The following object is masked from 'package:Hmisc':
##
## describe
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(naniar) # summaries and visualization of missing values NAs
library(dlookr) # summaries and visualization of missing values NAs
##
## Attaching package: 'dlookr'
## The following object is masked from 'package:psych':
##
## describe
## The following object is masked from 'package:Hmisc':
##
## describe
## The following object is masked from 'package:base':
##
## transform
library(corrplot) # correlation plots
## corrplot 0.92 loaded
library(jtools) # presentation of regression analysis
##
## Attaching package: 'jtools'
## The following object is masked from 'package:Hmisc':
##
## %nin%
library(lmtest) # diagnostic checks - linear regression analysis
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car) # diagnostic checks - linear regression analysis
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
## The following object is masked from 'package:dplyr':
##
## recode
library(olsrr) # diagnostic checks - linear regression analysis
##
## Attaching package: 'olsrr'
## The following object is masked from 'package:datasets':
##
## rivers
library(kableExtra) # HTML table attributes
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
library(gmodels)
library(openxlsx)
library(crosstable)
### Importar base de datos
df1 <-read.csv(file.choose())
summary(df1)
## FECHA MES KILOS X
## Length:50 Length:50 Min. : 790 Mode:logical
## Class :character Class :character 1st Qu.:3178 NA's:50
## Mode :character Mode :character Median :3925
## Mean :3709
## 3rd Qu.:4232
## Max. :6140
## X.1 X.2 X.3
## Mode:logical Mode:logical Mode:logical
## NA's:50 NA's:50 NA's:50
##
##
##
##
describe(df1)
## # A tibble: 1 × 26
## described_…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 KILOS 50 0 3709. 1024. 145. 1055 -0.997 2.17 790 800.
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
### FECHA: Fecha en la cual se registró la merma.
### MES: Mes en el cual se registró la merma.
### KILOS: Kilos de merma desechados.
variable<-c("FECHA","MES","KILOS")
Type<-c("quantiative (discrete)", "quantitative (continous)", "quantitative (continous)")
table<-data.frame(variable,Type)
knitr::kable(table)
| variable | Type |
|---|---|
| FECHA | quantiative (discrete) |
| MES | quantitative (continous) |
| KILOS | quantitative (continous) |
variables <- c("FECHA","MES","KILOS")
tipos <- c("cualitativo", "cuantitativo", "cuantitativo")
escalas <- c("(ordinal)", "(ordinal)","(intervalo)")
table1 <- data.frame (variables, tipos, escalas)
knitr::kable(table1)
| variables | tipos | escalas |
|---|---|---|
| FECHA | cualitativo | (ordinal) |
| MES | cuantitativo | (ordinal) |
| KILOS | cuantitativo | (intervalo) |
### R. Remover valores irrelevantes y conversión de datos. Las técnicas elegidas en la limpieza de datos van de acuerdo a las necesidades de la base de dato y el beneficio que generó para el análisis descriptivo.
### Conversión de caracter a fecha
df2<-df1
df2$FECHA<-as.Date(df2$FECHA, format= "%d/%m/%Y")
summary(df2)
## FECHA MES KILOS X
## Min. :2022-01-11 Length:50 Min. : 790 Mode:logical
## 1st Qu.:2022-03-12 Class :character 1st Qu.:3178 NA's:50
## Median :2022-05-24 Mode :character Median :3925
## Mean :2022-05-25 Mean :3709
## 3rd Qu.:2022-08-10 3rd Qu.:4232
## Max. :2022-09-21 Max. :6140
## X.1 X.2 X.3
## Mode:logical Mode:logical Mode:logical
## NA's:50 NA's:50 NA's:50
##
##
##
##
### Eliminar renglones duplicados
df3<-df2
df3<-distinct(df3)
### ¿Cuántos NA's tengo en la base de datos? Primera limpieza
sum(is.na(df3))
## [1] 200
### Eliminar columnas
df4<-df3
df4 <- subset(df4, select =-c (X))
df4 <- subset(df4, select =-c (X.1))
df4 <- subset(df4, select =-c (X.2))
df4 <- subset(df4, select =-c (X.3))
### ¿Cuántos NA's tengo en la base de datos? Segunda limpieza
sum(is.na(df4))
## [1] 0
### En la primera parte de la limpieza de datos, vemos que la variable "FECHA" estaba en formato de caracter y se generaron 4 variables adicionales (X a X.3). Al realizar las modificaciones correspondientes de conversión de datos, eliminar columnas y eliminar datos irrelevantes, se muestra que tenemos tres variables esenciales a analizar y un total de 50 registros por variable. Esto nos permitirá realizar un análisis concreto más adelante.
describe(df4)
## # A tibble: 1 × 26
## described_…¹ n na mean sd se_mean IQR skewn…² kurto…³ p00 p01
## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 KILOS 50 0 3709. 1024. 145. 1055 -0.997 2.17 790 800.
## # … with 15 more variables: p05 <dbl>, p10 <dbl>, p20 <dbl>, p25 <dbl>,
## # p30 <dbl>, p40 <dbl>, p50 <dbl>, p60 <dbl>, p70 <dbl>, p75 <dbl>,
## # p80 <dbl>, p90 <dbl>, p95 <dbl>, p99 <dbl>, p100 <dbl>, and abbreviated
## # variable names ¹described_variables, ²skewness, ³kurtosis
count(df4, FECHA, sort = TRUE)
## FECHA n
## 1 2022-02-18 5
## 2 2022-01-11 2
## 3 2022-01-22 2
## 4 2022-08-29 2
## 5 2022-08-31 2
## 6 2022-02-24 1
## 7 2022-03-03 1
## 8 2022-03-08 1
## 9 2022-03-11 1
## 10 2022-03-16 1
## 11 2022-03-23 1
## 12 2022-03-30 1
## 13 2022-04-04 1
## 14 2022-04-11 1
## 15 2022-04-14 1
## 16 2022-04-21 1
## 17 2022-04-27 1
## 18 2022-05-02 1
## 19 2022-05-09 1
## 20 2022-05-14 1
## 21 2022-05-24 1
## 22 2022-05-25 1
## 23 2022-06-07 1
## 24 2022-06-15 1
## 25 2022-06-20 1
## 26 2022-06-27 1
## 27 2022-07-04 1
## 28 2022-07-11 1
## 29 2022-07-16 1
## 30 2022-07-21 1
## 31 2022-07-27 1
## 32 2022-08-08 1
## 33 2022-08-10 1
## 34 2022-08-11 1
## 35 2022-08-13 1
## 36 2022-08-15 1
## 37 2022-08-22 1
## 38 2022-08-30 1
## 39 2022-09-05 1
## 40 2022-09-07 1
## 41 2022-09-15 1
## 42 2022-09-21 1
count(df4, MES, sort = TRUE)
## MES n
## 1 AGOSTO 11
## 2 FEBRERO 6
## 3 MARZO 6
## 4 ABRIL 5
## 5 JULIO 5
## 6 MAYO 5
## 7 ENERO 4
## 8 JUNIO 4
## 9 SEPTIEMBRE 4
count(df4, KILOS, sort = TRUE)
## KILOS n
## 1 3140 2
## 2 3810 2
## 3 4190 2
## 4 4200 2
## 5 790 1
## 6 810 1
## 7 1040 1
## 8 2130 1
## 9 2480 1
## 10 2680 1
## 11 2830 1
## 12 2950 1
## 13 2980 1
## 14 2990 1
## 15 3050 1
## 16 3290 1
## 17 3410 1
## 18 3590 1
## 19 3650 1
## 20 3680 1
## 21 3690 1
## 22 3739 1
## 23 3780 1
## 24 3870 1
## 25 3920 1
## 26 3930 1
## 27 3940 1
## 28 3960 1
## 29 3967 1
## 30 4000 1
## 31 4050 1
## 32 4130 1
## 33 4210 1
## 34 4240 1
## 35 4260 1
## 36 4270 1
## 37 4310 1
## 38 4330 1
## 39 4380 1
## 40 4510 1
## 41 4680 1
## 42 4770 1
## 43 5010 1
## 44 5080 1
## 45 5230 1
## 46 6140 1
### Total de kilos de merma
totkilos = colSums (df4[3])
totkilos
## KILOS
## 185426
tibble(df4)
## # A tibble: 50 × 3
## FECHA MES KILOS
## <date> <chr> <int>
## 1 2022-01-11 ENERO 5080
## 2 2022-01-11 ENERO 3810
## 3 2022-01-22 ENERO 2990
## 4 2022-01-22 ENERO 2680
## 5 2022-02-18 FEBRERO 3650
## 6 2022-02-18 FEBRERO 4380
## 7 2022-02-18 FEBRERO 3870
## 8 2022-02-18 FEBRERO 3590
## 9 2022-02-18 FEBRERO 3410
## 10 2022-02-24 FEBRERO 3930
## # … with 40 more rows
## 6.1 Tabla de frecuencia (1)
df4<-data.frame(df4$KILOS)
df4
## df4.KILOS
## 1 5080
## 2 3810
## 3 2990
## 4 2680
## 5 3650
## 6 4380
## 7 3870
## 8 3590
## 9 3410
## 10 3930
## 11 4000
## 12 4190
## 13 2980
## 14 3290
## 15 4200
## 16 3810
## 17 3940
## 18 4190
## 19 2950
## 20 3690
## 21 4050
## 22 4310
## 23 4770
## 24 3680
## 25 6140
## 26 4510
## 27 4680
## 28 4330
## 29 5010
## 30 4260
## 31 5230
## 32 2130
## 33 4130
## 34 3920
## 35 3960
## 36 3140
## 37 4210
## 38 3140
## 39 3780
## 40 4240
## 41 4200
## 42 4270
## 43 810
## 44 1040
## 45 2480
## 46 790
## 47 3050
## 48 2830
## 49 3967
## 50 3739
df5<-
data.frame(
MES = c(
"ENERO",
"FEBRERO",
"MARZO",
"ABRIL",
"MAYO",
"JUNIO",
"JULIO",
"AGOSTO",
"SEPTIEMBRE",
"TOTAL DE MERMA"
),
KILOS = c(
"14,560",
"22,830",
"22,470",
"18,820",
"23,410",
"18,280",
"19,370",
"32,100",
"13,586",
"185,426"
)
)
df5
## MES KILOS
## 1 ENERO 14,560
## 2 FEBRERO 22,830
## 3 MARZO 22,470
## 4 ABRIL 18,820
## 5 MAYO 23,410
## 6 JUNIO 18,280
## 7 JULIO 19,370
## 8 AGOSTO 32,100
## 9 SEPTIEMBRE 13,586
## 10 TOTAL DE MERMA 185,426
## 6.2 Tabla cruzada (1)
table(df5$KILOS, df5$MES)
##
## ABRIL AGOSTO ENERO FEBRERO JULIO JUNIO MARZO MAYO SEPTIEMBRE
## 13,586 0 0 0 0 0 0 0 0 1
## 14,560 0 0 1 0 0 0 0 0 0
## 18,280 0 0 0 0 0 1 0 0 0
## 18,820 1 0 0 0 0 0 0 0 0
## 185,426 0 0 0 0 0 0 0 0 0
## 19,370 0 0 0 0 1 0 0 0 0
## 22,470 0 0 0 0 0 0 1 0 0
## 22,830 0 0 0 1 0 0 0 0 0
## 23,410 0 0 0 0 0 0 0 1 0
## 32,100 0 1 0 0 0 0 0 0 0
##
## TOTAL DE MERMA
## 13,586 0
## 14,560 0
## 18,280 0
## 18,820 0
## 185,426 1
## 19,370 0
## 22,470 0
## 22,830 0
## 23,410 0
## 32,100 0
## 6.3 Gráficos de datos cuantitativos y cualitativos (2)
### Importar base de datos
df6 <-read.csv(file.choose())
summary(df6)
## MES_num MES KILOS
## Min. :1 Length:9 Min. :13586
## 1st Qu.:3 Class :character 1st Qu.:18280
## Median :5 Mode :character Median :19370
## Mean :5 Mean :20603
## 3rd Qu.:7 3rd Qu.:22830
## Max. :9 Max. :32100
### ¿Cuántos NA's tengo en la base de datos?
sum(is.na(df6))
## [1] 0
### Eliminar columnas
df7<-df6
df7 <- subset(df7, select =-c (MES_num))
## 6.3.1 Gráfica de barras
### Gráfica de barras: Merma de producción en kg (Q1-Q3 (2022))
mt1<- tapply(df7$KILOS,df6$MES_num,sum)
barplot(mt1,
main= "Merma de producción en kg (Q1-Q3 (2022))",
xlab= "Mes",
ylab="Merma en kg",
col= "orange"
)
## 6.3.2 Pie chart
### Importar base de datos
df7 <-read.csv(file.choose())
summary(df7)
## MES_num Q KILOS
## Min. :1 Length:10 Min. :13586
## 1st Qu.:1 Class :character 1st Qu.:18280
## Median :2 Mode :character Median :19370
## Mean :2 Mean :20603
## 3rd Qu.:3 3rd Qu.:22830
## Max. :3 Max. :32100
## NA's :1 NA's :1
### ¿Cuántos NA's tengo en la base de datos?
sum(is.na(df7))
## [1] 2
### Borrar todos los registros NA's de una tabla
df8<-df7
df8<-na.omit(df8)
summary(df8)
## MES_num Q KILOS
## Min. :1 Length:9 Min. :13586
## 1st Qu.:1 Class :character 1st Qu.:18280
## Median :2 Mode :character Median :19370
## Mean :2 Mean :20603
## 3rd Qu.:3 3rd Qu.:22830
## Max. :3 Max. :32100
### ¿Cuántos NA's tengo en la base de datos?
sum(is.na(df8))
## [1] 0
### Pie chart: Merma de producción en kg por 'quarters'
pie(table(df8$Q), col=c("lightsalmon2","orange","coral1"),
main="Merma de producción en kg 2022 (Q1-Q3)")
## 6.4 Gráficos de dispersión (2)
### Importar base de datos
df9<-df8
### Gráfica de dispersión: Total de Merma en kg (Q1-Q3 (2022))
plot(x= df9$KILOS, y=df9$MES)
### Gráfica de dispersión: Merma de producción en kg por 'quarters'
plot(df9$KILOS, 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
Propuesta 1: De acuerdo al cálculo de merma total, se generaron 185,426 kilos de Enero a Septiembre del 2022. En el análisis se muestra un incremento de producción de merma del 60.34%. Podemos suponer que este incremento se debe al aumento de la industria automotriz en producción, exportaciones y ventas internas (El Economista, 2022). Esto para FORM significaría que tuvieron un aumento en pedidos y por ende, hubo un descuido en los procesos de calidad y producción. Como propuesta de mejora, se sugeriría llevar un control puntual del manejo de mercancía a través de tecnologías digitales. Esto a través de un control puntual de cuánto se está desperdiciando para cada producto o cliente y definir un valor máximo de merma a poder generar.
Propuesta 2: Como segundo plan de acción, se recomienda identificar la causa de la merma, es decir, saber qué recursos se merman. Esto con el objetivo de identificar qué es lo que genera esta pérdida y trabajar sobre ella para evitar que se repita.
De acuerdo a la limpieza de datos realizada, vemos que es importante considerar los alcances y dificultades que pueden traer una base de datos sucia. Por esto, ahora logramos ver un análisis limpio con la información necesaria, sin datos duplicados, sin información irrelevante y con una mayor facilidad de interpretación. Gracias a este análisis, se tuvo un acercamiento a cuáles son las principales áreas de oportunidad de la empresa en cuanto a merma dentro del proceso productivo y pudimos entender los principales alcances que tienen dentro de la misma. En el apartado de propuestas, se presentan algunos puntos que podrían implementar para tener un cambio perecedero dentro de su proceso de trabajo. Sin embargo, sería importante considerar que para tener un cambio significativo, es necesario darle importancia al correcto almacenamiento de datos y procesamiento de los mismos, pues éstas son las bases de una ágil interpretación de datos, generando así una mejor toma de decisiones y por ende, un correcto manejo de la información.
Ana Karen García. (2022, September 8). Industria automotriz anota un buen agosto: crecen producción, exportaciones y ventas internas. El Economista; El Economista. https://www.eleconomista.com.mx/empresas/Industria-automotriz-anota-un-buen-agosto-crecen-produccion-exportaciones-y-ventas-internas-20220907-0031.html
Hernández, F., & Usuga, O. (2022). 9 Tablas de frecuencia | Manual de R. Retrieved 24 September 2022, from https://fhernanb.github.io/Manual-de-R/tablas.html#ejemplo-tabla-de-frecuencia-relativa-de-una-v%C3%ADa
9 Estilos y formatos de tabla | Tablas y graficos con R y R Studio. (2022). Retrieved 24 September 2022, from https://tables.investigaonline.com/tse-formateo.html