Semana 12

Este conjunto de scripts sirve para ver el estado de vacunación de una autonomía. Por defecto sirve para Madrid pero cambiando dos variables puede servir para otra.

Hasta la fecha solo la he utilizado para Madrid (color rojo) y para Andalucía (color verde)

Plantilla de gráficos

theme_a <- function(base_size = 9,
                    base_family = "sans"
                           )
    {
 
    tema <-
        theme_bw(base_size=base_size) +
          
        theme(legend.position="top") +
        theme(legend.text = element_text(size=base_size,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-1, 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+2, family = base_family)) +
        theme(strip.text.x = element_text(size=base_size+1, family = base_family)) +
        theme(strip.text.y = element_text(size=base_size+1,, family = base_family)) 

    return (tema)
}

preparar datos para gráficas

library(tidyverse)
library(ggrepel)   # para etiquetas
library(RColorBrewer)
library(ggpubr)

######## Cofigurae Autonomía ######

autonomia = "Madrid"
#autonomia = "Andalucía"

paleta_andalucia <- brewer.pal(n = 16, name = "Greens")
paleta_madrid <- brewer.pal(n = 16, name = "Reds")
color_ccaa = paleta_madrid


##############################


url_file_vacunas<- "https://raw.githubusercontent.com/montera34/escovid19data/master/data/original/vacunas/estado_vacunacion_.csv"
url_ccaas_poblacion <- "https://raw.githubusercontent.com/montera34/escovid19data/master/data/original/provincias-poblacion.csv"


ccaa_INE <- c("01 Andalucía","02 Aragón","03 Asturias, Principado de","04 Balears, Illes","05 Canarias",
              "06 Cantabria","07 Castilla y León","08 Castilla - La Mancha","09 Cataluña",
              "10 Comunitat Valenciana","11 Extremadura","12 Galicia","13 Madrid, Comunidad de",
              "14 Murcia, Región de","15 Navarra, Comunidad Foral de","16 País Vasco",
              "17 Rioja, La", "18 Ceuta", "19 Melilla")
ccaa <-     c("Andalucía", "Aragón", "Asturias", "Baleares", "Canarias" ,         
              "Cantabria", "Castilla y Leon", "Castilla La Mancha","Cataluña",
              "C. Valenciana","Extremadura", "Galicia", "Madrid",
              "Murcia","Navarra","País Vasco",
              "La Rioja","Ceuta","Melilla") 

ccaa_names <- data_frame(ccaa_INE=ccaa_INE,
                         ccaa=ccaa )
print (ccaa_names)
## # A tibble: 19 x 2
##    ccaa_INE                       ccaa              
##    <chr>                          <chr>             
##  1 01 Andalucía                   Andalucía         
##  2 02 Aragón                      Aragón            
##  3 03 Asturias, Principado de     Asturias          
##  4 04 Balears, Illes              Baleares          
##  5 05 Canarias                    Canarias          
##  6 06 Cantabria                   Cantabria         
##  7 07 Castilla y León             Castilla y Leon   
##  8 08 Castilla - La Mancha        Castilla La Mancha
##  9 09 Cataluña                    Cataluña          
## 10 10 Comunitat Valenciana        C. Valenciana     
## 11 11 Extremadura                 Extremadura       
## 12 12 Galicia                     Galicia           
## 13 13 Madrid, Comunidad de        Madrid            
## 14 14 Murcia, Región de           Murcia            
## 15 15 Navarra, Comunidad Foral de Navarra           
## 16 16 País Vasco                  País Vasco        
## 17 17 Rioja, La                   La Rioja          
## 18 18 Ceuta                       Ceuta             
## 19 19 Melilla                     Melilla
autonomias_poblacion <- read_csv2( "https://www.ine.es/jaxiT3/files/t/es/csv_bdsc/2853.csv?nocab=1") %>% 
                        rename (c("ccaa_INE"="Comunidades y Ciudades Autónomas" )) %>% 
                        rename (c("poblacion"="Total" )) %>% 
                        filter (Periodo == "2020" &
                                Sexo == "Total" &
                                ccaa_INE != "Total")  %>%
                        select ("ccaa_INE","poblacion") %>%
                        right_join (ccaa_names)

vacunas <- read_csv( url_file_vacunas )

vacunas <- vacunas %>% 
          mutate_if(is.numeric, replace_na, 0) 

