Este es un documento producido en R Markdown donde se hace un análisis de una base de datos de homicidios desde 2017 construida en Excel y analizada en R.
#Establecemos el directorio donde se encuentra alojada nuestra base de datos a través de setwd y añadimos la libreria readxl para que se pueda leer
#Luego importamos, mediante la libreria de readxl, la base de datos y, a continuación, añadimos la hoja
setwd("F:/datos_2021/Trabajo R/Trabajo Diego 2")
library(readxl)
library(DT)
library(ggplot2)
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
data <- read_excel("BASE_HOM.xlsx", sheet = "Hoja1")
#Utilizamos el paquete de dplyr para transformar datos. Además, se transforma la variable Poblacion_Total de carácter a numérica
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data$Poblacion_Total = as.numeric(as.numeric(data$Poblacion_Total))
## Warning: NAs introducidos por coerción
#Examinamos la base con la función glimpse, donde se observa la cantidad de filas y columnas. Para el caso, son 787 filas y 11 columnas.
glimpse(data)
## Rows: 787
## Columns: 11
## $ País <chr> "El Salvador", "El Salvador", "El Salvador", "El S…
## $ Año <dbl> 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 20…
## $ Codigo_Departamento <chr> "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", …
## $ Departamento <chr> "AHUACHAPAN", "AHUACHAPAN", "AHUACHAPAN", "AHUACHA…
## $ Codigo_Municipio <chr> "101", "102", "103", "104", "105", "106", "107", "…
## $ Municipio <chr> "AHUACHAPÁN", "APANECA", "ATIQUIZAYA", "CONCEPCIÓN…
## $ Latitud <chr> "13.9259486", "13.860677799999999", "13.9751920999…
## $ Longitud <chr> "-89.841138199999904", "-89.802491900000007", "-89…
## $ Homicidios <dbl> 84, 9, 21, 5, 13, 9, 19, 20, 1, 5, 32, 4, 10, 36, …
## $ Zona <chr> "Occidental", "Occidental", "Occidental", "Occiden…
## $ Poblacion_Total <dbl> 129750, 8435, 35332, 12882, 11741, 21077, 31584, 4…
#También hacemos uso de la función head para mostras las primeras n filas
head(data)
## # A tibble: 6 × 11
## País Año Codigo_Departamento Departamento Codigo_Municipio Municipio
## <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 El Salvador 2017 1 AHUACHAPAN 101 AHUACHAPÁN
## 2 El Salvador 2017 1 AHUACHAPAN 102 APANECA
## 3 El Salvador 2017 1 AHUACHAPAN 103 ATIQUIZAYA
## 4 El Salvador 2017 1 AHUACHAPAN 104 CONCEPCIÓ…
## 5 El Salvador 2017 1 AHUACHAPAN 105 EL REFUGIO
## 6 El Salvador 2017 1 AHUACHAPAN 106 GUAYMANGO
## # ℹ 5 more variables: Latitud <chr>, Longitud <chr>, Homicidios <dbl>,
## # Zona <chr>, Poblacion_Total <dbl>
#tail señala las últimas n filas de la base
tail(data)
## # A tibble: 6 × 11
## País Año Codigo_Departamento Departamento Codigo_Municipio Municipio
## <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 El Salvador 2019 14 LA UNION 1413 POLORÓS
## 2 El Salvador 2019 14 LA UNION 1414 SAN ALEJO
## 3 El Salvador 2019 14 LA UNION 1415 SAN JOSÉ
## 4 El Salvador 2019 14 LA UNION 1416 SANTA ROS…
## 5 El Salvador 2019 14 LA UNION 1417 YAYANTIQUE
## 6 El Salvador 2019 14 LA UNION 1418 YUCUAIQUÍN
## # ℹ 5 more variables: Latitud <chr>, Longitud <chr>, Homicidios <dbl>,
## # Zona <chr>, Poblacion_Total <dbl>
#Dentro de la gramática de dplyr, se encuentra la función mutate, la cual permite calcular nuevas variables. De esta manera, construiremos la variable tasa municipales al dividir la cantidad de homicidios y la población de cada municipio. A continuación, lo multiplicaremos por 100,000 y aproximaremos los decimales a 2.
#Luego utilizamos la función glimpse para ver la nueva variable que se añadió, que es la tasa de homicidios a nivel municipal. Por tanto, ahora son 12 columnas.
data1 <- mutate(data, tasa_hom = round(Homicidios/Poblacion_Total*100000,2))
glimpse(data1)
## Rows: 787
## Columns: 12
## $ País <chr> "El Salvador", "El Salvador", "El Salvador", "El S…
## $ Año <dbl> 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 20…
## $ Codigo_Departamento <chr> "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", …
## $ Departamento <chr> "AHUACHAPAN", "AHUACHAPAN", "AHUACHAPAN", "AHUACHA…
## $ Codigo_Municipio <chr> "101", "102", "103", "104", "105", "106", "107", "…
## $ Municipio <chr> "AHUACHAPÁN", "APANECA", "ATIQUIZAYA", "CONCEPCIÓN…
## $ Latitud <chr> "13.9259486", "13.860677799999999", "13.9751920999…
## $ Longitud <chr> "-89.841138199999904", "-89.802491900000007", "-89…
## $ Homicidios <dbl> 84, 9, 21, 5, 13, 9, 19, 20, 1, 5, 32, 4, 10, 36, …
## $ Zona <chr> "Occidental", "Occidental", "Occidental", "Occiden…
## $ Poblacion_Total <dbl> 129750, 8435, 35332, 12882, 11741, 21077, 31584, 4…
## $ tasa_hom <dbl> 64.74, 106.70, 59.44, 38.81, 110.72, 42.70, 60.16,…
#También, podemos sacar un promedio, desviación estándar y la suma total de los homicidios cometidos desde 2017 a 2019.
summarise(data1, prom_hom=mean(Homicidios), sd=sd(Homicidios),
suma= sum(Homicidios))
## # A tibble: 1 × 3
## prom_hom sd suma
## <dbl> <dbl> <dbl>
## 1 12.3 22.8 9706
#Podemos extraer también el promedio del número de homicidios agrupados por año, desde 2017 a 2019. Para ello, se utilizó la función group_by para agrupar años y luego, mediante summarise, se extrajo el promedio de homicidios para ser finalmente ordenado de manera descendente.
group_by(data1, Año) %>%
summarise(promedio=mean(Homicidios)) %>%
arrange(desc(promedio))
## # A tibble: 3 × 2
## Año promedio
## <dbl> <dbl>
## 1 2017 15.1
## 2 2018 12.7
## 3 2019 9.15
#Filtramos valores de acuerdo a especificaciones: tasa de homicidios mayores o iguales a 80 y menores o iguales a 120.96. Luego las ordenamos de forma descendente y seleccionamos cuatro variables
filter(data1, tasa_hom >= 80, tasa_hom <= 120.96) %>%
arrange(desc(tasa_hom)) %>%
select(Departamento, Municipio, Homicidios, tasa_hom)
## # A tibble: 73 × 4
## Departamento Municipio Homicidios tasa_hom
## <chr> <chr> <dbl> <dbl>
## 1 CUSCATLAN SAN BARTOLOMÉ PERULAPÍA 12 121.
## 2 USULUTAN CONCEPCIÓN BATRES 15 119.
## 3 MORAZAN CHILANGA 14 118.
## 4 USULUTAN SAN FRANCISCO JAVIER 6 118.
## 5 SAN MIGUEL CHINAMECA 27 117.
## 6 MORAZAN ARAMBALA 2 116.
## 7 LA LIBERTAD SAN JOSÉ VILLANUEVA 22 116.
## 8 LA LIBERTAD SAN MATÍAS 9 116.
## 9 MORAZAN YAMABAL 6 116.
## 10 AHUACHAPAN EL REFUGIO 14 115.
## # ℹ 63 more rows
#Se hace un análisis agrupando las variables por año y departamento y luego se organiza por año y se establece un orden descendente
group_by(data1,Año, Departamento) %>%
summarise(hom=sum(Homicidios), prom=mean(Homicidios)) %>%
arrange(desc(hom))
## `summarise()` has grouped output by 'Año'. You can override using the `.groups`
## argument.
## # A tibble: 43 × 4
## # Groups: Año [3]
## Año Departamento hom prom
## <dbl> <chr> <dbl> <dbl>
## 1 2017 SAN SALVADOR 1210 63.7
## 2 2018 SAN SALVADOR 983 51.7
## 3 2019 SAN SALVADOR 625 32.9
## 4 2017 SAN MIGUEL 423 21.2
## 5 2018 LA LIBERTAD 404 18.4
## 6 2017 LA LIBERTAD 396 18
## 7 2017 SANTA ANA 330 25.4
## 8 2019 SAN MIGUEL 291 14.6
## 9 2017 SONSONATE 290 18.1
## 10 2018 SAN MIGUEL 279 14.0
## # ℹ 33 more rows
#Se muestra un scaterplot interactivo entre la cantidad de homicidios y tamaño de la población por años
#Se muestra el dataset utilizado para hacer el análisis
DT::datatable(data1, fillContainer = T, filter = "top")