library(tidyverse)
Serie de Tiempo
La primera gráfica que vamos a hacer es una serie de tiempo para cada tipo de delito. La idea es que el tipo de delito sea seleccionado por el usuario de nuestro tablero, aquí vamos a trabajar con un delito fijo. Nuestra serie va a mostrar un punto rojo en el máximo de la serie de tiempo y pondrá un marcador en el último valor de la serie.
Antes de empezar, cargamos los paquetes que vamos a usar:
Lo primero que tenemos que hacer es leer los datos y fijar el encoding (para que funcionen bien los acentos).
<- read_rds("01_input/ts_delitos_prioritarios.rds")
base_ts Encoding(base_ts$subtipo_de_delito) <- "latin1"
head(base_ts)
fecha | subtipo_de_delito | Total |
---|---|---|
2015-01-01 | Robo a casa habitación | 7850 |
2015-01-01 | Robo a negocio | 7352 |
2015-01-01 | Robo a transeúnte | 6613 |
2015-01-01 | Robo a transportista | 543 |
2015-01-01 | Robo en transporte público colectivo | 1733 |
2015-01-01 | Robo en transporte público individual | 140 |
Como podemos ver, los datos son una serie de tiempo de los diferentes tipos de delitos en formato largo: la columna subtipo_de_delito
discrimina los diferentes tipos de delito y la columna Total
nos dice cuántos delitos hubo de ese tipo en cada periodo.
Para poder aceptar el input del usuario y mostrar la serie de tiempo para el delito que seleccione, vamos anecesitar poder filtrar la serie por subtipo_de_delito
:
head(base_ts %>%
filter(subtipo_de_delito == "Homicidio doloso"))
fecha | subtipo_de_delito | Total |
---|---|---|
2015-01-01 | Homicidio doloso | 1354 |
2015-02-01 | Homicidio doloso | 1388 |
2015-03-01 | Homicidio doloso | 1379 |
2015-04-01 | Homicidio doloso | 1442 |
2015-05-01 | Homicidio doloso | 1601 |
2015-06-01 | Homicidio doloso | 1466 |
Ya con nuestro edlito de interés filtrado, podemos fácilmente hacer una gráfica de línea de la serie de tiempo:
%>%
base_ts filter(subtipo_de_delito == "Homicidio doloso") %>%
ggplot(aes(fecha, Total)) +
geom_line()
Muy bien, ahora pongamos un punto rojo que nos indique el máximo de la serie de tiempo. Para esto lo primero que necesitamos es identificar la fecha en la que sucedió ese máximo.
%>%
base_ts filter(subtipo_de_delito == "Homicidio doloso") %>%
filter(Total == max(Total))
fecha | subtipo_de_delito | Total |
---|---|---|
2018-07-01 | Homicidio doloso | 3074 |
Ahora podemos usar ese código para agregar un geom_point
en el lugar donde ocurrió el máximo. El truco es poder pasar el filtro a geom_point
que recibe automaticamente los datos completos (base_ts
). Para eso podemos sobreescribir el parámetro data
que recibe geom_point
y usar la notación especial .
para referirnos a lo que recibe originalmente.
%>%
base_ts filter(subtipo_de_delito == "Homicidio doloso") %>%
ggplot(aes(fecha, Total)) +
geom_line() +
geom_point(data=. %>%
filter(Total==max(Total)),
size=3,col="red"
)
Ahora sólo nos falta poner otro punto en el último valor observado para permitir al usuario comparar fácilmente el valor actual con el valor máximo.
%>%
base_ts filter(subtipo_de_delito == "Homicidio doloso") %>%
ggplot(aes(fecha, Total)) +
geom_line() +
geom_point(data=. %>%
filter(Total==max(Total)),
size=3,col="red"
+
) geom_point(data=. %>%
filter(fecha==max(fecha)),
size=3,col="black"
)
Con esto terminamos la primera de las gráficas que queremos desplegar. En la siguiente sección vamos a hacer un diagrama de dispersión.