vacunas <-left_join ( vacunas,autonomias_poblacion, by = "ccaa" )

vacunas$date_pub <-  as.Date(vacunas$date_pub,format= "%d/%m/%y")

vacunas <- filter (vacunas, ccaa == autonomia)
print (vacunas)
## # A tibble: 58 x 15
##    date_pub   ccaa  `Dosis entregad~ `Dosis entregad~ `Dosis entregad~
##    <date>     <chr>            <dbl>            <dbl>            <dbl>
##  1 2021-01-04 Madr~                0                0                0
##  2 2021-01-05 Madr~                0                0                0
##  3 2021-01-07 Madr~                0                0                0
##  4 2021-01-08 Madr~                0                0                0
##  5 2021-01-11 Madr~                0                0                0
##  6 2021-01-12 Madr~                0                0                0
##  7 2021-01-13 Madr~                0                0                0
##  8 2021-01-14 Madr~           147540             4700                0
##  9 2021-01-15 Madr~           147540             4700                0
## 10 2021-01-18 Madr~           147540             4700                0
## # ... with 48 more rows, and 10 more variables: `Dosis entregadas` <dbl>,
## #   `Dosis administradas` <dbl>, `% sobre entregadas` <dbl>, `Total pauta
## #   completada` <dbl>, `Última fecha de actualización de datos` <chr>, `Fecha
## #   de la ultima vacuna registrada` <chr>, source_name <chr>, source <chr>,
## #   ccaa_INE <chr>, poblacion <dbl>
names (vacunas)
##  [1] "date_pub"                              
##  [2] "ccaa"                                  
##  [3] "Dosis entregadas Pfizer"               
##  [4] "Dosis entregadas Moderna"              
##  [5] "Dosis entregadas AstraZeneca"          
##  [6] "Dosis entregadas"                      
##  [7] "Dosis administradas"                   
##  [8] "% sobre entregadas"                    
##  [9] "Total pauta completada"                
## [10] "Última fecha de actualización de datos"
## [11] "Fecha de la ultima vacuna registrada"  
## [12] "source_name"                           
## [13] "source"                                
## [14] "ccaa_INE"                              
## [15] "poblacion"

Calculamos dosis dirarias por 100.000 y % de vacunados

vacunas <- vacunas  %>% 
           mutate ( porcent_dedicado_pauta_completa = (`Total pauta completada` *2 )/poblacion) %>%
           mutate ( porcent_dosis = (`Dosis administradas` )/poblacion) %>%
           mutate ( porcent_una_dosis = (`Dosis administradas`- `Total pauta completada`) / poblacion  ) %>%
           mutate ( porcent_primera_dosis = (`Dosis administradas` - (`Total pauta completada`*2)) / poblacion  ) %>%
           mutate ( porcent_segunda_dosis = `Total pauta completada` /poblacion ) %>%
           mutate ( second_dosis_day = `Total pauta completada` - lag(`Total pauta completada`, default = 0) ) %>%
           mutate ( dosis_day = `Dosis administradas` - lag(`Dosis administradas`,
                                default = 0)  ) %>%
           mutate ( entregadas_Pfizer_day = `Dosis entregadas Pfizer` - 
                                             lag (`Dosis entregadas Pfizer`, default = 0) ) %>%
           mutate ( entregadas_AstraZeneca_day = `Dosis entregadas AstraZeneca` - 
                                                  lag (`Dosis entregadas AstraZeneca`, default = 0) ) %>%
           mutate ( entregadas_Moderna_day = `Dosis entregadas Moderna` - 
                                               lag (`Dosis entregadas Moderna`, default = 0) ) %>%
           mutate ( tasa_second_dosis_day = (second_dosis_day *100000)/poblacion ) %>%
           mutate ( tasa_dosis_day = (dosis_day * 100000)/poblacion) %>%
           mutate ( tasa_entregadas_AstraZeneca_day = (entregadas_AstraZeneca_day *100000)/poblacion ) %>%
           mutate ( tasa_entregadas_Pfizer_day = (entregadas_Pfizer_day *100000)/poblacion ) %>%
           mutate ( tasa_entregadas_Moderna_day = (entregadas_Moderna_day *100000)/poblacion ) %>%
           mutate_if(is.numeric, ~replace(., is.na(.), 0)) %>%
           filter (date_pub > min(date_pub))


