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:

library(tidyverse)

Lo primero que tenemos que hacer es leer los datos y fijar el encoding (para que funcionen bien los acentos).

base_ts <- read_rds("01_input/ts_delitos_prioritarios.rds")
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
Note

Noten cómo estamos aquí encadenando los dos filtros, uno sobre el tipo de delito y otro sobre el total.

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.