Evolución de la semana

La comunidad de Madrid proporciona datos de la incidencia acumulada de los últimos 14 días (IA14) de covid19 en mayores de 60 años desglosada por municipios y distritos de la capital.

Plantilla de grƔficos

theme_a <- function(base_size = 12,
                    base_family = "sans"
                           )
    {
 
    tema <-
        theme_bw(base_size=base_size) +
          
        theme(legend.position="top") +
        theme(legend.text = element_text(size=base_size+1,family = base_family)) +
        theme(plot.title=element_text(size=base_size+2, 
                                      vjust=1.25, 
                                      family=base_family, 
                                      hjust = 0.5
                                      )) +
        
        theme(plot.subtitle=element_text(size=base_size, family = base_family))  +
        theme(text = element_text(size=base_size+1,family = base_family)) +
        theme(axis.text.x=element_text(size=base_size,family = base_family)) +
        theme(axis.text.y=element_text(size=base_size, family = base_family)) +

        theme(axis.title.x=element_text(size=base_size, vjust=0, family = base_family)) +
        theme(axis.title.y=element_text(size=base_size, vjust=1.25, family = base_family)) +
        theme(plot.caption=element_text(size=base_size-2, family = base_family)) +
        theme(strip.text = element_text(size=base_size+1, family = base_family)) +
        theme(strip.text.x = element_text(size=base_size, family = base_family)) +
        theme(strip.text.y = element_text(size=base_size, family = base_family)) 

    return (tema)
}

preparar datos para grƔficas

library(tidyverse)
library(knitr)
library(viridis)
library(stringr)
require(RCurl)
# library(sparkline)

locale(date_names = "es", date_format = "%AD", time_format = "%AT",
  decimal_mark = ",", grouping_mark = ".", tz = "UTC",
  encoding = "UTF-8", asciify = FALSE)
## <locale>
## Numbers:  123.456,78
## Formats:  %AD / %AT
## Timezone: UTC
## Encoding: UTF-8
## <date_names>
## Days:   domingo (dom.), lunes (lun.), martes (mar.), miƩrcoles (miƩ.), jueves
##         (jue.), viernes (vie.), sƔbado (sƔb.)
## Months: enero (ene.), febrero (feb.), marzo (mar.), abril (abr.), mayo (may.),
##         junio (jun.), julio (jul.), agosto (ago.), septiembre (sept.),
##         octubre (oct.), noviembre (nov.), diciembre (dic.)
## AM/PM:  a. m./p. m.
file_serie_madrid <- "https://datos.comunidad.madrid/catalogo/dataset/a5a761f9-c32f-4515-a878-bd4098cce79f/resource/99cd404e-5a94-4eda-915d-b7025815780c/download/covid19_tia_muni_y_distritos_s_60ymas.csv"


serie_madrid <- read_csv2(file_serie_madrid,locale = locale(encoding = 'ISO-8859-1'))
#serie_madrid <- read_csv2(file_serie_madrid)

serie_madrid$fecha_informe <-  as.Date(serie_madrid$fecha_informe,format= "%Y/%m/%d")
#serie_madrid$fecha_informe <-  as.Date(serie_madrid$fecha_informe,format= "%d/%m/%Y")
print (serie_madrid)
## # A tibble: 2,786 Ɨ 5
##    municipio_distrito         fecha_informe casos_confirmados_… tasa_incidencia…
##    <chr>                      <date>                      <dbl>            <dbl>
##  1 Madrid-Retiro              2022-07-05                    489            1250.
##  2 Madrid-Salamanca           2022-07-05                    556            1258.
##  3 Madrid-Centro              2022-07-05                    415            1385.
##  4 Madrid-Arganzuela          2022-07-05                    747            1814.
##  5 Madrid-ChamartĆ­n           2022-07-05                    578            1333.
##  6 Madrid-TetuƔn              2022-07-05                    528            1326.
##  7 Madrid-ChamberĆ­            2022-07-05                    528            1249.
##  8 Madrid-Fuencarral-El Pardo 2022-07-05                    932            1416.
##  9 Madrid-Moncloa-Aravaca     2022-07-05                    536            1574.
## 10 Madrid-Latina              2022-07-05                   1371            1899.
## # … with 2,776 more rows, and 1 more variable: codigo_geometria <chr>
serie_madrid <- serie_madrid %>%
                    mutate (year = as.integer(format(fecha_informe, format="%Y")) -2020) %>%
                    mutate (week = (as.integer(format(fecha_informe, format="%U"))+1 )+(52*year)) %>%
                    mutate (Capital = ifelse (str_detect(municipio_distrito, "^Madrid"), "SĆ­", "No" ))
