library(tidyverse)
library(here)
library(rworldmap)
library(ggthemes)

Lectura de datos:

student_ratio <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-05-07/student_teacher_ratio.csv")

Limpieza de datos y cálculo del promedio:

mediaEducacionSecundaria <- student_ratio %>% 
  filter(!is.na(student_ratio))%>%
  group_by(country_code,indicator)%>%
  filter((year==2015) & (indicator %in% c('Secondary Education','Lower Secondary Education', 'Upper Secondary       Education')))%>%
  ungroup()%>%  
  group_by(country_code, country)%>%
  mutate(promedio = round(median(student_ratio, na.rm = FALSE),2),pais= country )

Verifico los nombres de ‘mediaEducacionSecundaria’ y los comparo con los datos de map_data(“world”)

anti_join(mediaEducacionSecundaria, map_data("world"), by = c("country" = "region")) %>% View()

Es necesario modificar algunos nombres de países para luego relacionarlos con los datos del mapa:

EducacionSecundaria_fixed <- mediaEducacionSecundaria %>%  
  mutate(pais = recode(country,
                                "United States of America" = "USA",
                                "Viet Nam" = "Vietnam",
                                "British Virgin Islands" = "Virgin Islands",
                                "United Republic of Tanzania" = "Tanzania",
                                "Syrian Arab Republic" = "Syria",
                                "Russian Federation" = "Russia",
                                "Democratic People's Republic of Korea" = "North Korea",
                                "The former Yugoslav Republic of Macedonia" = "Macedonia",
                                "Republic of Moldova" = "Moldova",
                                "Republic of Korea" = "South Korea",
                                "Côte d'Ivoire" = "Ivory Coast",
                                "Iran (Islamic Republic of)" = "Iran",
                                "United Kingdom of Great Britain and Northern Ireland" = "UK",
                                "Micronesia (Federated States of)" = "Micronesia",
                                "Czechia" = "Czech Republic",
                                "Cabo Verde" = "Cape Verde",
                                "Congo" = "Democratic Republic of the Congo",
                                "Brunei Darussalam" = "Brunei",
                                "Bolivia (Plurinational State of)" = "Bolivia", 
                                 "Oceania"= "Australia",
                                 "Lao People's Democratic Republic"= "Laos"))
# vuelvo a verificar los valores
anti_join(EducacionSecundaria_fixed, map_data("world"), by = c("pais" = "region"))  
## # A tibble: 76 x 10
## # Groups:   country_code, country [41]
##    edulit_ind indicator country_code country  year student_ratio flag_codes
##    <chr>      <chr>     <chr>        <chr>   <dbl>         <dbl> <chr>     
##  1 PTRHC_2T3  Secondar~ 40042        Lower ~  2015          23.4 <NA>      
##  2 PTRHC_2T3  Secondar~ 40510        World    2015          17.4 <NA>      
##  3 PTRHC_2T3  Secondar~ 40041        High i~  2015          12.7 <NA>      
##  4 PTRHC_2T3  Secondar~ SWZ          Eswati~  2015          15.8 <NA>      
##  5 PTRHC_2T3  Secondar~ 40520        Latin ~  2015          16.4 <NA>      
##  6 PTRHC_2T3  Secondar~ 40030        Middle~  2015          18.5 <NA>      
##  7 PTRHC_2T3  Secondar~ 40535        South ~  2015          29.7 <NA>      
##  8 PTRHC_2T3  Secondar~ 40515        East A~  2015          15.1 <NA>      
##  9 PTRHC_2T3  Secondar~ 40540        Sub-Sa~  2015          21.2 ‡         
## 10 PTRHC_2T3  Secondar~ 40530        Centra~  2015          10.9 <NA>      
## # ... with 66 more rows, and 3 more variables: flags <chr>,
## #   promedio <dbl>, pais <chr>

Uno los datos de educación secundaria con los datos del mapa para graficarlos:

mi_mapaSE <- EducacionSecundaria_fixed %>%
  full_join(map_data("world"), by = c("pais" = "region")) %>% 
  filter(!grepl("Antarctica",pais)) 

Visualización:

ggplot(mi_mapaSE, aes(x = long, y = lat)) +
     geom_polygon(aes(fill = promedio, group = group), color = "black", size = 0.2) + 
  scale_fill_continuous_tableau() + #gray80
     theme_fivethirtyeight() + 
     theme(axis.line=element_blank(),
           axis.text.x=element_blank(),
           axis.text.y=element_blank(),
          panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),
          plot.title = element_text(family ="Fira Mono"    ,
                             # hjust = 0.5,
                              size=18,colour = '#3B9AB2', #
                              face = 'bold'),) +
     labs(fill = "proporción a/p",
          title = "Promedio de la proporción alumno-profesor (A/P)",
          subtitle="Calculado con datos del nivel secundario del año 2015",
          caption = str_c(str_wrap("El promedio de la proporción alumno-profesor fue calculado teniendo en cuenta los datos del año 2015 correspondientes al nivel de educación secundaria. Los países que se muestran en celeste tienen un ratio más pequeño, mientras que los países que se muestran en azul tienen un ratio más alto, es decir, menos favorable). El color gris indica datos faltantes.", width = 110),"\n \nData Source: UNESCO\nVisualización: @patriloto")) 

ggsave("relacionEstudiantesProfesores3.png", width = 7.4, height = 4.5, dpi = "retina")