# 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")