1 Carga de datos

Verificamos que rstudio nos lea correctamente los datos

datos <- read.csv("Datos Mineros.csv",
                  header = TRUE,
                  sep = ";",
                  dec = ".",
                  fileEncoding = "latin1")

1.1 Extraemos la variable

ACCIDENTES <- datos$ACCIDENT_TYPE

1.2 Cargamos Librerias

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
library(gt)

2 Tabla de Distribución De Frecuencias Simples

# Convertimos a dataframe
df_nuevas <- data.frame(
  variable = c(
    "Absorption of radiations, caustics, toxic and noxious substances",
    "Accident type, without injuries",
    "Bodily reaction, NEC",
    "Caught in, under or between a moving and a stationary object",
    "Caught in, under or between NEC",
    "Caught in, under or between running or meshing objects",
    "Caught in, under or between two or more moving objects",
    "Contact with electrical current",
    "Contact with heat",
    "Contact with hot objects or substances",
    "Drowning",
    "Fall down stairs",
    "Fall from ladders",
    "Fall from machine",
    "Fall from piled material",
    "Fall from scaffolds, walkways, platforms",
    "Fall onto or against objects",
    "Fall to lower level, NEC",
    "Fall to the walkway or working surface",
    "Flash burns (electric)",
    "Flash burns (welding)",
    "Inhalation of radiations, caustics, toxic and noxious substances",
    "NEC",
    "Over-exertion in lifting objects",
    "Over-exertion in pulling or pushing objects",
    "Over-exertion in wielding or throwing objects",
    "Over-exertion NEC",
    "Rubbed or abraded",
    "Struck against a moving object",
    "Struck against stationary object",
    "Struck by falling object",
    "Struck by flying object",
    "Struck by powered moving object",
    "Struck by rolling or sliding object",
    "Struck by... NEC",
    "Unclassified, insufficient data"
  ),
  ni = c(85,591,52,367,111,41,4,8,21,57,2,15,32,116,3,16,168,8,234,14,13,46,91,322,133,26,581,18,219,272,451,210,18,28,555,0)
)

Agrupamos por palabras claves ya que los datos eran muy extensos y al momento de hacer las Tablas de Frecuencia se realiza una tabla extensa

# AGRUPACIÓN POR PALABRAS CLAVE

df_nuevas$grupo <- case_when(
  str_detect(df_nuevas$variable, regex("FALL|STEPS|LADDERS|SCAFFOLD|PLATFORM|LOWER|WALKWAY", ignore_case = TRUE)) ~ "CAIDAS",
  str_detect(df_nuevas$variable, regex("HAND|OVER-EXERTION|LIFTING|PULLING|PUSHING|THROWING|MANUAL|OBJECTS", ignore_case = TRUE)) ~ "MANUALES",
  str_detect(df_nuevas$variable, regex("DUST|RESPIRATORY|RADIATIONS|TOXIC|CAUSTIC|NOXIOUS|INHALATION", ignore_case = TRUE)) ~ "POLVO Y RESPIRATORIO",
  str_detect(df_nuevas$variable, regex("EXPLOS|FLASH BURNS|WELDING", ignore_case = TRUE)) ~ "EXPLOSIVOS",
  str_detect(df_nuevas$variable, regex("HAULAGE|MOVING|ROLLING|SLIDING|MACHINERY|POWERED", ignore_case = TRUE)) ~ "TRANSPORTE / MAQUINARIA",
  str_detect(df_nuevas$variable, regex("ELECTRICAL|HEAT|HOT|FIRE", ignore_case = TRUE)) ~ "INCENDIOS / ELECTRICIDAD",
  str_detect(df_nuevas$variable, regex("DROWNING", ignore_case = TRUE)) ~ "AHOGAMIENTO",
  TRUE ~ "OTROS"
)

2.1 Calculamos las frecuencias absolutas y relativas simples

TDFgrupoFinal <- df_nuevas %>%
  group_by(grupo) %>%
  summarise(ni = sum(ni)) %>%
  mutate(hi = round((ni / sum(ni)) * 100, 0))


total_ni <- sum(TDFgrupoFinal$ni)
total_hi <- 100
TDFgrupoFinalCompleto <- rbind(
  TDFgrupoFinal,
  data.frame(grupo = "TOTAL", ni = total_ni, hi = total_hi)
)

