Análisis de Accidentalidad en Barranquilla

Emanuel Carbonell

Introducción

Este análisis descriptivo se basa en la base de datos de accidentes de tráfico en Barranquilla, disponible en el portal de datos abiertos del gobierno de Colombia. El objetivo es comprender la estructura de los datos, analizar las características de las variables, identificar valores faltantes (NA) y atípicos, y visualizar los resultados de manera clara.

Contextualización de la base de datos

La base de datos recoge información sobre los accidentes de tránsito en Barranquilla, reportados en los Informes Policiales de Accidentes de Tránsito (IPAT). A continuación, se describen las variables incluidas en el conjunto de datos:

Data <- read_csv("Accidentalidad_en_Barranquilla_20240906.csv")
Variable Descripción
FECHA_ACCIDENTE Fecha del accidente
HORA_ACCIDENTE Hora del accidente
GRAVEDAD_ACCIDENTE Gravedad del accidente
CLASE_ACCIDENTE Clase de accidente
SITIO_EXACTO_ACCIDENTE Sitio exacto del accidente
CANT_HERIDOS_EN_SITIO_ACCIDENTE Cantidad de heridos en el sitio del accidente
CANT_MUERTOS_EN_SITIO_ACCIDENTE Cantidad de muertos en el sitio del accidente
CANTIDAD_ACCIDENTES Cantidad de accidentes
AÑO_ACCIDENTE Año del accidente
MES_ACCIDENTE Mes del accidente
DIA_ACCIDENTE Día del accidente

Análisis de las Características del dataset

# Número de filas y columnas
dim(Data)
## [1] 25610    11
# Resumen del dataset
summary(Data)
##  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  
##                                       
##                                       
##                                       
## 

Análisis de Variables según su Tipo

En esta sección, clasificaremos las variables de la base de datos de accidentes en Barranquilla según su tipo: numéricas o categóricas. Esta distinción es crucial porque determina las técnicas de análisis y visualización que utilizaremos. A continuación, realizamos un análisis detallado para cada tipo de variable, destacando sus características principales.