last_week <- max(serie_madrid$week,na.rm = TRUE) 
last_week_text <- last_week %% 53
value_last_week <- serie_madrid %>% filter (week == last_week ) 
cm_max_value <- round(max(value_last_week$tasa_incidencia_acumulada_P60mas_ultimos_14dias,na.rm = TRUE))
cd_min_value <- round(min(value_last_week$tasa_incidencia_acumulada_P60mas_ultimos_14dias,na.rm = TRUE))
cd_mean  <- mean (value_last_week$tasa_incidencia_acumulada_P60mas_ultimos_14dias)

cap_value_last_week <- serie_madrid %>% filter (week == last_week)  %>% filter (Capital == "SĆ­")
cap_max_value <- round(max(cap_value_last_week$tasa_incidencia_acumulada_P60mas_ultimos_14dias,na.rm = TRUE))
cap_min_value <- round(min(cap_value_last_week$tasa_incidencia_acumulada_P60mas_ultimos_14dias,na.rm = TRUE))
cap_mean <- mean(cap_value_last_week$tasa_incidencia_acumulada_P60mas_ultimos_14dias)


distritos <- serie_madrid %>% filter (week == last_week ) %>%
             filter (Capital == "SĆ­") %>%
             select(municipio_distrito ) %>%
             arrange (municipio_distrito)

Seleccionar datos para grƔfica

Es una parte cómun a todas las grÔficas de variación y se centralkizan en una función para no repetir código

select_last_weeks <- function (df,indicator,since,to){
  
library(ggalt)
  

diff <- mutate (df,indicator=df[[indicator]]) %>%
    filter (!is.na (indicator) ) %>%
    filter (week == last_week | week == last_week-1 ) %>%
    mutate (week_order = ifelse(week == last_week, "indicator_last_week","indicator_pre_last_week")) %>%
    pivot_wider (names_from=week_order,values_from= indicator) %>%
    group_by(municipio_distrito) %>%
    summarise ( indicator_last_week = sum (indicator_last_week,na.rm = TRUE),
                indicator_pre_last_week = sum (indicator_pre_last_week,na.rm = TRUE) ,
                indicator_diff = indicator_last_week - indicator_pre_last_week,na.rm = TRUE,
                distrito = municipio_distrito) %>%
                distinct(municipio_distrito,indicator_last_week,indicator_pre_last_week,
                         indicator_diff,distrito) %>%
    filter (indicator_last_week > 0 & indicator_pre_last_week > 0)  %>%
    #mutate(ajuste_text = ifelse(indicator_diff >0, -0.2,(0.0*abs(indicator_diff/100))+1),
    #       ajuste_perc = ifelse(indicator_diff > 0,  (0.05*abs(indicator_diff/100))+1.25,-0.2)) 
    mutate(ajuste_text = ifelse(indicator_diff >0, -0.2,1.2),
           ajuste_perc = ifelse(indicator_diff > 0, 1.2,-0.2)) 
    

cuartile <- quantile(diff$indicator_last_week, prob=seq(0, 1, length = 11))
diff <-  diff %>% 
          filter (indicator_last_week >= cuartile[since] &
                               indicator_last_week <= cuartile[to])


return (diff)
}  

GrƔfica de tendencia (incremento)