print(TDFgrupoFinalCompleto)
## # A tibble: 9 × 3
##   grupo                       ni    hi
##   <chr>                    <dbl> <dbl>
## 1 AHOGAMIENTO                  2     0
## 2 CAIDAS                    1043    21
## 3 EXPLOSIVOS                  27     1
## 4 INCENDIOS / ELECTRICIDAD    29     1
## 5 MANUALES                  1164    24
## 6 OTROS                     1900    39
## 7 POLVO Y RESPIRATORIO       131     3
## 8 TRANSPORTE / MAQUINARIA    632    13
## 9 TOTAL                     4928   100

2.2 Tabla completa

tabla_clasificacion <- TDFgrupoFinalCompleto %>%
  gt() %>%
  tab_header(
    title = md("Tabla N° 1"),
    subtitle = md("Tabla de Distribucion de Frecuencias Absolutas y Relativas Simples de Accidentes Mineros")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo1")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE,
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = grupo == "TOTAL"
    )
  )

tabla_clasificacion
Tabla N° 1
Tabla de Distribucion de Frecuencias Absolutas y Relativas Simples de Accidentes Mineros
grupo ni hi
AHOGAMIENTO 2 0
CAIDAS 1043 21
EXPLOSIVOS 27 1
INCENDIOS / ELECTRICIDAD 29 1
MANUALES 1164 24
OTROS 1900 39
POLVO Y RESPIRATORIO 131 3
TRANSPORTE / MAQUINARIA 632 13
TOTAL 4928 100
Autor: Grupo1
#Comprobación del tamaño

sum(TDFgrupoFinal$ni)
## [1] 4928
sum(TDFgrupoFinal$hi)
## [1] 102

3 Gráficas de distribución de frecuencia

3.1 Diagrama de barras ni

#FRECUENCIAS ABSOLUTAS LOCAL(ni)

barplot(TDFgrupoFinal$ni, 
        main = "Gráfica Nº1: Frecuencia de Accidentes Mineros por Grupo (Local)",
        xlab = "Grupo de Accidentes", 
        ylab = "Cantidad (ni)",
        col = "steelblue",
        names.arg = TDFgrupoFinal$grupo,
        cex.names = 0.7,
        las = 2,
        ylim = c(0, max(TDFgrupoFinal$ni) * 1.2))

#FRECUENCIAS ABSOLUTAS GLOBAL(ni)
barplot(TDFgrupoFinal$ni,
       main = "Gráfica Nº2: Frecuencia de Tipo de Accidente por Grupo (Global)",
       xlab = "Grupo de Tipo de Acidente",
       ylab = "Cantidad (ni)",
       col = "steelblue",
       names.arg = TDFgrupoFinal$grupo,
       cex.names = 0.4,
       las = 2,
       ylim = c(0, max(TDFgrupoFinal$ni) * 1.2))

3.2 Diagrama de barras hi

barplot(TDFgrupoFinal$hi,
        main = "Gráfica Nº2: Porcentaje de Accidentes Mineros por Grupo",
        xlab = "Grupo de Accidentes",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDFgrupoFinal$grupo,
        cex.names = 0.4,
        las = 2,
        ylim = c(0, max(TDFgrupoFinal$hi) * 1.2))

barplot(TDFgrupoFinal$hi,
        main = "Gráfica Nº4: Porcentaje de Tipo de Acidente por Grupo (Global)",
        xlab = "Tipo de Acidente",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDFgrupoFinal$grupo,
        cex.names = 0.4,
        las = 2,
        ylim = c(0, 100))

3.3 Diagrama circular

Creamos el sector circular para tener una mejor visualización del porcentaje de accidentes por su tipo, usando la frecuencia relativa.

Colores <- colorRampPalette(c("lightskyblue", "darkblue"))

# Porcentajes
porcentaje <- paste0(round(TDFgrupoFinal$hi), "%")

# Texto de la leyenda (Grupo + porcentaje)
legend_text <- paste(TDFgrupoFinal$grupo, "-", porcentaje)

pie(TDFgrupoFinal$hi, 
    radius = 0.5, 
    col = Colores(nrow(TDFgrupoFinal)), 
    main = "Gráfica Nº5: Porcentaje de Tipo de accidente por Grupo",
    labels = NA)  

legend(x = 0.7, y = 0,  
       title = "Grupos",
       legend = legend_text,
       fill = Colores(nrow(TDFgrupoFinal)),
       cex = 0.5,
       title.cex = 1)

4 Indicadores

moda_ACCIDENTES <- TDFgrupoFinal[TDFgrupoFinal$ni == max(TDFgrupoFinal$ni), ]
print(moda_ACCIDENTES)
## # A tibble: 1 × 3
##   grupo    ni    hi
##   <chr> <dbl> <dbl>
## 1 OTROS  1900    39
'1 OTROS  1900    39'
## [1] "1 OTROS  1900    39"