# Tarea #5 en R
# Punto 1: Importar la base de datos
library(dplyr) # Cargar librería para manipulación de datos
##
## 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(ggplot2) # Cargar librería para gráficos
accidents_data <- read.csv("Accidentes_Barranquilla.csv")
# Punto 2: Análisis de las características de la base de datos
summary(accidents_data) # Resumen general de la base de datos
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## Length:25610 Length:25610 Length:25610 Length:25610
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE
## Length:25610 Min. : 1.000
## Class :character 1st Qu.: 1.000
## Mode :character Median : 1.000
## Mean : 1.472
## 3rd Qu.: 2.000
## Max. :42.000
## NA's :15626
## CANT_MUERTOS_EN._SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## Min. :1.000 Min. :1 Min. :2018
## 1st Qu.:1.000 1st Qu.:1 1st Qu.:2019
## Median :1.000 Median :1 Median :2020
## Mean :1.036 Mean :1 Mean :2020
## 3rd Qu.:1.000 3rd Qu.:1 3rd Qu.:2021
## Max. :2.000 Max. :2 Max. :2024
## NA's :25358
## MES_ACCIDENTE DIA_ACCIDENTE
## Length:25610 Length:25610
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
str(accidents_data) # Estructura de la base de datos (tipos de datos)
## 'data.frame': 25610 obs. of 11 variables:
## $ FECHA_ACCIDENTE : chr "2018-01-01T00:00:00.000" "2018-01-01T00:00:00.000" "2018-01-01T00:00:00.000" "2018-01-01T00:00:00.000" ...
## $ HORA_ACCIDENTE : chr "01:30:00:am" "02:00:00:pm" "04:00:00:am" "04:30:00:am" ...
## $ GRAVEDAD_ACCIDENTE : chr "Con heridos" "Solo daños" "Solo daños" "Solo daños" ...
## $ CLASE_ACCIDENTE : chr "Atropello" "Choque" "Choque" "Choque" ...
## $ SITIO_EXACTO_ACCIDENTE : chr "CL 87 9H 24" "CL 110 CR 46" "AV CIRCUNVALAR CR 9G" "CLLE 72 CRA 29" ...
## $ CANT_HERIDOS_EN._SITIO_ACCIDENTE: int 1 NA NA NA NA 3 1 NA NA NA ...
## $ CANT_MUERTOS_EN._SITIO_ACCIDENTE: int NA NA NA NA NA NA NA NA NA NA ...
## $ CANTIDAD_ACCIDENTES : int 1 1 1 1 1 1 1 1 1 1 ...
## $ AÑO_ACCIDENTE : int 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 ...
## $ MES_ACCIDENTE : chr "January" "January" "January" "January" ...
## $ DIA_ACCIDENTE : chr "Mon" "Mon" "Mon" "Mon" ...
dim(accidents_data) # Dimensiones de la base (número de filas y columnas)
## [1] 25610 11
colnames(accidents_data) # Nombres de las variables
## [1] "FECHA_ACCIDENTE" "HORA_ACCIDENTE"
## [3] "GRAVEDAD_ACCIDENTE" "CLASE_ACCIDENTE"
## [5] "SITIO_EXACTO_ACCIDENTE" "CANT_HERIDOS_EN._SITIO_ACCIDENTE"
## [7] "CANT_MUERTOS_EN._SITIO_ACCIDENTE" "CANTIDAD_ACCIDENTES"
## [9] "AÑO_ACCIDENTE" "MES_ACCIDENTE"
## [11] "DIA_ACCIDENTE"
# Punto 3: Análisis de variables según su tipo: numéricas y categóricas
numerical_features <- select_if(accidents_data, is.numeric)
categorical_features <- select_if(accidents_data, is.character)
# Resumen de variables numéricas
summary(numerical_features)
## CANT_HERIDOS_EN._SITIO_ACCIDENTE CANT_MUERTOS_EN._SITIO_ACCIDENTE
## Min. : 1.000 Min. :1.000
## 1st Qu.: 1.000 1st Qu.:1.000
## Median : 1.000 Median :1.000
## Mean : 1.472 Mean :1.036
## 3rd Qu.: 2.000 3rd Qu.:1.000
## Max. :42.000 Max. :2.000
## NA's :15626 NA's :25358
## CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## Min. :1 Min. :2018
## 1st Qu.:1 1st Qu.:2019
## Median :1 Median :2020
## Mean :1 Mean :2020
## 3rd Qu.:1 3rd Qu.:2021
## Max. :2 Max. :2024
##
# Resumen de variables categóricas
summary(categorical_features)
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## Length:25610 Length:25610 Length:25610 Length:25610
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## SITIO_EXACTO_ACCIDENTE MES_ACCIDENTE DIA_ACCIDENTE
## Length:25610 Length:25610 Length:25610
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
# Punto 4: Aplicar filtros
# Filtro 1: Accidentes graves
serious_accidents <- filter(accidents_data, GRAVEDAD_ACCIDENTE == "Grave")
# Filtro 2: Accidentes ocurridos en un mes específico
july_accidents <- filter(accidents_data, MES_ACCIDENTE == 7)
# Filtro 3: Accidentes con heridos
injury_accidents <- filter(accidents_data, CANT_HERIDOS_EN._SITIO_ACCIDENTE > 0)
# Filtro 4: Accidentes con muertos
fatal_accidents <- filter(accidents_data, CANT_MUERTOS_EN._SITIO_ACCIDENTE > 0)
# Filtro 5: Accidentes ocurridos en un año específico
accidents_2023 <- filter(accidents_data, AÑO_ACCIDENTE == 2023)
# Punto 5: Exploración de la función `table`
table(accidents_data$GRAVEDAD_ACCIDENTE) # Frecuencia de gravedad de accidentes
##
## Con heridos Con muertos Solo daños
## 9901 252 15457
table(accidents_data$CLASE_ACCIDENTE) # Frecuencia de clases de accidentes
##
## Atropello Caida Ocupante Choque Incendio Otro
## 1344 194 23819 13 123
## Volcamiento
## 117
# Punto 6: Identificación de valores NA
missing_values <- colSums(is.na(accidents_data)) # Número de valores NA por columna
print(missing_values)
## FECHA_ACCIDENTE HORA_ACCIDENTE
## 0 0
## GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## 0 0
## SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN._SITIO_ACCIDENTE
## 0 15626
## CANT_MUERTOS_EN._SITIO_ACCIDENTE CANTIDAD_ACCIDENTES
## 25358 0
## AÑO_ACCIDENTE MES_ACCIDENTE
## 0 0
## DIA_ACCIDENTE
## 0
# Punto 7: Análisis de valores atípicos usando boxplots
boxplot(accidents_data$CANT_HERIDOS_EN._SITIO_ACCIDENTE, main = "Boxplot de heridos en accidente", ylab = "Cantidad de heridos")

boxplot(accidents_data$CANT_MUERTOS_EN._SITIO_ACCIDENTE, main = "Boxplot de muertos en accidente", ylab = "Cantidad de muertos")
