Esta base de datos contiene información sobre los accidentes de tránsito ocurridos en el distrito de Barranquilla según los informes policiales de accidentes de tránsito (IPAT). La información de la vigencia actual es preliminar y está sujeta a cambios.
# Leer los datos
datos <- read_csv("C:/Users/user/Documents/Accidentalidad_en_Barranquilla_20240817.csv",
locale = locale(encoding = "UTF-8"),
skip_empty_rows = TRUE)
## 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.
#Mostrar la tabla
kable(datos[1:20,], caption= "Tabla 1: Base de datos, Accidentalidad en Barranquilla") %>%
kable_styling(full_width = F) %>%
scroll_box(width = "900px", height = "450px")
| FECHA_ACCIDENTE | HORA_ACCIDENTE | GRAVEDAD_ACCIDENTE | CLASE_ACCIDENTE | SITIO_EXACTO_ACCIDENTE | CANT_HERIDOS_EN _SITIO_ACCIDENTE | CANT_MUERTOS_EN _SITIO_ACCIDENTE | CANTIDAD_ACCIDENTES | AÑO_ACCIDENTE | MES_ACCIDENTE | DIA_ACCIDENTE |
|---|---|---|---|---|---|---|---|---|---|---|
| 2018-01-01 | 01:30:00:am | Con heridos | Atropello | CL 87 9H 24 | 1 | NA | 1 | 2018 | January | Mon |
| 2018-01-01 | 02:00:00:pm | Solo daños | Choque | CL 110 CR 46 | NA | NA | 1 | 2018 | January | Mon |
| 2018-01-01 | 04:00:00:am | Solo daños | Choque | AV CIRCUNVALAR CR 9G | NA | NA | 1 | 2018 | January | Mon |
| 2018-01-01 | 04:30:00:am | Solo daños | Choque | CLLE 72 CRA 29 | NA | NA | 1 | 2018 | January | Mon |
| 2018-01-01 | 05:20:00:pm | Solo daños | Choque | VIA 40 CALLE 75 | NA | NA | 1 | 2018 | January | Mon |
| 2018-01-01 | 06:00:00:pm | Con heridos | Choque | CR 8 CL 41 | 3 | NA | 1 | 2018 | January | Mon |
| 2018-01-01 | 12:50:00:am | Con heridos | Atropello | CLLE 119B CRA 11B | 1 | NA | 1 | 2018 | January | Mon |
| 2018-01-02 | 02:30:00:pm | Solo daños | Choque | CARRERA 25 37-42 | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 03:00:00:pm | Solo daños | Choque | CR 51B 1D 35 | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 03:45:00:pm | Solo daños | Choque | VIA 40 CLLE 85 | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 04:10:00:pm | Solo daños | Choque | CL 19 CR 2C | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 05:30:00:pm | Solo daños | Choque | VIA 40 CL 77B | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 05:45:00:pm | Solo daños | Choque | CL 89 CON 75B | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 07:00:00:pm | Solo daños | Choque | CL 47 CR 38 | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 07:30:00:pm | Solo daños | Choque | CLLE 96 CRA 64 | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 08:40:00:pm | Con heridos | Choque | CIRCUNVALAR CR 9G | 2 | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 09:00:00:am | Solo daños | Choque | CLLE 39 CRA 27 | NA | NA | 1 | 2018 | January | Tue |
| 2018-01-02 | 11:00:00:pm | Con heridos | Choque | CL 30 CR 30 | 1 | NA | 1 | 2018 | January | Tue |
| 2018-01-03 | 02:20:00:pm | Solo daños | Choque | CL 110 CR 6Q | NA | NA | 1 | 2018 | January | Wed |
| 2018-01-03 | 03:15:00:pm | Solo daños | Choque | CL 19 CR 5C | NA | NA | 1 | 2018 | January | Wed |
Las variables son:
# Mostrar nombres de las variables
variables <- names(datos)
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"
Significado de cada variable:
-FECHA_ACCIDENTE : la fecha en la que ocurrió el accidente.
-HORA_ACCIDENTE : la hora en la que ocurrió el accidente.
-GRAVEDAD_ACCIDENTE : qué tan grave fue el accidente, en términos de si
hubo heridos, muertos o daños. -CLASE_ACCIDENTE : qué tipo de accidente
es (atropello, choque, caida ocupante, volcamiento, incendio,
otro).
-SITIO_EXACTO_ACCIDENTE : dirección del sitio donde ocurrió el
accidente.
-CANT_HERIDOS_EN _SITIO_ACCIDENTE : cantidad de heridos en el
accidente.
-CANT_MUERTOS_EN _SITIO_ACCIDENTE : cantidad de muertos en el
accidente.
-CANTIDAD_ACCIDENTES : cantidad de accidentes en ese momento.
-AÑO_ACCIDENTE : el año en el que ocurrió el accidente.
-MES_ACCIDENTE : el mes en el que ocurrió el accidente.
-DIA_ACCIDENTE : el día de la semana en el que ocurrió el accidente.
#Realizo el cambio porque esta variable realmente no se utiliza para cálculos numéricos, es de tipo caracter.
datos$AÑO_ACCIDENTE <- as.character(datos$AÑO_ACCIDENTE)
#Verifico si hay algun problema en la base de datos, sin embargo, todo está funcionando bien
print(problems(datos) )
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
Esto indica que no se encontraron problemas en los datos, ya que el tibble tiene 0 filas y 5 columnas, es decir el tibble está vacío.
Verificamos los datos viendo el encabezado y la cola de los datos:
head(datos)
## # A tibble: 6 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2018-01-01 00:00:00 01:30:00:am Con heridos Atropello
## 2 2018-01-01 00:00:00 02:00:00:pm Solo daños Choque
## 3 2018-01-01 00:00:00 04:00:00:am Solo daños Choque
## 4 2018-01-01 00:00:00 04:30:00:am Solo daños Choque
## 5 2018-01-01 00:00:00 05:20:00:pm Solo daños Choque
## 6 2018-01-01 00:00:00 06:00:00:pm Con heridos Choque
## # ℹ 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
tail(datos)
## # A tibble: 6 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2024-06-29 00:00:00 10:00:00:pm Con heridos Choque
## 2 2024-06-29 00:00:00 10:15:00:am Con heridos Choque
## 3 2024-06-30 00:00:00 02:00:00:am Con heridos Choque
## 4 2024-06-30 00:00:00 02:00:00:pm Con heridos Choque
## 5 2024-06-30 00:00:00 05:00:00:pm Con muertos Choque
## 6 2024-06-30 00:00:00 06:30:00:pm Con heridos Atropello
## # ℹ 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
Dimensión (número de filas y columnas):
dim(datos)
## [1] 25610 11
Filas: 25610
Columnas: 11
Analizamos ahora la estructura de la base de datos:
str(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 : chr [1:25610] "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>
Lo que nos mostro el tipo de cada variable, en general:
-FECHA_ACCIDENTE : character (nominal), no se usa para cálculos en el tiempo.
-HORA_ACCIDENTE : character (nominal), no se usa para cálculos, solo como cadena de texto.
-GRAVEDAD_ACCIDENTE : character (nominal), no hay un orden, solo se clasifican en heridos, muertos o solo daños.
-CLASE_ACCIDENTE : character (nominal), no hay un orden, solo se clasifican en atropello, choque, caida ocupante, volcamiento, incendio, otro.
-SITIO_EXACTO_ACCIDENTE : character (nominal), no hay un orden en las direcciones.
-CANT_HERIDOS_EN _SITIO_ACCIDENTE : numeric (discreto), el número de heridos es un conteo discreto.
-CANT_MUERTOS_EN _SITIO_ACCIDENTE : numeric (discreto), el número de muertos es un conteo discreto.
-CANTIDAD_ACCIDENTES : numeric (discreto), la cantidad de accidentes es cun conteo discreto.
-AÑO_ACCIDENTE : character (nominal), el año puede tomarse como categórica o numérica; sin embargo, en este trabajo no se realizan cálculos matemáticos con este, solo se usa para comparación.
-MES_ACCIDENTE : character (nominal), los meses tienen un orden natural, pero se trabajan como cadena de texto no por número.
-DIA_ACCIDENTE : character (nominal), se refiere a los nombres de los días, no tiene un orden específico en este caso.
Nota: En este apartado se juntaron los puntos 3 y 5.
Cantidad de heridos en accidente:
summary(datos$`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
table(datos$`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
frecuenciascantheridos <- data.frame(
cantheridos = c("1", "2", "3", "4", "5", "6", "7","8","9","10","11","12","13","14","15","16","18","19","20","21","22","23","42"),
Frecuenciacantheridos = c(6911,2301,469,155,57,29,14,9,6,7,6,7,2,2,1,1,1,1,1,1,1,1,1)
)
ggplot(frecuenciascantheridos, aes(x = reorder(cantheridos, -Frecuenciacantheridos), y = Frecuenciacantheridos)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de cantidad de heridos en sitios de accidentes",
x = "Cantidad de heridos",
y = "Frecuencia") +
theme_minimal()
Cantidad de muertos en accidente:
summary(datos$`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
table(datos$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`)
##
## 1 2
## 243 9
frecuenciascantmuertos <- data.frame(
cantmuertos = c("1","2"),
Frecuenciadiascantmuertos = c(243,9)
)
ggplot(frecuenciascantmuertos, aes(x = reorder(cantmuertos, -Frecuenciadiascantmuertos), y = Frecuenciadiascantmuertos)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de la cantidad de muertos en sitios de accidentes",
x = "Cantidad de muertos",
y = "Frecuencia") +
theme_minimal()
Cantidad de accidentes:
summary(datos$CANTIDAD_ACCIDENTES)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 1 1 1 1 2
table(datos$CANTIDAD_ACCIDENTES)
##
## 1 2
## 25605 5
frecuenciascantacc <- data.frame(
cantacc = c("1","2"),
Frecuenciadiascantacc = c(25605,5)
)
ggplot(frecuenciascantacc, aes(x = reorder(cantacc, -Frecuenciadiascantacc), y = Frecuenciadiascantacc)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de la cantidad de accidentes",
x = "Cantidad de accidentes",
y = "Frecuencia") +
theme_minimal()
Como conclusión vemos que:
-En la mayoría de casos solo hay heridos en el momento de los
accidentes.
-Hay pocos muertos en comparación con los heridos en el momento de los
accidentes.
-No suceden muchos accidentes al mismo tiempo.
Fechas donde ocurrieron los accidentes:
fecha_factor<-as.factor(datos$FECHA_ACCIDENTE)
summary(fecha_factor)
## 2018-06-08 2018-11-16 2019-05-22 2019-10-05 2018-10-19 2019-11-20 2020-02-13
## 34 33 31 30 29 29 29
## 2018-03-03 2018-03-06 2018-06-13 2019-11-01 2020-12-21 2018-11-28 2019-08-12
## 28 28 28 28 28 27 27
## 2019-12-03 2020-01-28 2018-05-29 2018-09-17 2018-09-26 2019-02-08 2019-02-18
## 27 27 26 26 26 26 26
## 2019-03-18 2019-07-26 2020-01-29 2021-12-17 2022-04-09 2018-03-20 2018-04-18
## 26 26 26 26 26 25 25
## 2018-04-25 2018-04-26 2018-07-27 2018-09-20 2018-10-09 2018-11-13 2018-12-03
## 25 25 25 25 25 25 25
## 2018-12-10 2019-01-23 2019-06-18 2019-06-25 2019-08-14 2019-09-10 2019-09-14
## 25 25 25 25 25 25 25
## 2019-12-05 2020-02-10 2021-12-07 2021-12-23 2022-02-28 2018-02-23 2018-02-24
## 25 25 25 25 25 24 24
## 2018-03-17 2018-03-21 2018-04-14 2018-07-16 2018-08-21 2018-09-21 2018-09-24
## 24 24 24 24 24 24 24
## 2018-10-13 2018-10-29 2018-11-08 2018-11-30 2019-03-21 2019-07-25 2019-08-27
## 24 24 24 24 24 24 24
## 2019-08-30 2019-09-03 2019-09-06 2019-09-16 2019-09-23 2021-09-07 2021-10-05
## 24 24 24 24 24 24 24
## 2021-12-28 2022-02-04 2022-03-22 2022-05-28 2018-01-15 2018-01-16 2018-01-31
## 24 24 24 24 23 23 23
## 2018-03-15 2018-06-18 2018-09-19 2018-12-04 2019-01-17 2019-04-30 2019-05-31
## 23 23 23 23 23 23 23
## 2020-02-15 2021-02-27 2022-02-01 2022-02-25 2022-03-08 2022-03-19 2018-01-25
## 23 23 23 23 23 23 22
## 2018-02-01 2018-02-15 2018-02-26 2018-04-11 2018-04-24 2018-05-30 2018-06-12
## 22 22 22 22 22 22 22
## 2018-07-17 (Other)
## 22 23148
Horas en las que ocurrieron los accidentes:
hora_factor<-as.factor(datos$HORA_ACCIDENTE)
summary(hora_factor)
## 03:00:00:pm 04:00:00:pm 12:30:00:pm 05:00:00:pm 08:00:00:am 02:00:00:pm
## 408 408 387 384 384 371
## 01:00:00:pm 08:30:00:am 04:30:00:pm 10:00:00:am 07:30:00:am 05:30:00:pm
## 368 344 332 328 325 324
## 07:00:00:am 09:00:00:am 03:30:00:pm 12:00:00:pm 07:00:00:pm 11:00:00:am
## 321 321 317 315 314 314
## 06:00:00:pm 02:30:00:pm 06:30:00:pm 01:30:00:pm 10:30:00:am 11:30:00:am
## 309 300 299 292 287 287
## 09:30:00:am 07:30:00:pm 08:30:00:pm 08:00:00:pm 12:40:00:pm 03:20:00:pm
## 269 268 239 238 220 206
## 12:10:00:pm 07:50:00:am 05:20:00:pm 06:40:00:pm 07:40:00:am 09:00:00:pm
## 194 189 188 184 181 180
## 06:20:00:pm 12:20:00:pm 02:20:00:pm 04:40:00:pm 01:10:00:pm 07:10:00:am
## 179 176 173 173 172 172
## 05:10:00:pm 01:40:00:pm 02:50:00:pm 04:20:00:pm 10:40:00:am 11:20:00:am
## 170 169 169 167 167 166
## 09:30:00:pm 08:40:00:am 07:20:00:am 01:50:00:pm 01:20:00:pm 03:40:00:pm
## 164 163 162 161 160 157
## 10:20:00:am 08:20:00:am 06:30:00:am 02:40:00:pm 11:40:00:am 05:40:00:pm
## 157 156 155 153 153 152
## 05:50:00:pm 02:10:00:pm 12:50:00:pm 04:50:00:pm 03:10:00:pm 08:10:00:am
## 152 151 150 149 148 148
## 06:10:00:pm 09:10:00:am 07:20:00:pm 04:10:00:pm 09:40:00:am 06:50:00:am
## 146 144 143 142 142 141
## 09:50:00:am 10:50:00:am 10:00:00:pm 06:40:00:am 09:20:00:am 08:50:00:am
## 140 140 139 136 134 133
## 06:50:00:pm 07:40:00:pm 07:10:00:pm 03:50:00:pm 10:10:00:am 11:10:00:am
## 130 129 126 125 124 122
## 11:50:00:am 10:30:00:pm 11:00:00:pm 08:10:00:pm 06:00:00:am 12:15:00:pm
## 119 112 101 100 98 97
## 12:45:00:pm 07:50:00:pm 05:15:00:pm 08:40:00:pm 09:40:00:pm 06:20:00:am
## 97 96 94 90 89 87
## 07:15:00:am 08:45:00:am 07:45:00:am (Other)
## 85 84 83 6303
Gravedad de los accidentes:
table(datos$GRAVEDAD_ACCIDENTE)
##
## Con heridos Con muertos Solo daños
## 9901 252 15457
frecuencias <- data.frame(
gravedad = c("Con heridos", "Con muertos", "Solo daños"),
Frecuencia = c(9901,252,15457)
)
ggplot(frecuencias, aes(x = reorder(gravedad, -Frecuencia), y = Frecuencia)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de Gravedad de accidentes",
x = "Gravedad",
y = "Frecuencia") +
theme_minimal()
Tipo de accidente:
table(datos$CLASE_ACCIDENTE)
##
## Atropello Caida Ocupante Choque Incendio Otro
## 1344 194 23819 13 123
## Volcamiento
## 117
frecuenciasclase <- data.frame(
clase = c("Atropello", "Caida ocupante", "Choque", "Incendio", "Otro", "Volcamiento"),
Frecuenciaclase = c(1344,194,23819,13,123,117)
)
ggplot(frecuenciasclase, aes(x = reorder(clase, -Frecuenciaclase), y = Frecuenciaclase)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de Clases de accidentes",
x = "Clase",
y = "Frecuencia") +
theme_minimal()
Sitios donde ocurrieron los accidentes:
sitios_factor<-as.factor(datos$SITIO_EXACTO_ACCIDENTE)
summary(sitios_factor)
## CL 110 CR 9G CL 110 CR 6 CL 110 CR 43
## 77 66 55
## CL 17 CR 8 CL 30 CR 8 VIA 40 CL 85
## 53 53 53
## CL 110 CR 38 AV CIRCUNVALAR CR 9G CL 110 CR 27
## 49 41 33
## CL 19 CR 1 VIA 40 CL 77 VIA 40 CL 80
## 32 32 29
## CL 110 CR 46 CL 19 CR 7 CL 110 CR 13
## 28 27 26
## CL 30 CR 4 CR 38 CL 110 CR 46 CL 75
## 25 25 25
## VIA 40 CALLE 85 VIA 40 CL 79 VIA 40 CL 58
## 25 25 24
## CALLE 110 CARRERA 43 CALLE 17 CARRERA 8 CL 30 CR 21
## 23 23 23
## CL 30 CR 43 CL 31 CR 24 VIA 40 CR 50
## 23 23 23
## CL 110 CR 26 CL 30 CR 15 CL 75 CR 47
## 22 22 22
## CALLE 110 CARRERA 6 CALLE 110 CARRERA 9G CL 30 CR 14
## 21 21 21
## CR 38 CL 74 CR 38 CL 81 AV CIRCUNVALAR CR 27
## 21 21 20
## CL 19 CR 1B CL 30 CR 44 CL 90 CR 51B
## 19 19 19
## CL 110 CR 31 CL 110 CR 37 VIA 40 CL 67
## 18 18 18
## VIA 40 CR 67 AV CIRCUNVALAR CR 43 CL 30 CR 20
## 18 17 17
## CL 45 CR 11 SUR CL 75 CR 60 CR 46 CL 110
## 17 17 17
## CR 51B CL 98 VIA 40 CR 51 CALLE 110 CRA 6
## 17 17 16
## CL 19 CR 1E CL 30 CR 38 CL 45 CR 20
## 16 16 16
## CL 45 CR 27 CL 80 CR 45 CR 38 CL 30
## 16 16 16
## CR 44 CL 72 CR 50 CL 64 VIA 40 CL 69
## 16 16 16
## AV CIRCUNVALAR CR 15 SUR AV CIRCUNVALAR CR 6 CL 17 CR 15
## 15 15 15
## CL 19 CR 8 CL 45 CR 30 CL 45 CR 8
## 15 15 15
## CR 38 CL 83 CR 47 CL 75 CR 6 CL 110
## 15 15 15
## VIA 40 CALLE 77 VIA 40 CL 75 AV CIRCUNVALAR CL 51B
## 15 15 14
## AV CIRCUNVALAR CR 13 AV CIRCUNVALAR CR 38 CALLE 17 CRA 8
## 14 14 14
## CALLE 30 CARRERA 8 CL 30 CR 1 CL 30 CR 30
## 14 14 14
## CL 30 CR 33 CL 45 CR 1 CL 75 CR 49
## 14 14 14
## CL 75 CR 59 CL 85 CR 47 CR 46 CL 92
## 14 14 14
## CR 53 CL 99 VIA 40 CL 76 AV CIRCUNVALAR CR 51B
## 14 14 13
## CALLE 110 CARRERA 38 CALLE 19 CARRERA 1 CL 110 CR 12
## 13 13 13
## CL 17 CR 30 CL 19 CR 2 CL 30 CR 23
## 13 13 13
## CL 30 CR 27 CL 30 CR 4B CL 30 CR 6
## 13 13 13
## CL 45 CR 33 CL 72 CR 39 CL 72 CR 46
## 13 13 13
## (Other)
## 23526
Años en los cuales ocurrieron los accidentes:
table(datos$AÑO_ACCIDENTE)
##
## 2018 2019 2020 2021 2022 2023 2024
## 5898 5645 3281 4700 3683 1662 741
frecuenciasaño <- data.frame(
año = c("2018", "2019", "2020", "2021", "2022", "2023", "2024"),
Frecuenciaaño = c(5898,5645,3281,4700,3683,1662,741)
)
ggplot(frecuenciasaño, aes(x = reorder(año, -Frecuenciaaño), y = Frecuenciaaño)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de años donde ocurrieron accidentes",
x = "Años",
y = "Frecuencia") +
theme_minimal()
Meses donde ocurrieron los accidentes:
table(datos$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
frecuenciasmeses <- data.frame(
meses = c("April", "August", "December", "February", "January", "July", "June", "March", "May", "November", "October", "Septemer"),
Frecuenciameses = c(2010,1918,2189,2477,2349,1932,2103,2446,2121,1995,2090,1980)
)
ggplot(frecuenciasmeses, aes(x = reorder(meses, -Frecuenciameses), y = Frecuenciameses)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de Clases de Meses donde ocurrieron accidentes",
x = "Meses",
y = "Frecuencia") +
theme_minimal()
Días donde ocurrieron los accidentes:
table(datos$DIA_ACCIDENTE)
##
## Fri Mon Sat Sun Thu Tue Wed
## 3920 3774 3735 2577 3756 4009 3839
frecuenciasdias <- data.frame(
dias = c("Friday","Monday","Saturday","Sunday","Thursday","Tuesday","Wedndesday"),
Frecuenciadias = c(3920,3774,3735,2577,3756,4009,3839)
)
ggplot(frecuenciasdias, aes(x = reorder(dias, -Frecuenciadias), y = Frecuenciadias)) +
geom_bar(stat = "identity") +
labs(title = "Distribución de Días donde ocurrieron accidentes",
x = "Días",
y = "Frecuencia") +
theme_minimal()
Como conclusión vemos que:
-La mayoría de accidentes ocurrieron Febrero. -El año donde más accidentes hubo fue 2018. -El día donde más ocurren accidentes es el martes. -En la mayoría de los accidentes hay solo daños. -Los accidentes son principalmente choques.
En general el resumen estadístico de las variables de la base de datos es:
summary(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 Length:25610
## 1st Qu.:1.000 1st Qu.:1 Class :character
## Median :1.000 Median :1 Mode :character
## Mean :1.036 Mean :1
## 3rd Qu.:1.000 3rd Qu.:1
## Max. :2.000 Max. :2
## NA's :25358
## MES_ACCIDENTE DIA_ACCIDENTE
## Length:25610 Length:25610
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
NOTA: La función table es muy útil para calcular frecuencias para algunas variables; sin embargo, en algunos se usa summary, para que muestre solo los princpipales datos con mayor frecuencia, porque en variables como las fechas, horas y sitios, hay muchos datos distintos y con baja frecuencia.
Atropellos con muertes:
datos_atropello_muertos <- filter(datos, GRAVEDAD_ACCIDENTE == "Con muertos" & CLASE_ACCIDENTE == "Atropello")
datos_atropello_muertos
## # A tibble: 78 × 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-22 00:00:00 01:30:00:pm Con muertos Atropello
## 3 2018-03-07 00:00:00 05:55:00:am Con muertos Atropello
## 4 2018-03-22 00:00:00 02:30:00:pm Con muertos Atropello
## 5 2018-03-22 00:00:00 12:20:00:am Con muertos Atropello
## 6 2018-05-09 00:00:00 02:10:00:pm Con muertos Atropello
## 7 2018-05-09 00:00:00 12:15:00:pm Con muertos Atropello
## 8 2018-06-08 00:00:00 09:40:00:am Con muertos Atropello
## 9 2018-06-19 00:00:00 10:45:00:am Con muertos Atropello
## 10 2018-09-15 00:00:00 09:45:00:pm Con muertos Atropello
## # ℹ 68 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
#Número de atropellos con muertos:
num_atropello_muertos<-nrow(datos_atropello_muertos)
num_atropello_muertos
## [1] 78
Atropellos con heridos
datos_atropello_heridos <- filter(datos, GRAVEDAD_ACCIDENTE == "Con heridos" & CLASE_ACCIDENTE == "Atropello")
datos_atropello_heridos
## # A tibble: 1,266 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2018-01-01 00:00:00 01:30:00:am Con heridos Atropello
## 2 2018-01-01 00:00:00 12:50:00:am Con heridos Atropello
## 3 2018-01-03 00:00:00 08:25:00:am Con heridos Atropello
## 4 2018-01-04 00:00:00 07:20:00:pm Con heridos Atropello
## 5 2018-01-06 00:00:00 09:30:00:am Con heridos Atropello
## 6 2018-01-08 00:00:00 07:35:00:am Con heridos Atropello
## 7 2018-01-09 00:00:00 04:30:00:pm Con heridos Atropello
## 8 2018-01-11 00:00:00 03:40:00:pm Con heridos Atropello
## 9 2018-01-11 00:00:00 12:40:00:pm Con heridos Atropello
## 10 2018-01-12 00:00:00 11:30:00:am Con heridos Atropello
## # ℹ 1,256 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
#Número de atropellos con heridos:
num_atropello_heridos<-nrow(datos_atropello_heridos)
num_atropello_heridos
## [1] 1266
Atropellos con solo daños
datos_atropello_daños <- filter(datos, GRAVEDAD_ACCIDENTE == "Solo daños" & CLASE_ACCIDENTE == "Atropello")
datos_atropello_daños
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
#Número de atropellos con solo daños:
num_atropello_daños<-nrow(datos_atropello_daños)
num_atropello_daños
## [1] 0
Choques con muertos
datos_choque_muertos <- filter(datos, GRAVEDAD_ACCIDENTE == "Con muertos" & CLASE_ACCIDENTE == "Choque")
datos_choque_muertos
## # A tibble: 157 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2018-01-21 00:00:00 10:30:00:pm Con muertos Choque
## 2 2018-01-25 00:00:00 05:20:00:pm Con muertos Choque
## 3 2018-02-04 00:00:00 09:40:00:pm Con muertos Choque
## 4 2018-02-23 00:00:00 01:10:00:am Con muertos Choque
## 5 2018-03-04 00:00:00 05:10:00:am Con muertos Choque
## 6 2018-04-05 00:00:00 02:45:00:pm Con muertos Choque
## 7 2018-04-06 00:00:00 04:00:00:pm Con muertos Choque
## 8 2018-04-18 00:00:00 08:20:00:pm Con muertos Choque
## 9 2018-04-21 00:00:00 09:30:00:am Con muertos Choque
## 10 2018-05-02 00:00:00 12:10:00:am Con muertos Choque
## # ℹ 147 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
#Número de choques con muertos:
num_choque_muertos<-nrow(datos_choque_muertos)
num_choque_muertos
## [1] 157
Choques con heridos
datos_choque_heridos <- filter(datos, GRAVEDAD_ACCIDENTE == "Con heridos" & CLASE_ACCIDENTE == "Choque")
datos_choque_heridos
## # A tibble: 8,277 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2018-01-01 00:00:00 06:00:00:pm Con heridos Choque
## 2 2018-01-02 00:00:00 08:40:00:pm Con heridos Choque
## 3 2018-01-02 00:00:00 11:00:00:pm Con heridos Choque
## 4 2018-01-03 00:00:00 08:30:00:pm Con heridos Choque
## 5 2018-01-03 00:00:00 10:05:00:pm Con heridos Choque
## 6 2018-01-03 00:00:00 12:00:00:pm Con heridos Choque
## 7 2018-01-04 00:00:00 01:15:00:pm Con heridos Choque
## 8 2018-01-04 00:00:00 08:20:00:am Con heridos Choque
## 9 2018-01-04 00:00:00 08:30:00:pm Con heridos Choque
## 10 2018-01-04 00:00:00 12:40:00:pm Con heridos Choque
## # ℹ 8,267 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
#Número de choques con heridos:
num_choque_heridos<-nrow(datos_choque_heridos)
num_choque_heridos
## [1] 8277
Choques con solo daños
datos_choque_daños <- filter(datos, GRAVEDAD_ACCIDENTE == "Solo daños" & CLASE_ACCIDENTE == "Choque")
datos_choque_daños
## # A tibble: 15,385 × 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-02 00:00:00 02:30:00:pm Solo daños Choque
## 6 2018-01-02 00:00:00 03:00:00:pm Solo daños Choque
## 7 2018-01-02 00:00:00 03:45:00:pm Solo daños Choque
## 8 2018-01-02 00:00:00 04:10:00:pm Solo daños Choque
## 9 2018-01-02 00:00:00 05:30:00:pm Solo daños Choque
## 10 2018-01-02 00:00:00 05:45:00:pm Solo daños Choque
## # ℹ 15,375 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
#Número de choques con solo daños:
num_choque_daños<-nrow(datos_choque_daños)
num_choque_daños
## [1] 15385
#Primero creo un data frame en el que se crean 3 columnas (Tipo_Accidente, Gravedad, Cantidad) y en ellas guardo la información y cantidades obtenidas previamente.
data_accidentes <- data.frame(
Tipo_Accidente = c("Atropello", "Atropello", "Atropello", "Choque", "Choque", "Choque"),
Gravedad = c("Con muertos", "Con heridos", "Solo daños", "Con muertos", "Con heridos", "Solo daños"),
Cantidad = c(num_atropello_muertos, num_atropello_heridos, num_atropello_daños,
num_choque_muertos, num_choque_heridos, num_choque_daños)
)
ggplot(data_accidentes, aes(x = Tipo_Accidente, y = Cantidad, fill = Gravedad)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Cantidad de Muertos, Heridos y Daños por Tipo de Accidente",
x = "Tipo de Accidente",
y = "Cantidad",
fill = "Gravedad") +
theme_minimal()
La conclusión de esta filtración es que los choques generan más daños que los atropellos en todos los ámbitos, tanto muertes como heridos y solo daños. Entre los atropellos y los choques, los choques son mucho más peligrosos y mortales en la ciudad de Barranquilla, lo que nos puede ayuda en el futuro para campañas para tener más cuidad a la hora de conducir.
head(is.na(datos), n = 40)
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## [1,] FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE
## [6,] FALSE FALSE FALSE FALSE
## [7,] FALSE FALSE FALSE FALSE
## [8,] FALSE FALSE FALSE FALSE
## [9,] FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE
## [15,] FALSE FALSE FALSE FALSE
## [16,] FALSE FALSE FALSE FALSE
## [17,] FALSE FALSE FALSE FALSE
## [18,] FALSE FALSE FALSE FALSE
## [19,] FALSE FALSE FALSE FALSE
## [20,] FALSE FALSE FALSE FALSE
## [21,] FALSE FALSE FALSE FALSE
## [22,] FALSE FALSE FALSE FALSE
## [23,] FALSE FALSE FALSE FALSE
## [24,] FALSE FALSE FALSE FALSE
## [25,] FALSE FALSE FALSE FALSE
## [26,] FALSE FALSE FALSE FALSE
## [27,] FALSE FALSE FALSE FALSE
## [28,] FALSE FALSE FALSE FALSE
## [29,] FALSE FALSE FALSE FALSE
## [30,] FALSE FALSE FALSE FALSE
## [31,] FALSE FALSE FALSE FALSE
## [32,] FALSE FALSE FALSE FALSE
## [33,] FALSE FALSE FALSE FALSE
## [34,] FALSE FALSE FALSE FALSE
## [35,] FALSE FALSE FALSE FALSE
## [36,] FALSE FALSE FALSE FALSE
## [37,] FALSE FALSE FALSE FALSE
## [38,] FALSE FALSE FALSE FALSE
## [39,] FALSE FALSE FALSE FALSE
## [40,] FALSE FALSE FALSE FALSE
## SITIO_EXACTO_ACCIDENTE CANT_HERIDOS_EN _SITIO_ACCIDENTE
## [1,] FALSE FALSE
## [2,] FALSE TRUE
## [3,] FALSE TRUE
## [4,] FALSE TRUE
## [5,] FALSE TRUE
## [6,] FALSE FALSE
## [7,] FALSE FALSE
## [8,] FALSE TRUE
## [9,] FALSE TRUE
## [10,] FALSE TRUE
## [11,] FALSE TRUE
## [12,] FALSE TRUE
## [13,] FALSE TRUE
## [14,] FALSE TRUE
## [15,] FALSE TRUE
## [16,] FALSE FALSE
## [17,] FALSE TRUE
## [18,] FALSE FALSE
## [19,] FALSE TRUE
## [20,] FALSE TRUE
## [21,] FALSE TRUE
## [22,] FALSE TRUE
## [23,] FALSE TRUE
## [24,] FALSE TRUE
## [25,] FALSE FALSE
## [26,] FALSE FALSE
## [27,] FALSE FALSE
## [28,] FALSE TRUE
## [29,] FALSE TRUE
## [30,] FALSE FALSE
## [31,] FALSE FALSE
## [32,] FALSE TRUE
## [33,] FALSE TRUE
## [34,] FALSE TRUE
## [35,] FALSE TRUE
## [36,] FALSE TRUE
## [37,] FALSE TRUE
## [38,] FALSE FALSE
## [39,] FALSE FALSE
## [40,] FALSE FALSE
## CANT_MUERTOS_EN _SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## [1,] TRUE FALSE FALSE
## [2,] TRUE FALSE FALSE
## [3,] TRUE FALSE FALSE
## [4,] TRUE FALSE FALSE
## [5,] TRUE FALSE FALSE
## [6,] TRUE FALSE FALSE
## [7,] TRUE FALSE FALSE
## [8,] TRUE FALSE FALSE
## [9,] TRUE FALSE FALSE
## [10,] TRUE FALSE FALSE
## [11,] TRUE FALSE FALSE
## [12,] TRUE FALSE FALSE
## [13,] TRUE FALSE FALSE
## [14,] TRUE FALSE FALSE
## [15,] TRUE FALSE FALSE
## [16,] TRUE FALSE FALSE
## [17,] TRUE FALSE FALSE
## [18,] TRUE FALSE FALSE
## [19,] TRUE FALSE FALSE
## [20,] TRUE FALSE FALSE
## [21,] TRUE FALSE FALSE
## [22,] TRUE FALSE FALSE
## [23,] TRUE FALSE FALSE
## [24,] TRUE FALSE FALSE
## [25,] TRUE FALSE FALSE
## [26,] TRUE FALSE FALSE
## [27,] TRUE FALSE FALSE
## [28,] TRUE FALSE FALSE
## [29,] TRUE FALSE FALSE
## [30,] TRUE FALSE FALSE
## [31,] TRUE FALSE FALSE
## [32,] TRUE FALSE FALSE
## [33,] TRUE FALSE FALSE
## [34,] TRUE FALSE FALSE
## [35,] TRUE FALSE FALSE
## [36,] TRUE FALSE FALSE
## [37,] TRUE FALSE FALSE
## [38,] TRUE FALSE FALSE
## [39,] TRUE FALSE FALSE
## [40,] TRUE FALSE FALSE
## MES_ACCIDENTE DIA_ACCIDENTE
## [1,] FALSE FALSE
## [2,] FALSE FALSE
## [3,] FALSE FALSE
## [4,] FALSE FALSE
## [5,] FALSE FALSE
## [6,] FALSE FALSE
## [7,] FALSE FALSE
## [8,] FALSE FALSE
## [9,] FALSE FALSE
## [10,] FALSE FALSE
## [11,] FALSE FALSE
## [12,] FALSE FALSE
## [13,] FALSE FALSE
## [14,] FALSE FALSE
## [15,] FALSE FALSE
## [16,] FALSE FALSE
## [17,] FALSE FALSE
## [18,] FALSE FALSE
## [19,] FALSE FALSE
## [20,] FALSE FALSE
## [21,] FALSE FALSE
## [22,] FALSE FALSE
## [23,] FALSE FALSE
## [24,] FALSE FALSE
## [25,] FALSE FALSE
## [26,] FALSE FALSE
## [27,] FALSE FALSE
## [28,] FALSE FALSE
## [29,] FALSE FALSE
## [30,] FALSE FALSE
## [31,] FALSE FALSE
## [32,] FALSE FALSE
## [33,] FALSE FALSE
## [34,] FALSE FALSE
## [35,] FALSE FALSE
## [36,] FALSE FALSE
## [37,] FALSE FALSE
## [38,] FALSE FALSE
## [39,] FALSE FALSE
## [40,] FALSE FALSE
NOTA: Cuando usamos summary en el punto 3, nos mostró que hay NA’S en las columnas CANT_HERIDOS_EN_SITIO_ACCIDENTE y CANT_MUERTOS_EN_SITIO_ACCIDENTE, de igual forma podemos verificarlo nuevamente:
Verificamos la columna de las fechas
fechas_na<-is.na(datos$FECHA_ACCIDENTE)
datos[fechas_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de fechas no hay NA.
Verificamos la columna de las horas
hora_na<-is.na(datos$HORA_ACCIDENTE)
datos[hora_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de las horas no hay NA.
Verificamos la columna de la gravedad del accidente
gravedad_na<-is.na(datos$GRAVEDAD_ACCIDENTE)
datos[gravedad_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de la gravedad del accidente no hay NA.
Verificamos la columna de la clase de accidente
clase_na<-is.na(datos$CLASE_ACCIDENTE)
datos[clase_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de la clase de accidente no hay NA.
Verificamos la columna del sitio exacto del accidente
sitio_na<-is.na(datos$SITIO_EXACTO_ACCIDENTE)
datos[sitio_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna del sitio exacto no hay NA.
Verificamos la columna de la cantidad de accidentes
cantacc_na<-is.na(datos$CANTIDAD_ACCIDENTES)
datos[cantacc_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de cantidad de accidentes no hay NA.
Verificamos la columna de los años
año_na<-is.na(datos$AÑO_ACCIDENTE)
datos[año_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de años no hay NA.
Verificamos la columna de los meses
mes_na<-is.na(datos$MES_ACCIDENTE)
datos[mes_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de meses no hay NA.
Verificamos la columna de los días
dia_na<-is.na(datos$DIA_ACCIDENTE)
datos[dia_na,]
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de cantidad de días no hay NA.
Verificamos la columna de la cantidad de heridos en sitio de accidente
heridos_na<-is.na(datos$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`)
datos[heridos_na,]
## # A tibble: 15,626 × 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-02 00:00:00 02:30:00:pm Solo daños Choque
## 6 2018-01-02 00:00:00 03:00:00:pm Solo daños Choque
## 7 2018-01-02 00:00:00 03:45:00:pm Solo daños Choque
## 8 2018-01-02 00:00:00 04:10:00:pm Solo daños Choque
## 9 2018-01-02 00:00:00 05:30:00:pm Solo daños Choque
## 10 2018-01-02 00:00:00 05:45:00:pm Solo daños Choque
## # ℹ 15,616 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de cantidad de heridos sí hay NA.
La cantidad de NA’S en esta columna es de:
cant_heridos_NA <- nrow(datos[heridos_na,])
cant_heridos_NA
## [1] 15626
Verificamos la columna de la cantidad de muertos en sitio de accidente
muertos_na<-is.na(datos$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`)
datos[muertos_na,]
## # A tibble: 25,358 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2018-01-01 00:00:00 01:30:00:am Con heridos Atropello
## 2 2018-01-01 00:00:00 02:00:00:pm Solo daños Choque
## 3 2018-01-01 00:00:00 04:00:00:am Solo daños Choque
## 4 2018-01-01 00:00:00 04:30:00:am Solo daños Choque
## 5 2018-01-01 00:00:00 05:20:00:pm Solo daños Choque
## 6 2018-01-01 00:00:00 06:00:00:pm Con heridos Choque
## 7 2018-01-01 00:00:00 12:50:00:am Con heridos Atropello
## 8 2018-01-02 00:00:00 02:30:00:pm Solo daños Choque
## 9 2018-01-02 00:00:00 03:00:00:pm Solo daños Choque
## 10 2018-01-02 00:00:00 03:45:00:pm Solo daños Choque
## # ℹ 25,348 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
El resultado nos muestra que en la columna de cantidad de muertos sí hay NA.
La cantidad de NA’S en esta columna es de:
cant_muertos_NA<-nrow(datos[muertos_na,])
cant_muertos_NA
## [1] 25358
Conclusión
Notamos que donde hay NA’S hay valores vacíos, lo que se puede deber a
un error y estos valores vacíos se refieren a 0.
suppressWarnings(missmap(datos))
A pesar de ser variables discretas, se utilizan los diagramas de cajas y bigotes para ver si hay valores atípicos.
par(mfrow=c(1,3))
boxplot(datos$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`,main="Heridos")
boxplot(datos$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`,main="Muertos")
boxplot(datos$CANTIDAD_ACCIDENTES,main="Cantidad de accidentes")
De los gráficos anteriores podemos ver que:
La variable cantidad de heridos tiene algunos valores atípicos muy altos, al igual que la cantidad de muertos y accidentes, ya que la mayoría de sus datos están en 1, pero muy pocos en 2, por lo que procedemos a realizar los filtros.
Filtro cantidad de heridos en sitio accidente
filter(datos,`CANT_HERIDOS_EN _SITIO_ACCIDENTE`>3 )
## # 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
Filtro cantidad de muertos en sitio accidente
filter(datos,`CANT_MUERTOS_EN _SITIO_ACCIDENTE`>1.8 )
## # A tibble: 9 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2018-03-22 00:00:00 02:30:00:pm Con muertos Atropello
## 2 2018-08-09 00:00:00 08:15:00:pm Con muertos Choque
## 3 2019-03-16 00:00:00 11:35:00:pm Con muertos Choque
## 4 2019-12-26 00:00:00 02:00:00:am Con muertos Choque
## 5 2021-09-27 00:00:00 01:35:00:pm Con muertos Atropello
## 6 2022-02-10 00:00:00 06:54:00:am Con muertos Choque
## 7 2022-02-28 00:00:00 07:30:00:am Con muertos Choque
## 8 2024-02-11 00:00:00 11:53:00:pm Con muertos Choque
## 9 2024-04-15 00:00:00 07:30:00:pm Con muertos Choque
## # ℹ 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
Filtro cantidad de accidentes
filter(datos,CANTIDAD_ACCIDENTES>1.8 )
## # A tibble: 5 × 11
## FECHA_ACCIDENTE HORA_ACCIDENTE GRAVEDAD_ACCIDENTE CLASE_ACCIDENTE
## <dttm> <chr> <chr> <chr>
## 1 2018-06-09 00:00:00 09:35:00:am Solo daños Choque
## 2 2019-12-28 00:00:00 12:28:00:pm Solo daños Choque
## 3 2020-02-06 00:00:00 09:00:00:am Solo daños Choque
## 4 2020-05-02 00:00:00 07:40:00:pm Solo daños Choque
## 5 2020-11-05 00:00:00 05:25:00:pm Solo daños Choque
## # ℹ 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 <chr>, MES_ACCIDENTE <chr>, DIA_ACCIDENTE <chr>
Reemplazamos los valores atípicos por NA*
datos$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`[datos$`CANT_HERIDOS_EN _SITIO_ACCIDENTE` > 3] <- NA
datos$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`[datos$`CANT_MUERTOS_EN _SITIO_ACCIDENTE` > 1.8] <- NA
datos$CANTIDAD_ACCIDENTES[datos$CANTIDAD_ACCIDENTES > 1.8] <- NA
Repetimos los gráficos
par(mfrow=c(1,3))
boxplot(datos$`CANT_HERIDOS_EN _SITIO_ACCIDENTE`,main="Heridos")
boxplot(datos$`CANT_MUERTOS_EN _SITIO_ACCIDENTE`,main="Muertos")
boxplot(datos$CANTIDAD_ACCIDENTES,main="Cantidad de accidentes")
Vamos a modificar estas variables por la Mediana, como técnica básica de Imputación de datos.
Cálculo de medianas de estas tres columnas
medianas <- sapply(datos[, c("CANT_HERIDOS_EN _SITIO_ACCIDENTE",
"CANT_MUERTOS_EN _SITIO_ACCIDENTE",
"CANTIDAD_ACCIDENTES")],
median, na.rm = TRUE)
medianas
## CANT_HERIDOS_EN _SITIO_ACCIDENTE CANT_MUERTOS_EN _SITIO_ACCIDENTE
## 1 1
## CANTIDAD_ACCIDENTES
## 1
Reemplazamos NA por las medias
reemplazos <- list(
`CANT_HERIDOS_EN _SITIO_ACCIDENTE` = medianas["CANT_HERIDOS_EN _SITIO_ACCIDENTE"],
`CANT_MUERTOS_EN _SITIO_ACCIDENTE` = medianas["CANT_MUERTOS_EN _SITIO_ACCIDENTE"],
CANTIDAD_ACCIDENTES = medianas["CANTIDAD_ACCIDENTES"]
)
datos <- replace_na(datos, reemplazos)
Verificamos que ya no hay NA
summary(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.126
## 3rd Qu.:1.000
## Max. :3.000
## CANT_MUERTOS_EN _SITIO_ACCIDENTE CANTIDAD_ACCIDENTES AÑO_ACCIDENTE
## Min. :1 Min. :1 Length:25610
## 1st Qu.:1 1st Qu.:1 Class :character
## Median :1 Median :1 Mode :character
## Mean :1 Mean :1
## 3rd Qu.:1 3rd Qu.:1
## Max. :1 Max. :1
## MES_ACCIDENTE DIA_ACCIDENTE
## Length:25610 Length:25610
## Class :character Class :character
## Mode :character Mode :character
##
##
##
Verificamos que ya no hay NA’s en el gráfico
suppressWarnings(missmap(datos))
Conclusiones
En el caso de la cantidad de heridos, hay datos que se desvían significativamente del resto de los datos y no representan bien la tendencia general, entonces es importante manejarlos para que no afecten los análisis y los modelos. De igual forma, se hizo este tratamiento de datos con la cantidad de muertos y la cantidad de heridos en el sitio del accidente. De esta forma, los datos representan de mejor forma las variables estudiadas.