knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(dplyr) library(ggplot2) library(lubridate) library(sf) library(ViolenciaContraMujeres) library(hrbrthemes)
Este paquete contiene 3 sets de datos que se utilizan para representar la información de violencia contra la mujer:
Estos se cargan en memoria cuando se llama el paquete library(ViolenciaContraMujeres)
.
En especial podemos hacer uso de datos_violencia
con solo llamarlo y consultar su estructura en la ayuda ?datos_violencia
datos_violencia
Podemos usar funciones para revisar la estructura como glimpse()
de dplyr
glimpse(datos_violencia)
Una de las representaciones que se muestran es la que gráfica los casos de violencia general por año. Esto se puede generar de la siguiente forma
datos_anyo_estado <- datos_violencia %>% group_by(Entidad, anyo = year(fecha)) %>% summarise(numero_casos = sum(ocurrencia)) %>% filter(Entidad == "Querétaro") ggplot(datos_anyo_estado) + geom_line(aes(x = anyo, y = numero_casos)) + theme_minimal()
Sin embargo podemos ver una caída en el año 2020, si revisamos los meses:
datos_violencia %>% filter(fecha >= "2020-01-01") %>% group_by(Entidad, mes = month(fecha, label = TRUE)) %>% summarise(numero_casos = sum(ocurrencia)) %>% filter(Entidad == "Querétaro")
Sí necesitamos filtrar los meses sin información el paquete cuenta con una función que ya lo hace:
meses_sin_datos <- DefinirMesesSinDatos(datos_violencia) meses_sin_datos
El paquete ademas cuenta con funciones que calculan la tasa por cada 100mil habitantes
datos_estado <- CasosNormalizadosRepublica(datos_violencia, poblacion_inegi_2015) datos_estado
O que agregar los polígonos de estado:
datos_estado_poligonos <- AgregaPoligonos(datos_estado, poligonos_mx) datos_estado_poligonos
Que se encuentran en la columna geometry, la cual puede ser usada en mapas
ggplot(datos_estado_poligonos) + geom_sf(aes(fill=tasa_100k)) + scale_fill_gradient(low = "#56B1F7", high = "#132B43") + theme_minimal()
Se puede calcular el porcentaje por estado o de toda la republica, para los meses comparables de cada año. La función
DatosMesEstadoAgrupados()
permite hacer este cálculo para toda la republica colocalndo "Todas"
como entidad.
Ademas permite resaltar varios tipos de violencia al colocarlos en un vector para el argumento resaltar.tipo
.
violencia_mes_todo <- DatosMesEstadoAgrupados( datos_violencia, entidad = "Todas", resaltar.tipo = c("Violencia familiar") ) violencia_mes_todo
ggplot(violencia_mes_todo) + geom_col(aes(x= mes, y = proporcion_tipo, fill = Tipo)) + facet_grid(. ~ anyo) + scale_y_continuous(labels = scales::percent) + scale_fill_viridis_d(direction = -1) + labs( title = "Violencia Familiar contra la Mujer Meses comparables", subtitle = "Porcentaje de del total de casos reportados por mes y año en todo México", x = "", y = "Porcentaje del total de casos", fill = "" ) + theme_ipsum() + theme( axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 12), axis.text.x = element_text(size = 12, angle = 90), legend.text = element_text(size = 15), strip.text.x = element_text(size = 14), legend.position="bottom" )
violencia_mes_entidad <- DatosMesEstadoAgrupados( datos_violencia, entidad = "Querétaro", resaltar.tipo = c("Violencia familiar") ) violencia_mes_entidad
ggplot(violencia_mes_entidad) + geom_col(aes(x= mes, y = proporcion_tipo, fill = Tipo)) + facet_grid(. ~ anyo) + scale_y_continuous(labels = scales::percent) + scale_fill_viridis_d(direction = -1) + labs( title = "Violencia Familiar contra la Mujer Meses comparables", subtitle = "Porcentaje de del total de casos reportados por mes y año en Querétaro", x = "", y = "Porcentaje del total de casos", fill = "" ) + theme_ipsum() + theme( axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 12), axis.text.x = element_text(size = 12, angle = 90), legend.text = element_text(size = 15), strip.text.x = element_text(size = 14), legend.position="bottom" )
Otra representación sería:
violencia_mes_todo<- violencia_mes_todo %>% filter(Tipo == "Violencia familiar") ggplot(violencia_mes_todo) + geom_line(aes(x= mes, y = proporcion_tipo, color = factor(anyo), group = factor(anyo)), size = 1) + geom_point(aes(x= mes, y = proporcion_tipo, color = factor(anyo), group = factor(anyo)), size = 3) + scale_y_continuous(labels = scales::percent) + labs( title = "Porcentaje Violencia Familiar contra la Mujer", subtitle = "Comparativa meses con datos en todo México", x = "", y = "Porcentaje del total de casos", color = "" ) + scale_color_viridis_d(direction = -1) + theme_ipsum() + theme( axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 11), axis.text.x = element_text(size = 11), legend.text = element_text(size = 14), strip.text.y = element_text(size = 18) )
violencia_mes_entidad <- violencia_mes_entidad %>% filter(Tipo == "Violencia familiar") ggplot(violencia_mes_entidad) + geom_line(aes(x= mes, y = proporcion_tipo, color = factor(anyo), group = factor(anyo)), size = 1) + geom_point(aes(x= mes, y = proporcion_tipo, color = factor(anyo), group = factor(anyo)), size = 3) + scale_y_continuous(labels = scales::percent) + labs( title = "Porcentaje Violencia Familiar contra la Mujer", subtitle = "Comparativa meses con datos en Querétaro", x = "", y = "Porcentaje del total de casos", color = "" ) + scale_color_viridis_d(direction = -1) + theme_ipsum() + theme( axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 11), axis.text.x = element_text(size = 11), legend.text = element_text(size = 14), strip.text.y = element_text(size = 18) )
Podemos ademas comparar varios tipos de violencia
violencia_mes_entidad_varios <- DatosMesEstadoAgrupados( datos_violencia, entidad = "Todas", resaltar.tipo = c("Violencia familiar", "Abuso sexual") ) violencia_mes_entidad_varios <- violencia_mes_entidad_varios %>% filter(Tipo != "Otros tipos de Violencia") ggplot(violencia_mes_entidad_varios) + geom_line(aes(x= mes, y = proporcion_tipo, color = factor(anyo), group = factor(anyo)), size = 1) + geom_point(aes(x= mes, y = proporcion_tipo, color = factor(anyo), group = factor(anyo)), size = 3) + facet_grid(Tipo ~ ., scales = "free_y") + scale_y_continuous(labels = scales::percent) + labs( title = "Porcentaje Violencia Familiar y Acoso Sexual contra la Mujer", subtitle = "Comparativa meses con datos en todo México", x = "", y = "Porcentaje del total de casos", color = "" ) + scale_color_viridis_d(direction = -1) + theme_ipsum() + theme( axis.title.y = element_text(size = 18), axis.text.y = element_text(size = 11), axis.text.x = element_text(size = 11), legend.text = element_text(size = 14), strip.text.y = element_text(size = 18) )
ranking_tipo_violencia_republica <- RankingTipoViolencia(datos_violencia, entidad = NULL, numero_posiciones = 5) ranking_tipo_violencia_republica
violencia_tags_inicio <- ranking_tipo_violencia_republica$violencia_tags_inicio violencia_tags_final <- ranking_tipo_violencia_republica$violencia_tags_final colores <- ranking_tipo_violencia_republica$colores ranking_tipo_violencia_republica <- ranking_tipo_violencia_republica$ranking_violencia ggplot(data = ranking_tipo_violencia_republica, aes(anyo, rank, color = Tipo, group = Tipo, label = Tipo)) + geom_line(size = 3, alpha = 0.5) + geom_point(size = 6, alpha = 0.5) + geom_point(size = 3, color = "white") + geom_text(data = violencia_tags_inicio, x = 2013.5, size = 5) + geom_text(data = violencia_tags_final, x = 2021.5, size = 5) + scale_y_reverse(breaks = 1:5) + scale_x_continuous( breaks = seq(min(ranking_tipo_violencia_republica$anyo), max(ranking_tipo_violencia_republica$anyo)), limits = c(min(ranking_tipo_violencia_republica$anyo) - 2.3, max(ranking_tipo_violencia_republica$anyo) + 2) ) + scale_color_manual(values = colores) + theme_ipsum() + theme( axis.title.y = element_text(size = 20), axis.text.y = element_text(size = 14), axis.text.x = element_text(size = 14), legend.position = "", panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.x = element_line(color = 'grey60', linetype = 'dashed')) + labs( title = "Clasificación Violencia Familiar contra la Mujer", subtitle = "Top 5 tipos de violencia en todo México", x = "Año", y = "Rank" )
ranking_tipo_violencia <- RankingTipoViolencia(datos_violencia, entidad = "Querétaro", numero_posiciones = 5) ranking_tipo_violencia
violencia_tags_inicio <- ranking_tipo_violencia$violencia_tags_inicio violencia_tags_final <- ranking_tipo_violencia$violencia_tags_final colores <- ranking_tipo_violencia$colores ranking_tipo_violencia <- ranking_tipo_violencia$ranking_violencia ggplot(data = ranking_tipo_violencia, aes(anyo, rank, color = Tipo, group = Tipo, label = Tipo)) + geom_line(size = 1.7, alpha = 0.5) + geom_point(size = 4, alpha = 0.5) + geom_point(size = 1.75, color = "white") + geom_text(data = violencia_tags_inicio, x = 2013.5, size = 4) + geom_text(data = violencia_tags_final, x = 2021.3, size = 4) + scale_y_reverse(breaks = 1:5) + scale_x_continuous( breaks = seq(min(ranking_tipo_violencia$anyo), max(ranking_tipo_violencia$anyo)), limits = c(min(ranking_tipo_violencia$anyo) - 2.3, max(ranking_tipo_violencia$anyo) + 2) ) + scale_color_manual(values = colores) + theme_ipsum() + theme( legend.position = "", panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.x = element_line(color = 'grey60', linetype = 'dashed')) + labs( title = "Clasificación Violencia Familiar contra la Mujer", subtitle = "Top 5 tipos de violencia en Querétaro", x = "Año", y = "Rank" )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.