print (vacunas)
## # A tibble: 57 x 30
##    date_pub   ccaa  `Dosis entregad~ `Dosis entregad~ `Dosis entregad~
##    <date>     <chr>            <dbl>            <dbl>            <dbl>
##  1 2021-01-05 Madr~                0                0                0
##  2 2021-01-07 Madr~                0                0                0
##  3 2021-01-08 Madr~                0                0                0
##  4 2021-01-11 Madr~                0                0                0
##  5 2021-01-12 Madr~                0                0                0
##  6 2021-01-13 Madr~                0                0                0
##  7 2021-01-14 Madr~           147540             4700                0
##  8 2021-01-15 Madr~           147540             4700                0
##  9 2021-01-18 Madr~           147540             4700                0
## 10 2021-01-19 Madr~           147540             4700                0
## # ... with 47 more rows, and 25 more variables: `Dosis entregadas` <dbl>,
## #   `Dosis administradas` <dbl>, `% sobre entregadas` <dbl>, `Total pauta
## #   completada` <dbl>, `Última fecha de actualización de datos` <chr>, `Fecha
## #   de la ultima vacuna registrada` <chr>, source_name <chr>, source <chr>,
## #   ccaa_INE <chr>, poblacion <dbl>, porcent_dedicado_pauta_completa <dbl>,
## #   porcent_dosis <dbl>, porcent_una_dosis <dbl>, porcent_primera_dosis <dbl>,
## #   porcent_segunda_dosis <dbl>, second_dosis_day <dbl>, dosis_day <dbl>,
## #   entregadas_Pfizer_day <dbl>, entregadas_AstraZeneca_day <dbl>,
## #   entregadas_Moderna_day <dbl>, tasa_second_dosis_day <dbl>,
## #   tasa_dosis_day <dbl>, tasa_entregadas_AstraZeneca_day <dbl>,
## #   tasa_entregadas_Pfizer_day <dbl>, tasa_entregadas_Moderna_day <dbl>

Evolución porcentaje de vacunación

max_date <- max(vacunas$date_pub)
min_date <- min(vacunas$date_pub)

cols <- c("% Al menos una dosis"= color_ccaa [5],"% La 2ª dosis"= color_ccaa [8], "% Administradas" = "grey",
          "Dedicado a pauta completada" ="black")

fig1_1 <-
ggplot( data = vacunas)+
  geom_area(aes(x = date_pub, y = porcent_dosis, fill="% Administradas"),
            alpha =0.7) + 
  geom_area(aes(x = date_pub, y = porcent_una_dosis, fill="% Al menos una dosis"),
            alpha =0.7) + 
  geom_area(aes(x = date_pub, y = porcent_segunda_dosis, fill="% La 2ª dosis"),
            alpha =0.7) + 
  geom_line(aes(x = date_pub, y = porcent_dedicado_pauta_completa, color = "Dedicado a pauta completada"), 
            color="black",
            linetype = "dashed") +
  geom_text(data = vacunas %>%  top_n(1, date_pub),
        aes( x = date_pub, y = porcent_dosis,  
            label=paste0 (round((porcent_dosis*100),1),'%')),
        color="black",
        size =3.5,
        hjust = 1,
        vjust = -0.1) + # adjust the starting y position of the text label
  geom_text(data = vacunas %>%  top_n(1, date_pub),
        aes( x = date_pub, y = porcent_una_dosis,  
            label=paste0 (round((porcent_una_dosis*100),1),'%')),
        color="black",
        size =3.5,
        hjust = 1,
        vjust = -0.1) + # adjust the starting y position of the text label
  geom_text(data = vacunas %>%  top_n(1, date_pub),
        aes( x = date_pub, y = porcent_segunda_dosis,  
            label=paste0 (round((porcent_segunda_dosis*100),1),'%')),
        color="black",
        size =3.5,
        hjust = 1,
        vjust = -0.1) + # adjust the starting y position of the text label

  labs(title = "Porcentaje de vacunación")+
  scale_x_date( limits=c (min_date,max_date),
                          expand =  c(0,0)) + 
  scale_y_continuous(labels=scales::percent_format(accuracy = 1L),
                     expand =  c(0,0,0.015,0.015), 
                     breaks=seq(0, max(vacunas$porcent_dosis) + 0.1,
                                by = 0.05)) +
  scale_fill_manual(name ="",
                    values = cols )+
  theme_a()+
  theme(axis.title.y=element_blank(),
        axis.title.x=element_blank(),
        legend.position="top")
  plot (fig1_1)

