Punto 1: Importar la base de datos

data <- read_csv("Accidentes_Barranquilla.csv")
## Rows: 25610 Columns: 11
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (6): HORA_ACCIDENTE, GRAVEDAD_ACCIDENTE, CLASE_ACCIDENTE, SITIO_EXACTO_...
## dbl  (4): CANT_HERIDOS_EN _SITIO_ACCIDENTE, CANT_MUERTOS_EN _SITIO_ACCIDENTE...
## dttm (1): FECHA_ACCIDENTE
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Punto 2: Análisis de las características de la base de datos

summary(data)  # Resumen general de la base de datos
##  FECHA_ACCIDENTE                  HORA_ACCIDENTE     GRAVEDAD_ACCIDENTE
##  Min.   :2018-01-01 00:00:00.00   Length:25610       Length:25610      
##  1st Qu.:2019-02-02 00:00:00.00   Class :character   Class :character  
##  Median :2020-04-23 12:00:00.00   Mode  :character   Mode  :character  
##  Mean   :2020-07-31 19:57:36.05                                        
##  3rd Qu.:2021-12-13 00:00:00.00                                        
##  Max.   :2024-06-30 00:00:00.00                                        
##                                                                        
##  CLASE_ACCIDENTE    SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN _SITIO_ACCIDENTE
##  Length:25610       Length:25610           Min.   : 1.000                  
##  Class :character   Class :character       1st Qu.: 1.000                  
##  Mode  :character   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(data)      # Estructura de la base de datos (tipos de datos)
## spc_tbl_ [25,610 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ FECHA_ACCIDENTE                 : POSIXct[1:25610], format: "2018-01-01" "2018-01-01" ...
##  $ HORA_ACCIDENTE                  : chr [1:25610] "01:30:00:am" "02:00:00:pm" "04:00:00:am" "04:30:00:am" ...
##  $ GRAVEDAD_ACCIDENTE              : chr [1:25610] "Con heridos" "Solo daños" "Solo daños" "Solo daños" ...
##  $ CLASE_ACCIDENTE                 : chr [1:25610] "Atropello" "Choque" "Choque" "Choque" ...
##  $ SITIO_EXACTO_ACCIDENTE          : chr [1:25610] "CL 87 9H 24" "CL 110 CR 46" "AV CIRCUNVALAR CR 9G" "CLLE 72 CRA 29" ...
##  $ CANT_HERIDOS_EN _SITIO_ACCIDENTE: num [1:25610] 1 NA NA NA NA 3 1 NA NA NA ...
##  $ CANT_MUERTOS_EN _SITIO_ACCIDENTE: num [1:25610] NA NA NA NA NA NA NA NA NA NA ...
##  $ CANTIDAD_ACCIDENTES             : num [1:25610] 1 1 1 1 1 1 1 1 1 1 ...
##  $ AÑO_ACCIDENTE                   : num [1:25610] 2018 2018 2018 2018 2018 ...
##  $ MES_ACCIDENTE                   : chr [1:25610] "January" "January" "January" "January" ...
##  $ DIA_ACCIDENTE                   : chr [1:25610] "Mon" "Mon" "Mon" "Mon" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   FECHA_ACCIDENTE = col_datetime(format = ""),
##   ..   HORA_ACCIDENTE = col_character(),
##   ..   GRAVEDAD_ACCIDENTE = col_character(),
##   ..   CLASE_ACCIDENTE = col_character(),
##   ..   SITIO_EXACTO_ACCIDENTE = col_character(),
##   ..   `CANT_HERIDOS_EN _SITIO_ACCIDENTE` = col_double(),
##   ..   `CANT_MUERTOS_EN _SITIO_ACCIDENTE` = col_double(),
##   ..   CANTIDAD_ACCIDENTES = col_double(),
##   ..   AÑO_ACCIDENTE = col_double(),
##   ..   MES_ACCIDENTE = col_character(),
##   ..   DIA_ACCIDENTE = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
dim(data)      # Dimensiones de la base (número de filas y columnas)
## [1] 25610    11
names(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

numeric_vars <- data %>% select_if(is.numeric)
categorical_vars <- data %>% select_if(is.character)

summary(numeric_vars)      # Resumen de variables numéricas
##  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  
## 
summary(categorical_vars)  # Resumen de variables categóricas
##  HORA_ACCIDENTE     GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE   
##  Length:25610       Length:25610       Length:25610      
##  Class :character   Class :character   Class :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

accidentes_graves <- filter(data, GRAVEDAD_ACCIDENTE == "Grave")
accidentes_julio <- filter(data, MES_ACCIDENTE == 7)
accidentes_con_heridos <- filter(data, `CANT_HERIDOS_EN _SITIO_ACCIDENTE` > 0)
accidentes_con_muertos <- filter(data, `CANT_MUERTOS_EN _SITIO_ACCIDENTE` > 0)
accidentes_2023 <- filter(data, AÑO_ACCIDENTE == 2023)

Punto 5: Exploración de la función table

table(data$GRAVEDAD_ACCIDENTE)  # Frecuencia de gravedad de accidentes
## 
## Con heridos Con muertos  Solo daños 
##        9901         252       15457
table(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

na_counts <- colSums(is.na(data))  # Número de valores NA por columna
na_counts
##                  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(data$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`, main = "Boxplot de heridos en accidente")

boxplot(data$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`, main = "Boxplot de muertos en accidente")

Punto 9.1: Visualización de valores atípicos con boxplots

boxplot(data$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`, main = "Heridos - Identificación de atípicos")

Punto 9.2: Gráficos de barras y histogramas

# Gráficos de barras
ggplot(data, aes(GRAVEDAD_ACCIDENTE)) + geom_bar() + ggtitle("Frecuencia de Gravedad de Accidentes")

ggplot(data, aes(CLASE_ACCIDENTE)) + geom_bar() + ggtitle("Frecuencia de Clases de Accidentes")

# Histogramas
ggplot(data, aes(`CANT_HERIDOS_EN _SITIO_ACCIDENTE`)) + geom_histogram(bins=20) + ggtitle("Histograma de Cantidad de Heridos en el Sitio del Accidente") 
## Warning: Removed 15626 rows containing non-finite outside the scale range
## (`stat_bin()`).

ggplot(data, aes(`CANT_MUERTOS_EN _SITIO_ACCIDENTE`)) + geom_histogram(bins=20) + ggtitle("Histograma de Cantidad de Muertos en el Sitio del Accidente")
## Warning: Removed 25358 rows containing non-finite outside the scale range
## (`stat_bin()`).