tendencia <- function (df,text_indicator,max_size,skip,left_margin,su_color){
  

grafica <- df %>% 
     ggplot() + 
     geom_segment(aes(y=indicator_pre_last_week, 
                      yend=indicator_last_week, 
                      x= municipio_distrito,
                      xend=municipio_distrito, 
                      color=ajuste_color),
                      arrow = arrow(length=unit(0.10,"cm"), ends="last", type = "closed"))+
    geom_line (aes(y=indicator_last_week, 
               x= as.numeric(reorder(municipio_distrito,indicator_last_week))),
               size=4, alpha=0.5, color = "gray") +
     labs(y = "Variación", x = "Municipios-Distritos",
     caption = "By @congosto\nFuente: Comunidad de Madrid")+
     scale_colour_manual('', values = su_color) +
     scale_x_discrete ( expand = c(0.05, 0.05)) +
     scale_y_continuous(name=text_indicator,position = "right", limit = c(left_margin,max_size),
                        breaks=seq(0, max_size, by = skip), sec.axis = dup_axis(),
                        expand = c(0.0, 0.0)) +
     theme_a() +
     theme(axis.text.x=element_blank(),
           axis.ticks.x=element_blank(),
           panel.grid.major.x = element_blank(),
           panel.grid.minor.y = element_blank(),
           panel.grid.major.y = element_line(colour = "gray"),
           #plot.margin = unit(c(1,1,1,1), "cm"),
           legend.position="top",legend.text = element_text(size=11))



return (grafica)
}

GrƔfica de incrementos (incremento)

dumbbell_A <- function (df,text_indicator,max_size,skip,left_margin,su_color, anotacion){
  

grafica <- df %>% 
     ggplot() + 
     geom_segment(aes(x=indicator_pre_last_week, 
                      xend=indicator_last_week, 
                      y= municipio_distrito,
                      yend=municipio_distrito, 
                      color=ajuste_color),
                      arrow = arrow(length=unit(0.10,"cm"), ends="last", type = "closed"))+
    geom_line (aes(x=indicator_last_week, 
               y= as.numeric(reorder(municipio_distrito,indicator_last_week))),
               size=4, alpha=0.5, color = "gray") +
     labs(x = "Variación", y = "Municipios-distritos",
     caption = "By @congosto\nFuente: Comunidad de Madrid")+
     scale_colour_manual('', values = su_color) +
     scale_y_discrete ( expand = c(0.05, 0.05)) +
     scale_x_continuous(name=text_indicator,position = "top", limit = c(left_margin,max_size),
                        breaks=seq(0, max_size, by = skip), sec.axis = dup_axis(),
                        expand = c(0.0, 0.0)) +
     theme_a() +
     theme(axis.title.y=element_blank(),
           axis.text.y=element_blank(),
           axis.ticks.y=element_blank(),
           panel.grid.major.y = element_blank(),
           panel.grid.major.x = element_line(colour = "gray"),
           plot.margin = unit(c(1,1,1,1), "cm"),
           legend.position="top",legend.text = element_text(size=11))
if (anotacion) {
  grafica <- grafica +
     geom_text(aes(x=indicator_last_week, 
                  y= municipio_distrito, color=ajuste_color, label = municipio_distrito, 
                  hjust= ajuste_text),
                  size=4, vjust=0, show.legend = FALSE ) +
     geom_text(aes(x=indicator_pre_last_week, 
                   y= municipio_distrito, color=ajuste_color,
                   label = round(indicator_diff,1),
                   hjust= ajuste_perc),
                   size=4, vjust=0, show.legend = FALSE ) 

}

return (grafica)

}

Variación Municipios-Distritos comunidad Madrid

df <- select_last_weeks (serie_madrid,"tasa_incidencia_acumulada_P60mas_ultimos_14dias","0%","100%") %>% 
      mutate(ajuste_color = ifelse(indicator_diff >0, "Incremento", "Descenso")) %>%
      arrange (indicator_last_week)

df$municipio_distrito <- factor(df$municipio_distrito, levels=df$municipio_distrito)

variacion <- df$indicator_diff
pos <- sum(variacion > 0)
neg <- sum(variacion < 0)
cero <- sum(variacion ==0)
vacio <- sum(is.na (variacion))


mi_color <- c('Descenso'='steelblue4', 'Incremento'='red4')
grafica <-  tendencia (df,"IA14",10000,5000,0,mi_color)