vacunación diaria por 100.000 habitantes

max_date <- max(vacunas$date_pub)
min_date <- min(vacunas$date_pub)


cols <- c("Total dosis"= color_ccaa [5],"2ª dosis"= color_ccaa[8])

vacunas <- arrange (vacunas,date_pub)
fig1_2 <-
ggplot()+
  geom_col(data = vacunas, 
           aes(x = date_pub, y = tasa_dosis_day, fill="Total dosis"),
           alpha =0.7) + 
  geom_col(data = vacunas,
           aes(x = date_pub, y =  tasa_second_dosis_day, fill="2ª dosis"),
           alpha =0.7) + 
  labs(title = "Vacunas diarias por 100.000 habitantes") +
  scale_x_date( limits=c (min_date-1,max_date+1),
                          expand =  c(0,0)) + 
  scale_y_continuous(expand =  c(0,0),
                    limit = c(0,max(vacunas$tasa_dosis_day) + 100),) + 
  scale_fill_manual(name = "", values = cols )+
  scale_color_manual(name = "", values = cols )+
  theme_a()+
  theme(axis.title.y=element_blank(),
        axis.title.x=element_blank(),
        legend.position="top")
  plot (fig1_2)

  fig4 <- ggarrange(fig1_2, fig1_1, widths = c(2,2)) 
  annotate_figure(fig4,
               top = text_grob("Estado de vacunación en autonomia", face = "bold", size = 12),
               bottom = text_grob("@congosto\nFuente: @escovid19data",
               hjust = 1, x = 1, face = "italic", size = 10))

## Gráficas por tipo de vacuna

Evolución Dosis entregadas por tipo de vacuna

#### pivotamos los tipos de vacunas


vacunas_tipo <- pivot_longer(vacunas,
                        `Dosis entregadas Pfizer` |
                        `Dosis entregadas AstraZeneca`|
                        `Dosis entregadas Moderna`,
                         names_to="tipo_vacuna",
                         values_to="entregadas_tipo") %>%
                mutate ( tasa_entregadas_tipo = (entregadas_tipo * 100000)/poblacion) 

my_color <- brewer.pal(n = 16, name = "Set1") #paleta divergente
cols <- c("Dosis entregadas Pfizer"= my_color [1],
          "Dosis entregadas AstraZeneca"= my_color [2],
          "Dosis entregadas Moderna" = my_color [3])
orden_vacunas = c("Dosis entregadas Moderna",
                  "Dosis entregadas AstraZeneca",
                  "Dosis entregadas Pfizer")
labs <- c("Moderna",
          "AstraZeneca",
          "Pfizer")
vacunas_tipo$tipo_vacuna <- factor (vacunas_tipo$tipo_vacuna,levels=orden_vacunas)

max_date <- max(vacunas$date_pub)
min_date <- min(vacunas$date_pub)

fig2_1 <-
ggplot( data = vacunas_tipo, aes(x = date_pub))+
  geom_area(aes( y = tasa_entregadas_tipo, fill=tipo_vacuna),
            alpha =0.7) + 

  labs(caption = "Suministros por 100.000 habitantes")+
  scale_x_date( limits=c (min_date,max_date),
                          expand =  c(0,0)) + 
  scale_y_continuous(expand =  c(0,0)) + 
                     #limit = c(0,max(vacunas$tasa_entregadas_tipo) + 0.03),
                     #breaks=seq(0, max(vacunas$porcent_una_dosis) + 0.1,
                      #          by = 0.05)) +
  scale_fill_manual (name="", values = cols, 
                     label = labs
                     ) +
  theme_a()+
  theme(axis.title.y=element_blank(),
        axis.title.x=element_blank(),
        legend.position="bottom") +
  theme(plot.caption=element_text(size=13,
                                  vjust=1.25, 
                                  hjust = 0.5))
  plot (fig2_1)

vacunas_tipo <- pivot_longer(vacunas,
                             tasa_entregadas_AstraZeneca_day |
                             tasa_entregadas_Pfizer_day | 
                             tasa_entregadas_Moderna_day,
                             names_to = "tipo_vacuna_day",
                             values_to = "tasa_tipo_vacuna_day")
                             
 

