Análisis Exploratorio de Incendios de la Provincia de Neuquén.
Secretaría de Emergencias y Gestión de Riesgos - Gobierno de la provincia de Neuquén
¿Cuál es la función del Observatorio Provincial de Gestión de Riesgos?
El Observatorio Provincial de Gestión de Riesgos tiene como objetivo contribuir al diseño, implementación y monitoreo de políticas públicas tendientes a optimizar la gestión integral del riesgo en la provincia del Neuquén, a través del desarrollo de un sistema de información que permita recopilar, analizar y consolidar datos relevantes para la toma de decisiones y la mejora continua de las estrategias de reducción de riesgo y abordaje de situaciones de emergencias. Sus funciones se enmarcan en la ley provincial 2713: “Enfoque de riesgo en políticas de planificación y desarrollo territorial de la Provincia del Neuquén”.
FUENTES DE INFORMACIÓN:
CIAT – Centro de Información de Alerta Temprana
SIGISVI - Sistema Integral de Gestión de la Información de Seguridad Vial
Vialidad Provincial (Estado de las rutas)
RAPH (SIEN) Registro de Atención Pre Hospitalaria
Medios gráficos de comunicación
OpenWeatherMap
Servicio meteorológico Nacional
Policía de la provincia de Neuquén
Dirección Bomberos de la Policía
Sistema de Manejo del Fuego
Ficha Técnica: Este proyecto tiene como objetivo analizar y procesar los datos de siniestros viales recopilados por la Policía Provincial de Neuquén durante los años 2023 y 2024. Su propósito es identificar patrones y tendencias en los incidentes, facilitar la comprensión de las causas y el impacto de los siniestros, y proporcionar información útil para la optimización de recursos y la planificación estratégica en materia de seguridad vial.
Para alcanzar estos objetivos, se empleó una metodología estructurada que abarcó la recolección de datos proporcionados por la Policía Provincial, su limpieza y procesamiento, y por último se realizó un análisis sintético de los datos. A continuación, se presentan diversos gráficos que facilitan la visualización de los resultados de manera clara y comprensible.
library(readxl)
library(ggplot2)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(lubridate)
##
## Adjuntando el paquete: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(rpart)
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.4.2
#setwd("D:/Documents/GitHub/OPGR/Accidentes viales/Jornada VLA")
# Establece el directorio de trabajo
#setwd("C:/Users/Joaquín/Documents/GitHub/OPGR/Accidentes viales/Pedido Luciana Octubre")
#setwd("C:/Users/Joaquín/Documents/GitHub/OPGR/Accidentes viales/Jornada VLA")
# Especifica la ruta del archivo de Excel
archivo1 <- "Formulario_2023_2024_policia.xlsx"
# Lee el archivo de Excel
registros_policia_2023_2024 <- read_excel(archivo1)
## Warning: Expecting date in H3538 / R3538C8: got '16:00.'
## Warning: Expecting date in H4631 / R4631C8: got '22:30.'
## Warning: Expecting date in H5439 / R5439C8: got '18:30.'
## Warning: Expecting date in H5517 / R5517C8: got '04:43 .'
# Reemplazar valores no numéricos por NA
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(across(where(is.character), ~na_if(., 'S/E'))) %>%
mutate(across(where(is.character), ~na_if(., 'S/D'))) %>%
mutate(across(where(is.character), ~na_if(., 'se desconoce'))) %>%
mutate(across(where(is.character), ~na_if(., '99- Sin determinar')))
# Ver las primeras 6 filas del DataFrame
head(registros_policia_2023_2024)
## # A tibble: 6 × 22
## ID Código de Departamento (según c…¹ Comisaría Localidad `Form. Naranja N°`
## <dbl> <chr> <chr> <chr> <chr>
## 1 1 Confluencia Direcció… NEUQUEN 2023015127
## 2 2 8340 DIRECCIO… ZAPALA <NA>
## 3 3 Confluencia Direcció… NEUQUEN 2023011357
## 4 4 <NA> 10 AÑELO <NA>
## 5 5 CONFLUENCIA Division… NEUQUEN 2023305005
## 6 6 <NA> Division… Chos Mal… <NA>
## # ℹ abbreviated name: ¹`Código de Departamento (según codificación INDEC)`
## # ℹ 17 more variables: `Nº de Sumario` <chr>, `Fecha del hecho` <dttm>,
## # `Hora del hecho` <dttm>, `Repite Fecha y Hora` <dttm>,
## # `Nombre de la calle o ruta` <chr>, `Altura / Nro` <chr>,
## # `Calle Intersección` <chr>, Latitud <chr>, Longitud <chr>,
## # `Zona Rural / Urbana` <chr>, `Semáforo (A)` <dbl>,
## # `Tipo de Lugar (B)` <dbl>, `Modo de Producción del Hecho (C)` <dbl>, …
# Ver la estructura del DataFrame
str(registros_policia_2023_2024)
## tibble [5,897 × 22] (S3: tbl_df/tbl/data.frame)
## $ ID : num [1:5897] 1 2 3 4 5 6 7 8 9 10 ...
## $ Código de Departamento (según codificación INDEC): chr [1:5897] "Confluencia" "8340" "Confluencia" NA ...
## $ Comisaría : chr [1:5897] "Dirección de Tránsito de Neuquén" "DIRECCION TRANSITO ZAPALA" "Dirección de Tránsito de Neuquén" "10" ...
## $ Localidad : chr [1:5897] "NEUQUEN" "ZAPALA" "NEUQUEN" "AÑELO" ...
## $ Form. Naranja N° : chr [1:5897] "2023015127" NA "2023011357" NA ...
## $ Nº de Sumario : chr [1:5897] NA NA NA NA ...
## $ Fecha del hecho : POSIXct[1:5897], format: "2036-06-26" "2027-07-14" ...
## $ Hora del hecho : POSIXct[1:5897], format: "1899-12-31 10:45:00" "1899-12-31 20:41:00" ...
## $ Repite Fecha y Hora : POSIXct[1:5897], format: "2036-06-26 10:45:00" "2027-07-14 20:41:00" ...
## $ Nombre de la calle o ruta : chr [1:5897] "PLANAS" "ANTONIO SOSA Y CORONEL PRINGLES" "CASIMIRO GOMEZ" "RUTA PROVINCIAL 7" ...
## $ Altura / Nro : chr [1:5897] NA NA NA "RUTA PROVINCIAL 17" ...
## $ Calle Intersección : chr [1:5897] "SAAVEDRA" "Interseccion" "BELGRANO" NA ...
## $ Latitud : chr [1:5897] NA NA NA NA ...
## $ Longitud : chr [1:5897] NA NA NA NA ...
## $ Zona Rural / Urbana : chr [1:5897] NA "Urbana" NA "URBANA" ...
## $ Semáforo (A) : num [1:5897] 1 3 3 3 3 3 3 3 3 3 ...
## $ Tipo de Lugar (B) : num [1:5897] 1 1 1 3 1 1 1 3 1 1 ...
## $ Modo de Producción del Hecho (C) : num [1:5897] 2 2 4 2 2 2 99 4 2 2 ...
## $ Especificar sólo código 5 : chr [1:5897] NA NA NA NA ...
## $ Condiciones Climáticas (D) : chr [1:5897] "1" "1" "1" "1" ...
## $ Consecuencias del Siniestro (E) : num [1:5897] 1 2 2 1 2 2 3 4 3 2 ...
## $ Especificar sólo código 4 : chr [1:5897] NA NA NA NA ...
# Ver todos los nombres de las columnas
colnames(registros_policia_2023_2024)
## [1] "ID"
## [2] "Código de Departamento (según codificación INDEC)"
## [3] "Comisaría"
## [4] "Localidad"
## [5] "Form. Naranja N°"
## [6] "Nº de Sumario"
## [7] "Fecha del hecho"
## [8] "Hora del hecho"
## [9] "Repite Fecha y Hora"
## [10] "Nombre de la calle o ruta"
## [11] "Altura / Nro"
## [12] "Calle Intersección"
## [13] "Latitud"
## [14] "Longitud"
## [15] "Zona Rural / Urbana"
## [16] "Semáforo (A)"
## [17] "Tipo de Lugar (B)"
## [18] "Modo de Producción del Hecho (C)"
## [19] "Especificar sólo código 5"
## [20] "Condiciones Climáticas (D)"
## [21] "Consecuencias del Siniestro (E)"
## [22] "Especificar sólo código 4"
# Obtener valores únicos de cada columna
# Limpiar espacios adicionales en los nombres de las columnas
colnames(registros_policia_2023_2024) <- gsub("\\s+", " ", colnames(registros_policia_2023_2024))
# Ahora puedes volver a obtener los valores únicos
unique_zona <- unique(registros_policia_2023_2024$`Zona Rural / Urbana`)
unique_semaforo <- unique(registros_policia_2023_2024$`Semáforo (A)`)
unique_tipo_lugar <- unique(registros_policia_2023_2024$`Tipo de Lugar (B)`)
unique_modo_hecho <- unique(registros_policia_2023_2024$`Modo de Producción del Hecho (C)`)
unique_condiciones_climaticas <- unique(registros_policia_2023_2024$`Condiciones Climáticas (D)`)
unique_consecuencias <- unique(registros_policia_2023_2024$`Consecuencias del Siniestro (E)`)
# Ver los resultados
unique_zona
## [1] NA "Urbana"
## [3] "URBANA" "RURAL"
## [5] "rural" "URBANO"
## [7] "URABANA" "Rural"
## [9] "ZONA RURAL" "ZONA URBANA"
## [11] "URBABA" "urbana"
## [13] "U" "R"
## [15] "Urbano" "Zona Rural"
## [17] "Zona Urbana" "Zona rural"
## [19] "Urb" "Urbuno"
## [21] "Ubana" "NO"
## [23] "CHACRA" "urbano"
## [25] "Utbana" "ZINA URBANA"
## [27] "Rura, Urbano" "calle"
## [29] "zona Rural" "Urbao"
## [31] "zona rural" "Zona Rural / Urbana"
## [33] "urbaba" "si"
## [35] "no" "Urbana/Rural"
unique_semaforo
## [1] 1 3 99 2 0 4 NA 5
unique_tipo_lugar
## [1] 1.0 3.0 NA 2.0 99.0 4.0 6.0 1.2 5.0
unique_modo_hecho
## [1] 2 4 99 3 5 1 NA 6
unique_condiciones_climaticas
## [1] "1" "2" "3"
## [4] "1 - Bueno" "3 - Lluvia" NA
## [7] "2 - Nublado" "5 - Nieve" "99"
## [10] "5" "7" "4"
## [13] "Reducida" "Regulares" "1.2"
## [16] "7 (viento)" "3.7" "6"
## [19] "2.2999999999999998"
unique_consecuencias
## [1] 1.0 2.0 3.0 4.0 NA 5.0 99.0 1.2 1.3
# Asegúrate de que la columna "Fecha del hecho" esté en formato Date
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(fecha_del_hecho = as.Date(`Fecha del hecho`, format = "%Y-%m-%d"))
# Extraer el año de la columna de fecha
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(anio = year(fecha_del_hecho))
# Filtrar solo los casos de los años 2023 y 2024
registros_filtrados <- registros_policia_2023_2024 %>%
filter(anio %in% c(2023, 2024))
# Contar los casos por año
casos_por_anio <- registros_filtrados %>%
group_by(anio) %>%
summarise(cantidad_casos = n(), .groups = "drop")
# Crear el gráfico de barras para los casos por año
ggplot(casos_por_anio, aes(x = factor(anio), y = cantidad_casos, fill = factor(anio))) +
geom_bar(stat = "identity", fill = "#20B2AA", width = 0.7) + # Usar color #20B2AA solo en las barras
geom_text(aes(label = cantidad_casos), vjust = -0.5, size = 4) + # Etiquetas con color predeterminado
labs(
title = "Total de Registros por Año - Policía",
x = "Año",
y = "Cantidad de Casos"
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Añadir espacio en la parte superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold"), # Título en color predeterminado
axis.text = element_text(size = 12), # Texto de ejes en color predeterminado
axis.title = element_text(size = 14), # Títulos de ejes en color predeterminado
legend.position = "none" # Eliminar la leyenda
)
# Asegúrate de que la columna "Fecha del hecho" esté en formato Date
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(fecha_del_hecho = as.Date(`Fecha del hecho`, format = "%Y-%m-%d"))
# Extraer mes y año de la columna de fecha
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(
mes = month(fecha_del_hecho, label = TRUE, abbr = TRUE), # Obtener mes con nombre abreviado
anio = year(fecha_del_hecho) # Obtener año
)
# Filtrar solo los casos de los años 2023 y 2024
registros_filtrados <- registros_policia_2023_2024 %>%
filter(anio %in% c(2023, 2024))
# Ajustar el tamaño del gráfico en RStudio
options(repr.plot.width = 16, repr.plot.height = 10)
# Crear el gráfico de barras con etiquetas más pequeñas y mayor espacio
ggplot(registros_filtrados, aes(x = mes, fill = factor(anio))) +
geom_bar(position = "dodge", aes(y = ..count..), width = 0.7) + # Barras más delgadas
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5, position = position_dodge(0.7), size = 3) + # Etiquetas más pequeñas
labs(
title = "Casos por Mes en 2023 y 2024",
x = "Mes",
y = "Cantidad de Casos",
fill = "Año"
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Aumentar espacio entre el fin de la barra y el margen superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold"), # Título más grande
axis.text = element_text(size = 12), # Texto de los ejes más grande
axis.title = element_text(size = 14), # Títulos de los ejes más grandes
legend.text = element_text(size = 12), # Tamaño de texto de la leyenda
legend.title = element_text(size = 13) # Tamaño del título de la leyenda
)
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Asegurarse de que "Fecha del hecho" esté en formato Date
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(fecha_del_hecho = as.Date(`Fecha del hecho`, format = "%Y-%m-%d"))
# Extraer mes y año de la columna de fecha
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(
mes = month(fecha_del_hecho, label = TRUE, abbr = TRUE), # Obtener mes como nombre abreviado
anio = year(fecha_del_hecho) # Obtener año
)
# Calcular el promedio de casos por mes y año
promedio_por_mes <- registros_filtrados %>%
group_by(mes) %>%
summarise(promedio_casos = mean(n()), .groups = "drop")
# Crear el gráfico de barras del promedio mensual
ggplot(promedio_por_mes, aes(x = mes, y = promedio_casos, fill = "#20B2AA")) +
geom_col(width = 0.7) + # Barras de color con ancho ajustado
geom_text(aes(label = round(promedio_casos, 1)), vjust = -0.5, size = 4) + # Etiquetas en las barras
labs(
title = "Promedio de Casos por Mes",
x = "Mes",
y = "Promedio de Casos"
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Espacio adicional en el margen superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", color = "#1f4e79"),
axis.title.x = element_text(size = 14, face = "bold", color = "#1f4e79"),
axis.title.y = element_text(size = 14, face = "bold", color = "#1f4e79"),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12)
)
# Asegúrate de que la columna "Fecha del hecho" esté en formato Date
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(fecha_del_hecho = as.Date(`Fecha del hecho`, format = "%Y-%m-%d"))
# Extraer mes y año de la columna de fecha
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(
mes = month(fecha_del_hecho, label = TRUE, abbr = TRUE), # Obtener mes con nombre abreviado
anio = year(fecha_del_hecho) # Obtener año
)
# Filtrar solo los casos de los años 2023 y 2024
registros_filtrados <- registros_policia_2023_2024 %>%
filter(anio %in% c(2023, 2024))
# Contar los casos por mes y año
casos_por_mes <- registros_filtrados %>%
group_by(mes, anio) %>%
summarise(cantidad_casos = n(), .groups = "drop")
# Ajustar el tamaño del gráfico en RStudio
options(repr.plot.width = 16, repr.plot.height = 10)
# Crear el gráfico de líneas
ggplot(casos_por_mes, aes(x = mes, y = cantidad_casos, color = factor(anio), group = anio)) +
geom_line(size = 1) + # Líneas más gruesas
geom_point(size = 3) + # Puntos en los valores
labs(
title = "Casos por Mes en 2023 y 2024",
x = "Mes",
y = "Cantidad de Casos",
color = "Año"
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Aumentar espacio entre el fin de la línea y el margen superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold"), # Título más grande
axis.text = element_text(size = 12), # Texto de los ejes más grande
axis.title = element_text(size = 14), # Títulos de los ejes más grandes
legend.text = element_text(size = 12), # Tamaño de texto de la leyenda
legend.title = element_text(size = 13) # Tamaño del título de la leyenda
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Convertir la columna "Consecuencias del Siniestro (E)" a carácter para recodificar
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(`Consecuencias del Siniestro (E)` = as.character(`Consecuencias del Siniestro (E)`)) %>%
# Reemplazar '5' (Otros) y NA con 'NA'
mutate(`Consecuencias del Siniestro (E)` = ifelse(`Consecuencias del Siniestro (E)` == "5" | is.na(`Consecuencias del Siniestro (E)`), "NA", `Consecuencias del Siniestro (E)`)) %>%
# Reemplazar los valores numéricos con las descripciones correctas
mutate(`Consecuencias del Siniestro (E)` = recode(`Consecuencias del Siniestro (E)`,
`1` = "Daños Materiales",
`2` = "Lesiones Leves",
`3` = "Lesiones Graves",
`4` = "Fallecida/o"))
# Convertir la columna de nuevo a factor, asegurando el orden deseado
registros_policia_2023_2024$`Consecuencias del Siniestro (E)` <- factor(registros_policia_2023_2024$`Consecuencias del Siniestro (E)`,
levels = c("Daños Materiales", "Lesiones Leves", "Lesiones Graves", "Fallecida/o", "NA"))
# Contar los casos por cada tipo de consecuencia
conteo_consecuencias <- registros_policia_2023_2024 %>%
group_by(`Consecuencias del Siniestro (E)`) %>%
summarise(cantidad_casos = n())
# Ajustar el tamaño del gráfico
options(repr.plot.width = 12, repr.plot.height = 8)
# Crear el gráfico de barras con etiquetas en diagonal
ggplot(conteo_consecuencias, aes(x = `Consecuencias del Siniestro (E)`, y = cantidad_casos)) +
geom_bar(stat = "identity", fill = "#20B2AA", width = 0.7) + # Barras con el color #20B2AA
geom_text(aes(label = cantidad_casos), vjust = -0.5, size = 4, color = "black") + # Etiquetas en negro
labs(
title = "Cantidad de Casos por Consecuencias del Siniestro",
x = "Consecuencias del Siniestro",
y = "Cantidad de Casos"
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.2))) + # Espacio adicional en la parte superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", color = "#1f4e79"),
axis.title.x = element_text(face = "bold", size = 14, color = "#1f4e79"),
axis.title.y = element_text(face = "bold", size = 14, color = "#1f4e79"),
axis.text.x = element_text(angle = 45, hjust = 1, size = 12) # Texto del eje X más pequeño y en diagonal
)
# Convertir la columna "Consecuencias del Siniestro (E)" a carácter para recodificar
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(`Consecuencias del Siniestro (E)` = as.character(`Consecuencias del Siniestro (E)`)) %>%
# Reemplazar '5' (Otros) y NA con 'NA'
mutate(`Consecuencias del Siniestro (E)` = ifelse(`Consecuencias del Siniestro (E)` == "5" | is.na(`Consecuencias del Siniestro (E)`), "NA", `Consecuencias del Siniestro (E)`)) %>%
# Reemplazar los valores numéricos con las descripciones correctas
mutate(`Consecuencias del Siniestro (E)` = recode(`Consecuencias del Siniestro (E)`,
`1` = "Daños Materiales",
`2` = "Lesiones Leves",
`3` = "Lesiones Graves",
`4` = "Fallecida/o")) %>%
# Asegurarse de que la columna "Fecha del hecho" esté en formato Date y extraer el año
mutate(anio = year(as.Date(`Fecha del hecho`)))
# Reordenar las categorías de "Consecuencias del Siniestro (E)" en el orden deseado
registros_policia_2023_2024$`Consecuencias del Siniestro (E)` <- factor(registros_policia_2023_2024$`Consecuencias del Siniestro (E)`,
levels = c("Daños Materiales", "Lesiones Leves", "Lesiones Graves", "Fallecida/o", "NA"))
# Filtrar solo los datos de los años 2023 y 2024
registros_filtrados <- registros_policia_2023_2024 %>%
filter(anio %in% c(2023, 2024))
# Contar los casos por cada tipo de consecuencia y por año
conteo_consecuencias_anio <- registros_filtrados %>%
group_by(anio, `Consecuencias del Siniestro (E)`) %>%
summarise(cantidad_casos = n(), .groups = 'drop')
# Ajustar el tamaño del gráfico en RStudio
options(repr.plot.width = 12, repr.plot.height = 8)
# Crear el gráfico de barras con los datos por año
ggplot(conteo_consecuencias_anio, aes(x = `Consecuencias del Siniestro (E)`, y = cantidad_casos, fill = factor(anio))) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) + # Barras lado a lado por año
geom_text(aes(label = cantidad_casos), vjust = -0.5, position = position_dodge(0.7), size = 4) + # Etiquetas con el número de casos
labs(
title = "Cantidad de Casos por Consecuencias del Siniestro en 2023 y 2024",
x = "Consecuencias del Siniestro",
y = "Cantidad de Casos",
fill = "Año"
) +
scale_fill_manual(values = c("2023" = "#FF6F61", "2024" = "#20B2AA")) + # Colores personalizados para los años
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Espacio adicional en la parte superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 12),
axis.title = element_text(size = 14),
axis.text.x = element_text(angle = 45, hjust = 1) # Inclinación diagonal para las etiquetas del eje X
)
# Normalizar los valores de la columna "Zona Rural / Urbana" y agrupar NA
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(`Zona Rural / Urbana` = tolower(`Zona Rural / Urbana`)) %>% # Convertir a minúsculas
mutate(`Zona Rural / Urbana` = recode(`Zona Rural / Urbana`, # Arreglar posibles valores incorrectos
"urbana" = "Urbana",
"rural" = "Rural",
"rura, urbano" = "Rural",
"urbano" = "Urbana",
"zona rural" = "Rural",
"zona urbana" = "Urbana",
"u" = "Urbana",
"r" = "Rural",
.default = "NA")) %>% # Agrupar otros valores y NA bajo "NA"
mutate(`Zona Rural / Urbana` = ifelse(is.na(`Zona Rural / Urbana`) | `Zona Rural / Urbana` == "", "NA", `Zona Rural / Urbana`)) # Agrupar valores faltantes
# Filtrar solo los datos de los años 2023 y 2024
registros_filtrados <- registros_policia_2023_2024 %>%
mutate(anio = year(as.Date(`Fecha del hecho`))) %>%
filter(anio %in% c(2023, 2024))
# Contar los casos por cada tipo de zona y año
conteo_zona_anio <- registros_filtrados %>%
group_by(anio, `Zona Rural / Urbana`) %>%
summarise(cantidad_casos = n(), .groups = 'drop')
# Reordenar las categorías de "Zona Rural / Urbana" para mostrar primero "Urbana" y luego "Rural"
conteo_zona_anio$`Zona Rural / Urbana` <- factor(conteo_zona_anio$`Zona Rural / Urbana`,
levels = c("Urbana", "Rural", "NA"))
# Ajustar el tamaño del gráfico en RStudio
options(repr.plot.width = 12, repr.plot.height = 8)
# Crear el gráfico de barras con los datos por año
ggplot(conteo_zona_anio, aes(x = `Zona Rural / Urbana`, y = cantidad_casos, fill = factor(anio))) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) + # Barras lado a lado por año
geom_text(aes(label = cantidad_casos), vjust = -0.5, position = position_dodge(0.7), size = 4) + # Etiquetas con el número de casos
labs(
title = "Cantidad de Casos por Zona Rural / Urbana en 2023 y 2024",
x = "Zona",
y = "Cantidad de Casos",
fill = "Año"
) +
scale_fill_manual(values = c("2023" = "#FF6F61", "2024" = "#20B2AA")) + # Colores personalizados para los años
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Espacio adicional en la parte superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 12),
axis.title = element_text(size = 14)
)
# Reemplazar los valores numéricos con las descripciones correctas en la columna "Tipo de Lugar (B)"
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(`Tipo de Lugar (B)` = as.character(`Tipo de Lugar (B)`)) %>%
mutate(`Tipo de Lugar (B)` = recode(`Tipo de Lugar (B)`,
`1` = "Calle",
`2` = "Ruta Nacional",
`3` = "Ruta Provincial",
`4` = "Autopista Nacional",
`5` = "Autopista Provincial",
`6` = "Autovía",
`99` = "Sin determinar",
.default = "NA")) # Asignar NA al resto de los valores
# Filtrar solo los datos de los años 2023 y 2024
registros_filtrados <- registros_policia_2023_2024 %>%
mutate(anio = year(as.Date(`Fecha del hecho`))) %>%
filter(anio %in% c(2023, 2024))
# Contar los casos por cada tipo de lugar y año
conteo_tipo_lugar_anio <- registros_filtrados %>%
group_by(anio, `Tipo de Lugar (B)`) %>%
summarise(cantidad_casos = n(), .groups = 'drop')
# Reordenar las categorías para que "NA" aparezca al final
conteo_tipo_lugar_anio$`Tipo de Lugar (B)` <- factor(conteo_tipo_lugar_anio$`Tipo de Lugar (B)`,
levels = c("Calle", "Ruta Nacional", "Ruta Provincial",
"Autopista Nacional", "Autopista Provincial",
"Autovía", "Sin determinar", "NA"))
# Ajustar el tamaño del gráfico en RStudio
options(repr.plot.width = 12, repr.plot.height = 8)
# Crear el gráfico de barras con los datos por año
ggplot(conteo_tipo_lugar_anio, aes(x = `Tipo de Lugar (B)`, y = cantidad_casos, fill = factor(anio))) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) + # Barras lado a lado por año
geom_text(aes(label = cantidad_casos), vjust = -0.5, position = position_dodge(0.7), size = 4) + # Etiquetas con el número de casos
labs(
title = "Cantidad de Casos por Tipo de Lugar (B) en 2023 y 2024",
x = "Tipo de Lugar",
y = "Cantidad de Casos",
fill = "Año"
) +
scale_fill_manual(values = c("2023" = "#FF6F61", "2024" = "#20B2AA")) + # Colores personalizados para los años
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Espacio adicional en la parte superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 12),
axis.title = element_text(size = 14),
axis.text.x = element_text(angle = 45, hjust = 1) # Inclinación diagonal para las etiquetas del eje X
)
# Reemplazar los valores numéricos con descripciones correctas en "Modo de Producción del Hecho (C)"
registros_policia_2023_2024 <- registros_policia_2023_2024 %>%
mutate(`Modo de Producción del Hecho (C)` = as.character(`Modo de Producción del Hecho (C)`)) %>%
mutate(`Modo de Producción del Hecho (C)` = case_when(
`Modo de Producción del Hecho (C)` == "1" ~ "Colisión Vehículo / persona",
`Modo de Producción del Hecho (C)` == "2" ~ "Colisión Vehículo / vehículo",
`Modo de Producción del Hecho (C)` == "3" ~ "Colisión Vehículo / objeto",
`Modo de Producción del Hecho (C)` == "4" ~ "Vuelco / despistes",
`Modo de Producción del Hecho (C)` == "5" ~ "Otro modo (Especificar)",
`Modo de Producción del Hecho (C)` %in% c("99", "S/D", NA) ~ "NA",
TRUE ~ "NA"
))
# Contar los casos por cada modo de producción del hecho
conteo_modo_hecho <- registros_policia_2023_2024 %>%
group_by(`Modo de Producción del Hecho (C)`) %>%
summarise(cantidad_casos = n(), .groups = 'drop')
# Ordenar las categorías de mayor a menor
conteo_modo_hecho <- conteo_modo_hecho %>%
mutate(`Modo de Producción del Hecho (C)` = reorder(`Modo de Producción del Hecho (C)`, -cantidad_casos))
# Crear el gráfico de barras con el estilo especificado
ggplot(conteo_modo_hecho, aes(x = `Modo de Producción del Hecho (C)`, y = cantidad_casos)) +
geom_bar(stat = "identity", fill = "#20B2AA", width = 0.7) + # Barras en color personalizado
geom_text(aes(label = cantidad_casos), vjust = -0.5, size = 4, color = "black") + # Etiquetas sobre cada barra
labs(
title = "Casos por Modo de Producción del Hecho",
x = "Modo de Producción del Hecho",
y = "Cantidad de Casos"
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + # Espacio en la parte superior
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", color = "#1f4e79"),
axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
axis.text.y = element_text(size = 10),
axis.title.x = element_text(size = 14, face = "bold", color = "#1f4e79"),
axis.title.y = element_text(size = 14, face = "bold", color = "#1f4e79")
)