summary(Data$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   1.000   1.000   1.472   2.000  42.000   15626
summary(Data$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   1.000   1.000   1.036   1.000   2.000   25358
summary(Data$CANTIDAD_ACCIDENTES)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       1       1       1       1       1       2
summary(Data$AÑO_ACCIDENTE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2018    2019    2020    2020    2021    2024
table(Data$GRAVEDAD_ACCIDENTE)
## 
## Con heridos Con muertos  Solo daños 
##        9901         252       15457
table(Data$CLASE_ACCIDENTE)
## 
##      Atropello Caida Ocupante         Choque       Incendio           Otro 
##           1344            194          23819             13            123 
##    Volcamiento 
##            117
table(Data$MES_ACCIDENTE)
## 
##     April    August  December  February   January      July      June     March 
##      2010      1918      2189      2477      2349      1932      2103      2446 
##       May  November   October September 
##      2121      1995      2090      1980
table(Data$DIA_ACCIDENTE)
## 
##  Fri  Mon  Sat  Sun  Thu  Tue  Wed 
## 3920 3774 3735 2577 3756 4009 3839

Filtro de Datos

El filtrado de datos nos permite enfocar el análisis en subconjuntos específicos que revelan patrones importantes en los accidentes de tráfico en Barranquilla. Aplicaremos diferentes filtros, como clase y gravedad del accidente, año, mes y cantidad de heridos, para identificar tendencias y características relevantes en los datos.

# Filtro por Clase de Accidente
Choque <- subset(Data, CLASE_ACCIDENTE == "Choque")
Choque
## # A tibble: 23,819 × 11
##    FECHA_ACCIDENTE     HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
##    <dttm>              <chr>          <chr>              <chr>          
##  1 2018-01-01 00:00:00 02:00:00:pm    Solo daños         Choque         
##  2 2018-01-01 00:00:00 04:00:00:am    Solo daños         Choque         
##  3 2018-01-01 00:00:00 04:30:00:am    Solo daños         Choque         
##  4 2018-01-01 00:00:00 05:20:00:pm    Solo daños         Choque         
##  5 2018-01-01 00:00:00 06:00:00:pm    Con heridos        Choque         
##  6 2018-01-02 00:00:00 02:30:00:pm    Solo daños         Choque         
##  7 2018-01-02 00:00:00 03:00:00:pm    Solo daños         Choque         
##  8 2018-01-02 00:00:00 03:45:00:pm    Solo daños         Choque         
##  9 2018-01-02 00:00:00 04:10:00:pm    Solo daños         Choque         
## 10 2018-01-02 00:00:00 05:30:00:pm    Solo daños         Choque         
## # ℹ 23,809 more rows
## # ℹ 7 more variables: SITIO_EXACTO_ACCIDENTE <chr>,
## #   `CANT_HERIDOS_EN _SITIO_ACCIDENTE` <dbl>,
## #   `CANT_MUERTOS_EN _SITIO_ACCIDENTE` <dbl>, CANTIDAD_ACCIDENTES <dbl>,
## #   AÑO_ACCIDENTE <dbl>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
#Filtro por Gravedad del Accidente
Fatal <- subset(Data, GRAVEDAD_ACCIDENTE == "Con muertos")
Fatal
## # A tibble: 252 × 11
##    FECHA_ACCIDENTE     HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
##    <dttm>              <chr>          <chr>              <chr>          
##  1 2018-01-06 00:00:00 12:15:00:pm    Con muertos        Atropello      
##  2 2018-01-21 00:00:00 10:30:00:pm    Con muertos        Choque         
##  3 2018-01-22 00:00:00 01:30:00:pm    Con muertos        Atropello      
##  4 2018-01-25 00:00:00 05:20:00:pm    Con muertos        Choque         
##  5 2018-02-04 00:00:00 09:40:00:pm    Con muertos        Choque         
##  6 2018-02-10 00:00:00 04:00:00:pm    Con muertos        Volcamiento    
##  7 2018-02-23 00:00:00 01:10:00:am    Con muertos        Choque         
##  8 2018-03-04 00:00:00 05:10:00:am    Con muertos        Choque         
##  9 2018-03-07 00:00:00 05:55:00:am    Con muertos        Atropello      
## 10 2018-03-22 00:00:00 02:30:00:pm    Con muertos        Atropello      
## # ℹ 242 more rows
## # ℹ 7 more variables: SITIO_EXACTO_ACCIDENTE <chr>,
## #   `CANT_HERIDOS_EN _SITIO_ACCIDENTE` <dbl>,
## #   `CANT_MUERTOS_EN _SITIO_ACCIDENTE` <dbl>, CANTIDAD_ACCIDENTES <dbl>,
## #   AÑO_ACCIDENTE <dbl>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
# Filtro por Año del Accidente
Accidentes2023 <- subset(Data, AÑO_ACCIDENTE == 2023)
Accidentes2023
## # A tibble: 1,662 × 11
##    FECHA_ACCIDENTE     HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
##    <dttm>              <chr>          <chr>              <chr>          
##  1 2023-01-01 00:00:00 07:50:00:am    Con heridos        Choque         
##  2 2023-01-01 00:00:00 11:10:00:am    Con heridos        Choque         
##  3 2023-01-02 00:00:00 02:15:00:am    Con heridos        Choque         
##  4 2023-01-02 00:00:00 07:00:00:pm    Con heridos        Atropello      
##  5 2023-01-02 00:00:00 09:00:00:pm    Con heridos        Choque         
##  6 2023-01-02 00:00:00 10:15:00:am    Con heridos        Choque         
##  7 2023-01-02 00:00:00 12:40:00:am    Con heridos        Choque         
##  8 2023-01-03 00:00:00 05:15:00:pm    Con heridos        Choque         
##  9 2023-01-03 00:00:00 07:10:00:am    Con heridos        Choque         
## 10 2023-01-04 00:00:00 01:10:00:pm    Con heridos        Choque         
## # ℹ 1,652 more rows
## # ℹ 7 more variables: SITIO_EXACTO_ACCIDENTE <chr>,
## #   `CANT_HERIDOS_EN _SITIO_ACCIDENTE` <dbl>,
## #   `CANT_MUERTOS_EN _SITIO_ACCIDENTE` <dbl>, CANTIDAD_ACCIDENTES <dbl>,
## #   AÑO_ACCIDENTE <dbl>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
# Filtro por Mes del Accidente:
AccidentesEnero <- subset(Data, MES_ACCIDENTE == "Enero")
AccidentesEnero
## # A tibble: 0 × 11
## # ℹ 11 variables: FECHA_ACCIDENTE <dttm>, HORA_ACCIDENTE <chr>,
## #   GRAVEDAD_ACCIDENTE <chr>, CLASE_ACCIDENTE <chr>,
## #   SITIO_EXACTO_ACCIDENTE <chr>, CANT_HERIDOS_EN _SITIO_ACCIDENTE <dbl>,
## #   CANT_MUERTOS_EN _SITIO_ACCIDENTE <dbl>, CANTIDAD_ACCIDENTES <dbl>,
## #   AÑO_ACCIDENTE <dbl>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
# Filtro por Cantidad de Heridos en el Sitio del Accidente
Heridos <- subset(Data, `CANT_HERIDOS_EN _SITIO_ACCIDENTE` > 3)
Heridos
## # A tibble: 303 × 11
##    FECHA_ACCIDENTE     HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
##    <dttm>              <chr>          <chr>              <chr>          
##  1 2018-01-07 00:00:00 08:30:00:pm    Con heridos        Choque         
##  2 2018-01-11 00:00:00 09:40:00:am    Con heridos        Choque         
##  3 2018-01-15 00:00:00 03:00:00:am    Con heridos        Choque         
##  4 2018-01-18 00:00:00 11:30:00:am    Con heridos        Choque         
##  5 2018-01-19 00:00:00 11:50:00:pm    Con heridos        Choque         
##  6 2018-02-09 00:00:00 01:30:00:am    Con heridos        Choque         
##  7 2018-02-11 00:00:00 11:50:00:pm    Con heridos        Choque         
##  8 2018-02-28 00:00:00 08:45:00:pm    Con heridos        Choque         
##  9 2018-03-06 00:00:00 05:00:00:am    Con heridos        Choque         
## 10 2018-03-06 00:00:00 07:00:00:am    Con heridos        Choque         
## # ℹ 293 more rows
## # ℹ 7 more variables: SITIO_EXACTO_ACCIDENTE <chr>,
## #   `CANT_HERIDOS_EN _SITIO_ACCIDENTE` <dbl>,
## #   `CANT_MUERTOS_EN _SITIO_ACCIDENTE` <dbl>, CANTIDAD_ACCIDENTES <dbl>,
## #   AÑO_ACCIDENTE <dbl>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>

Exploración con la Función table

#Cantidad de heridos
table(Data$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`)
## 
##    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
## 6911 2301  469  155   57   29   14    9    6    7    6    7    2    2    1    1 
##   18   19   20   21   22   23   42 
##    1    1    1    1    1    1    1
# Cantidad de muertos
table(Data$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`)
## 
##   1   2 
## 243   9
# Clase de accidente
table(Data$CLASE_ACCIDENTE)
## 
##      Atropello Caida Ocupante         Choque       Incendio           Otro 
##           1344            194          23819             13            123 
##    Volcamiento 
##            117
# Gravedad del accidente
table(Data$GRAVEDAD_ACCIDENTE)
## 
## Con heridos Con muertos  Solo daños 
##        9901         252       15457

Visualización de gráficos

Para visualizar los datos y entender mejor las distribuciones y valores atípicos, utilizaremos gráficos de barras, histogramas y boxplots.

Identificación de Valores Faltantes (NA)

Para analizar la integridad de los datos, es importante identificar las variables que contienen valores faltantes (NA). A continuación, se presenta la distribución de valores NA para cada variable del conjunto de datos. Este análisis permite detectar posibles problemas en la captura de datos que podrían afectar los resultados del estudio.

El gráfico de barras revela que las variables CANT_HERIDOS_EN_SITIO_ACCIDENTE y CANT_MUERTOS_EN_SITIO_ACCIDENTE presentan la mayor cantidad de valores faltantes, con más de 15,000 y 25,000 NA respectivamente. Esto indica una falta significativa de información sobre el número de heridos y muertos en los registros de accidentes, lo cual puede afectar la calidad del análisis de la severidad de los accidentes y la construcción de modelos predictivos. En contraste, las demás variables como SITIO_EXACTO_ACCIDENTE, MES_ACCIDENTE, HORA_ACCIDENTE, y GRAVEDAD_ACCIDENTE tienen pocos o ningún valor faltante, sugiriendo que estos datos están más completos y son más confiables para análisis adicionales. Dada la gran cantidad de datos faltantes en variables clave, es necesario considerar estrategias como la imputación o la eliminación de registros, dependiendo del contexto del análisis y los objetivos específicos. Esta situación resalta la importancia de evaluar cuidadosamente cómo manejar los valores faltantes para asegurar la integridad y validez del análisis de datos. # Identificación de Valores Atípicos

El análisis de valores atípicos es fundamental para detectar puntos de datos que se desvían significativamente del resto. Estos valores pueden ser indicativos de errores de entrada o eventos únicos que requieren una atención especial. Utilizando gráficos como boxplots, podemos visualizar la dispersión y detectar los valores extremos presentes en el conjunto de datos.

El gráfico de boxplots muestra la distribución y los valores atípicos para las variables CANT_HERIDOS_EN_SITIO_ACCIDENTE, CANT_MUERTOS_EN_SITIO_ACCIDENTE, y CANTIDAD_ACCIDENTES en el conjunto de datos. En el caso de CANT_HERIDOS_EN_SITIO_ACCIDENTE, el boxplot revela una gran cantidad de valores atípicos, representados por puntos azules, que se extienden mucho más allá del rango intercuartílico, alcanzando hasta 40 heridos en algunos accidentes. Esto indica que aunque la mayoría de los accidentes reportan pocos o ningún herido, hay eventos extremos con un número significativamente mayor de heridos.

Para la variable CANT_MUERTOS_EN_SITIO_ACCIDENTE, el boxplot muestra un solo valor atípico destacado, con la mayoría de los registros indicando 0 o 1 muerto. Esto sugiere que los accidentes con múltiples muertes son raros, pero existen casos excepcionales que deben ser considerados en el análisis. Finalmente, en el boxplot de CANTIDAD_ACCIDENTES, se observa un valor atípico notable, lo que indica que la mayoría de los sitios reportan un solo accidente, mientras que hay algunos sitios con registros de múltiples accidentes que podrían ser de interés para un análisis más detallado. En conjunto, estos gráficos destacan la presencia de valores extremos en las variables clave del conjunto de datos, lo que sugiere la necesidad de manejar estos outliers cuidadosamente en cualquier análisis o modelado posterior.