print (vacunas_tipo)
## # A tibble: 171 x 29
##    date_pub   ccaa  `Dosis entregad~ `Dosis entregad~ `Dosis entregad~
##    <date>     <chr>            <dbl>            <dbl>            <dbl>
##  1 2021-01-05 Madr~                0                0                0
##  2 2021-01-05 Madr~                0                0                0
##  3 2021-01-05 Madr~                0                0                0
##  4 2021-01-07 Madr~                0                0                0
##  5 2021-01-07 Madr~                0                0                0
##  6 2021-01-07 Madr~                0                0                0
##  7 2021-01-08 Madr~                0                0                0
##  8 2021-01-08 Madr~                0                0                0
##  9 2021-01-08 Madr~                0                0                0
## 10 2021-01-11 Madr~                0                0                0
## # ... with 161 more rows, and 24 more variables: `Dosis entregadas` <dbl>,
## #   `Dosis administradas` <dbl>, `% sobre entregadas` <dbl>, `Total pauta
## #   completada` <dbl>, `Última fecha de actualización de datos` <chr>, `Fecha
## #   de la ultima vacuna registrada` <chr>, source_name <chr>, source <chr>,
## #   ccaa_INE <chr>, poblacion <dbl>, porcent_dedicado_pauta_completa <dbl>,
## #   porcent_dosis <dbl>, porcent_una_dosis <dbl>, porcent_primera_dosis <dbl>,
## #   porcent_segunda_dosis <dbl>, second_dosis_day <dbl>, dosis_day <dbl>,
## #   entregadas_Pfizer_day <dbl>, entregadas_AstraZeneca_day <dbl>,
## #   entregadas_Moderna_day <dbl>, tasa_second_dosis_day <dbl>,
## #   tasa_dosis_day <dbl>, tipo_vacuna_day <chr>, tasa_tipo_vacuna_day <dbl>
max_date <- max(vacunas$date_pub)
min_date <- min(vacunas$date_pub)
my_color <- brewer.pal(n = 16, name = "Set1") #paleta divergente
cols <- c("tasa_entregadas_Pfizer_day"= my_color [1],
          "tasa_entregadas_AstraZeneca_day"= my_color [2],
          "tasa_entregadas_Moderna_day" = my_color [3])
orden_vacunas = c("tasa_entregadas_Moderna_day",
                  "tasa_entregadas_AstraZeneca_day",
                  "tasa_entregadas_Pfizer_day")
labs <- c("Moderna",
          "AstraZeneca",
          "Pfizer")
vacunas_tipo$tipo_vacuna_day <- factor (vacunas_tipo$tipo_vacuna_day,levels=orden_vacunas)
fig2_2 <-
ggplot()+
  geom_col(data = vacunas_tipo, 
           aes(x = date_pub, y = tasa_tipo_vacuna_day, fill=tipo_vacuna_day),
           position = "stack",
           alpha =0.7) + 
  labs(caption = "Suministros diarios por 100.000 habitantes") +
  scale_x_date( limits=c (min_date-1,max_date+1),
                          expand =  c(0,0)) + 
  scale_y_continuous(expand =  c(0,0)) +
  scale_fill_manual (name="", values = cols,
                     label = labs) +

  theme_a()+
  theme(axis.title.y=element_blank(),
        axis.title.x=element_blank(),
        legend.position="bottom")+
  theme(plot.caption=element_text(size=11,
                                  vjust=1.25, 
                                  hjust = 0.5))
  plot (fig2_2)

  fig4 <- ggarrange(fig2_2,fig2_1, widths = c(2,2)) 
  annotate_figure(fig4,
               top = text_grob(paste ("Estado de vacunación en",autonomia,max_date), face = "bold", size = 12),
               bottom = text_grob("@congosto\nFuente: @escovid19data",
               hjust = 1, x = 1, face = "italic", size = 10)) 

  fig5 <- ggarrange(fig1_2,fig1_1,fig2_2,fig2_1,
                    ncol = 2, nrow = 2,
                    widths = c(2,2),
                    heights = c(2,2),
                    align = "v")
 
  annotate_figure(fig5,
               top = text_grob(paste ("Estado de vacunación en",autonomia,max_date),face = "bold", size = 12),
               bottom = text_grob("@congosto\nFuente: @escovid19data",
               hjust = 1, x = 1, face = "italic", size = 10))+
               theme(plot.margin = unit(c(0,0.5,0,0.5), "cm"))