grafica <- grafica + 
    labs(  
      title = paste("Municipios de la Comunidad de Madrid, diferencia de la IA14 entre las semanas", 
                     last_week_text-1,"y",last_week_text) ,
      subtitle="Normalizado a 100.000 habitantes.Los valores semanales se calculan como media\nEn rojo los Municipios que aumentan el IA14, en azul las que disminuyen.")

plot(grafica)

name_file <- paste0("images/segunda_ola_tasa_incidencia_acumulada_P60mas_ultimos_14dias_tendencia.png")
ggsave(name_file,grafica, width = 300, height = 160,unit="mm")

Distribución IA14 Municipios-Distritos último mes en la comunidad de Madrid

df <- serie_madrid %>%
      filter (week > last_week -4) %>%
      filter (tasa_incidencia_acumulada_P60mas_ultimos_14dias >0) 




ggplot(data = df, aes( x=fecha_informe, y=tasa_incidencia_acumulada_P60mas_ultimos_14dias, group = week)) + 
        geom_boxplot(color="cornflowerblue",alpha = 0.5) +
        geom_jitter(color="cornflowerblue",size = 2, alpha = 0.25, width = 2) + 
        stat_summary(geom="text", fun=quantile,
               aes(label=sprintf("%1.1f", ..y..)),
               position=position_nudge(x=3.50), size=3.5) +
       labs( title = "Distribución de la IA14 en los Municipios-Distritos",
             subtitle=paste("Normalizado a 100.000 habitantes. Los valores semanales se calculan como media.\nCada punto es el valor de un Municipios-Distritos. Los puntos mƔs oscuros son valores superpuestos"),
             y="IA14",
             caption = "By @congosto\nFuente: Comunidad de Madrid")+
    #guides(color = FALSE)+
    theme_a()+
    theme(axis.title.x=element_blank(),
          #axis.text.y=element_blank(),
          #axis.ticks.y=element_blank(),
          panel.grid.major.y = element_blank(),
          #panel.grid.major.x = element_line(colour = "gray"),
          legend.position="top",legend.text = element_text(size=11)) 

### Distribución IA14 Municipios-Distritos último mes en Madrid Capital

df <- serie_madrid %>%
      filter (week > last_week -4) %>%
      filter (Capital == "SĆ­")%>%
      filter (tasa_incidencia_acumulada_P60mas_ultimos_14dias > 0) 

df_municipio_distrito <- serie_madrid %>%
      filter (week == max (serie_madrid$week)) %>%
      filter (Capital == "SĆ­")%>%
      group_by(week,municipio_distrito)%>%
      summarise ( indicator_week_distrito = mean (tasa_incidencia_acumulada_P60mas_ultimos_14dias),
                  .groups = 'drop') %>%
      distinct (week,municipio_distrito,indicator_week_distrito) %>%
      arrange (desc(indicator_week_distrito))
            
municipio_distrito_order <- unique(df_municipio_distrito$municipio_distrito)
df$municipio_distrito <- factor (df$municipio_distrito,levels = municipio_distrito_order)



ggplot(data = df, aes( x=fecha_informe, y=tasa_incidencia_acumulada_P60mas_ultimos_14dias, group = week)) + 
        geom_boxplot(color="cornflowerblue",alpha = 0.5) +
        #geom_jitter(color="cornflowerblue",size = 4, alpha = 0.25, width = 2) + 
        geom_jitter(aes(color=municipio_distrito),size = 4, alpha = 0.6, width = 2) + 
        stat_summary(geom="text", fun=quantile,
               aes(label=sprintf("%1.1f", ..y..)),
               position=position_nudge(x=3.50), size=3.5) +
       labs( title = "Distribución de la IA14 en mayores de 60 años en los Distritos de Madrid capital",
             subtitle=paste("Normalizado a 100.000 habitantes. Los valores semanales se calculan como media.\nCada punto es el valor de un Municipios-Distritos. Los puntos mƔs oscuros son valores superpuestos"),
             y="IA14",
             color ="Distrito",
             caption = "By @congosto\nFuente: Comunidad de Madrid")+
    guides(color=guide_legend(ncol=1))+
    theme_a()+
    theme(axis.title.x=element_blank(),
          #axis.text.y=element_blank(),
          #axis.ticks.y=element_blank(),
          panel.grid.major.y = element_blank(),
          #panel.grid.major.x = element_line(colour = "gray"),
          legend.position="right",legend.text = element_text(size=11)) 

