Verificamos que rstudio nos lea correctamente los datos
datos <- read.csv("Datos Mineros.csv",
header = TRUE,
sep = ";",
dec = ".",
fileEncoding = "latin1")
ACCIDENTES <- datos$ACCIDENT_TYPE
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)
# 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"
)
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
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
#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))
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))
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)
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"