Municipios-Distritos de la Comunidad de Madrid con mayor Valor de IA14

df <- select_last_weeks (serie_madrid,"tasa_incidencia_acumulada_P60mas_ultimos_14dias","80%","100%") %>% 
      mutate(ajuste_color = ifelse(indicator_diff >0, "Incremento", "Descenso")) %>% 
      arrange (indicator_last_week)
df$municipio_distrito <- factor(df$municipio_distrito, levels=df$municipio_distrito)

mi_color <- c('Descenso'='steelblue4', 'Incremento'='red4')
grafica <-  dumbbell_A (df,"IA14",20000,5000,-8000,mi_color,TRUE)

grafica <- grafica + 
    labs(  
      title = paste("Municipios con mayor incidencia en mayores de 60 aƱos en la en la Comunidad de Madrid\ndiferencia de la IA14 entre las semanas", 
                     last_week_text-1,"y",last_week_text) ,
      subtitle="Normalizado a 100.000 habitantes. En rojo los Municipios-Distritos que aumentan el IA14, en azul los que disminuyen")

plot(grafica)

name_file <- paste0("images/segunda_ola_tasa_incidencia_acumulada_P60mas_ultimos_14dias_comunidad_mayor.png")
ggsave(name_file,grafica, width = 230, height = 325,unit="mm")

Zonas BƔsicas de Salud (Municipios-Distritos) de la Comunidad de Madrid con menor Valor de IA14

df <- select_last_weeks (serie_madrid,"tasa_incidencia_acumulada_P60mas_ultimos_14dias","0%","20%") %>% 
      mutate(ajuste_color = ifelse(indicator_diff >0, "Incremento", "Descenso")) %>% 
      arrange (indicator_last_week)
df$municipio_distrito <- factor(df$municipio_distrito, levels=df$municipio_distrito)

mi_color <- c('Descenso'='steelblue4', 'Incremento'='red4')
grafica <-  dumbbell_A (df,"IA14",5000,1000,-2000,mi_color,TRUE)

grafica <- grafica + 
    labs(  
      title = paste("Municipios-Distritos con menor incidencia en la Comunidad de Madrid, diferencia de la IA14 entre las semanas", 
                     last_week_text-1,"y",last_week_text) ,
      subtitle="Normalizado a 100.000 habitantes.Los valores semanales se calculan como media\nEn rojo las Municipios-Distritos que aumentan el IA14, en azul las que disminuyen. El dato númerico es la variación en esa semana")

plot(grafica)

name_file <- paste0("images/segunda_ola_tasa_incidencia_acumulada_P60mas_ultimos_14dias_comunidad_menor.png")
ggsave(name_file,grafica, width = 230, height = 300,unit="mm")

Zonas BƔsicas de Salud (Municipios-Distritos) de Madrid Capital

serie_madrid_cap <- serie_madrid %>% 
                          filter (Capital == "SĆ­") 

df <- select_last_weeks (serie_madrid_cap,"tasa_incidencia_acumulada_P60mas_ultimos_14dias","0%","100%") %>% 
      mutate(ajuste_color = ifelse(indicator_diff >0, "Incremento", "Descenso")) %>% 
      arrange (indicator_last_week)
df$municipio_distrito <- factor(df$municipio_distrito, levels=df$municipio_distrito)

mi_color <- c('Descenso'='steelblue4', 'Incremento'='red4')
grafica <-  dumbbell_A (df,"IA14",3000,500,-500,mi_color,TRUE)

grafica <- grafica + 
    labs(  
      title = paste("Distritos de Madrid capital, diferencia de la IA14 en mayores de 60 aƱos entre las semanas", 
                     last_week_text-1,"y",last_week_text) ,
      subtitle="Normalizado a 100.000 habitantes. En rojo los Distritos que aumentan el IA14, en azul los que disminuyen")

plot(grafica)

name_file <- paste0("images/segunda_ola_tasa_incidencia_acumulada_P60mas_ultimos_14dias_capital_mayor.png")
ggsave(name_file,grafica, width = 230, height = 325,unit="mm")