R que R

Eurostat: Importar datos en R con el paquete {eurostat} (ESP)

Mon, Nov 18, 2019
R
#Eurostat #tidyverse #mapas #Europa #Europe


Introducción


Eurostat es la Oficina de Estadística de la Comisión Europea, organismo que se encarga de producir datos, publicar estadísticas e indicadores sobre la Unión Europea promoviendo la armonización de los métodos estadísticos entre los Estados que la conforman. La función de este organismo es fundamental para realizar análisis y comparaciones entre países y entre regiones de la zona euro.


El paquete {eurostat} consiste en un conjunto de herramientas que tiene como finalidad facilitar la descarga de información desde la base de datos de Eurostat. Los autores de este paquete son Leo Lahti, Janne Huovari, Markus Kainu y Przemyslaw Biecek, quienes han puesto a disposición del público información que facilita su utilización y el aprendizaje de sus funcionalidades (véase el artículo en R Journal, el tutorial/ vignette, el cheatsheet del paquete, la documentación sobre sus funcionalidades o el documento de CRAN.r-project ).


La información de la presente entrada difícilmente podrá superar e incluso complementar a la disponible en los enlaces mencionados. No obstante cabe señalar que este post no pretende tener un carácter divulgativo sino que más bien nace con un objetivo de índole personal, en tanto en cuanto espero que sirva principalmente como proceso para familiarizarme con la utilización de dicho paquete. Dicho esto, si este post sirve de apoyo o ayuda a alguna persona interesada en aprender la utilización del paquete {eurostat} pues bienvenido sea.


El paquete eurostat


Como siempre, en primer lugar cargamos los paquetes necesarios. Evidentemente cargamos el paquete {eurostat} y, adicionalmente, cargamos el paquete {tidyverse} cuyas funcionalidades se ajustan muy bien con el paquete {eurostat}.



library(eurostat)
library(tidyverse)


Las funciones disponibles del paquete {eurostat} se pueden encontrar en el link previamente mencionado o indicando la siguiente orden:



library(help= "eurostat")


Para ver el contenido (table of contents - TOC) del paquete podemos utilizar la función get_eurostat_toc(). Esta función nos da como resultado un tibble de 9863 observaciones y 8 variables (esta información se puede consultar en el siguiente archivo de texto). A modo de ejemplo seleccionamos las primeras diez observaciones del dataset.



contenido_eurostat <- get_eurostat_toc()

library(DT)

datatable(contenido_eurostat)


Vemos que el dataset muestra el título o nombre de cada dataset, su código, indica si es folder o table (type), presenta información sobre la fecha de la última actualización u otros cambios o sobre las fechas o periodos que incluye cada dataset.


Ejemplo 1. Homicidios en las principales ciudades europeas


Para buscar información en función de algun patrón o de alguna palabra clave que sirva como pauta podemos utilizar la función search_eurostat(). A modo de ejemplo, y siendo un poco macabros, buscamos las TOC (tablas de contenidos) que estén relacionadas con la palabra homicidio



datatable(search_eurostat("homicide"))


Examinaremos los homicidios intencionados en las grandes ciudades cuyo id es crim_hom_ocit. Para seleccionar y cargar dicho dataset utilizamos la función get_eurostat().



homicidios <- get_eurostat(id="crim_hom_ocit")

head(homicidios)
## # A tibble: 6 x 4
##   unit  cities  time       values
##   <fct> <fct>   <date>      <dbl>
## 1 NR    AL001C1 2017-01-01     10
## 2 NR    BA001C1 2017-01-01      8
## 3 NR    BG001C1 2017-01-01     12
## 4 NR    CH001C1 2017-01-01      2
## 5 NR    CZ001C1 2017-01-01     12
## 6 NR    DE001C1 2017-01-01     50


Utilizaremos la orden time_format = "num" dado que la información es anual y, por tanto, resulta más conveniente convertir la fecha a una variable numérica que continuar utilizando una variable date.



homicidios <- get_eurostat(id="crim_hom_ocit", time_format = "num")

head(homicidios)
## # A tibble: 6 x 4
##   unit  cities   time values
##   <fct> <fct>   <dbl>  <dbl>
## 1 NR    AL001C1  2017     10
## 2 NR    BA001C1  2017      8
## 3 NR    BG001C1  2017     12
## 4 NR    CH001C1  2017      2
## 5 NR    CZ001C1  2017     12
## 6 NR    DE001C1  2017     50


Por otro lado, para remplazar los códigos del dataset por etiquetas (labels) usamos la función label_eurostat(). Nótese que, de forma alternativa, al obtener el dataframe con la función get_eurostat() podemos utilizar type= "label" para obtener directamente las variables con etiquetas.



homicidios_labels <- label_eurostat(homicidios)

head(homicidios_labels)
## # A tibble: 6 x 4
##   unit   cities    time values
##   <fct>  <fct>    <dbl>  <dbl>
## 1 Number Tiranë    2017     10
## 2 Number Sarajevo  2017      8
## 3 Number Sofia     2017     12
## 4 Number Zürich    2017      2
## 5 Number Praha     2017     12
## 6 Number Berlin    2017     50

str(homicidios_labels)
## tibble [622 x 4] (S3: tbl_df/tbl/data.frame)
##  $ unit  : Factor w/ 2 levels "Number","Per hundred thousand inhabitants": 1 1 1 1 1 1 1 1 1 1 ...
##  $ cities: Factor w/ 39 levels "Tiranë","Sarajevo",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ time  : num [1:622] 2017 2017 2017 2017 2017 ...
##  $ values: num [1:622] 10 8 12 2 12 50 15 17 35 16 ...

summary(homicidios_labels)
##                                unit                        cities   
##  Number                          :351   Sofia                 : 20  
##  Per hundred thousand inhabitants:271   Madrid                : 20  
##                                         Helsinki / Helsingfors: 20  
##                                         Ljubljana             : 20  
##                                         Bratislava            : 20  
##                                         London (greater city) : 20  
##                                         (Other)               :502  
##       time          values      
##  Min.   :2008   Min.   :  0.00  
##  1st Qu.:2010   1st Qu.:  1.28  
##  Median :2012   Median :  4.00  
##  Mean   :2012   Mean   : 14.93  
##  3rd Qu.:2014   3rd Qu.: 16.00  
##  Max.   :2017   Max.   :348.00  
## 


Vemos que el dataframe, que abarca el periodo 2008-2017, incluye información sobre el número total de homicidios y, por otro lado, sobre número de homicidios por cien mil habitantes.


Para comprobar las etiquetas de las variables y las categorías que se incluyen en el dataset utilizaremos la función label_eurostat_vars() y la función levels().



label_eurostat_vars(names(homicidios_labels))
## [1] "Unit of measure"                 "Geopolitical entity (declaring)"
## [3] "Period of time"

levels(homicidios_labels$unit)
## [1] "Number"                           "Per hundred thousand inhabitants"

levels(homicidios_labels$cities)
##  [1] "Tiranë"                 "Sarajevo"               "Sofia"                 
##  [4] "Zürich"                 "Praha"                  "Berlin"                
##  [7] "København"              "Tallinn"                "Athina"                
## [10] "Madrid"                 "Helsinki / Helsingfors" "Paris"                 
## [13] "Zagreb"                 "Budapest"               "Reykjavík"             
## [16] "Roma"                   "Vilnius"                "Riga"                  
## [19] "Podgorica"              "Valletta"               "Amsterdam"             
## [22] "Oslo"                   "Warszawa"               "Lisboa"                
## [25] "Bucuresti"              "Beograd"                "Ljubljana"             
## [28] "Bratislava"             "London (greater city)"  "Pristinë"              
## [31] "Wien"                   "Lefkosia"               "Glasgow City"          
## [34] "Belfast"                "Bruxelles / Brussel"    "Schaan"                
## [37] "Luxembourg"             "Skopje"                 "Istanbul"


1. ¿Cuántos Homicidios intencionados por cada 100.000 habitantes se registraron en el año 2008 en las principales ciudades?

A modo de ejemplo supongamos que queremos graficar el número de homicidios por cada cien mil habitantes en el año 2008 en las ciudades seleccionadas por Eurostat. En primer lugar debemos hacer unas pequeñas operaciones sobre el dataframe homicidios_labels que denominaremos homicidios_labels_mil_2008.



homicidios_labels_mil_2008 <- homicidios_labels %>%
  filter(unit == "Per hundred thousand inhabitants" & time == "2008" & values > 0.1) %>%
  mutate(cities = gsub(cities, pattern = " \\(.*", replacement="")) %>%
  mutate(cities = gsub(cities, pattern =" \\/.*", replacement ="")) %>%
  arrange(desc(values)) 

head(homicidios_labels_mil_2008) 
## # A tibble: 6 x 4
##   unit                             cities        time values
##   <fct>                            <chr>        <dbl>  <dbl>
## 1 Per hundred thousand inhabitants Vilnius       2008  10.4 
## 2 Per hundred thousand inhabitants Tiranë        2008   5.26
## 3 Per hundred thousand inhabitants Riga          2008   4.19
## 4 Per hundred thousand inhabitants Bruxelles     2008   4.12
## 5 Per hundred thousand inhabitants Glasgow City  2008   3.99
## 6 Per hundred thousand inhabitants Podgorica     2008   3.64


Una vez preparado el dataset realizamos un gráfico de barras con {ggplot2}.



ggplot(homicidios_labels_mil_2008, aes(x = reorder(cities, values), y = values)) +
  geom_col(color= "white", 
           fill= "#fc6721",
           alpha = 0.8,
           size = 2) +
  labs(title = "Homicidios intencionados por 100mil habitantes, 2008",
       subtitle = "Selección de países",
       caption = "Fuente: Eurostat",
       y = "", x="") +
  coord_flip() +
  theme_minimal() +
  theme(panel.grid.major.x = element_blank(),
        axis.text.y= element_text(size = 12, hjust = 1),
        axis.text.x= element_text(size = 10),
        plot.title = element_text(size = 15, 
                                  face = "bold", 
                                  hjust = 0.5),
        plot.subtitle = element_text(size=12, 
                                     face = "plain", 
                                     hjust = 0.5))+
  geom_text(aes(label = values, y = values + 0.05), 
            hjust = 0,
            color = "grey40",
            size = 2.8)


En 2008 Vilnius (Lituania) fue, con diferencia, la ciudad con mayor número de homicidios intencionados por cada 100 mil habitantes de entre las ciudades seleccionadas por Eurostat. Madrid, por su parte, se situaba por debajo de otras grandes ciudades europeas pero se encuentra por encima de Roma, Viena, Bucarest, Lisboa o Sarajevo.


2. ¿Cómo ha evolucionado el número de homicidios intencionados en Madrid, Paris, Londres y Berlín?

Veamos ahora la evolución de los homicidios (por cada 100.000 habitantes) en cuatro de las ciudades presentes en el dataframe: Madrid, Londres, Paris y Berlín. Para ello de nuevo realizamos una serie de operaciones en el dataframe original y generamos el dataset homicidios_MLPB.



homicidios_MLPB <- homicidios_labels %>%
  filter(unit == "Per hundred thousand inhabitants") %>%
  mutate(cities = gsub(cities, pattern = " \\(.*", replacement="")) %>%
  filter(cities == "Madrid" | cities == "London" | cities == "Paris" | cities == "Berlin") 

head(homicidios_MLPB) 
## # A tibble: 6 x 4
##   unit                             cities  time values
##   <fct>                            <chr>  <dbl>  <dbl>
## 1 Per hundred thousand inhabitants Berlin  2017   1.4 
## 2 Per hundred thousand inhabitants Madrid  2017   0.5 
## 3 Per hundred thousand inhabitants London  2017   0.07
## 4 Per hundred thousand inhabitants Madrid  2016   0.6 
## 5 Per hundred thousand inhabitants London  2016   1.23
## 6 Per hundred thousand inhabitants Berlin  2015   1.21

 

Y graficamos:



ggplot(homicidios_MLPB, aes(x= time, y= values, shape = cities, color = cities))+
  geom_point(size =2) +
  geom_line() +
  theme_minimal() +
  labs(title ="Homicidios intencionados por 100mil habitantes",
       subtitle = "Selección de países",
       caption = "Fuente: Eurostat",
       x= "Year", y = "") 


Ejemplo 2. Consumo de alcohol por país


En primer lugar buscamos un dataframe en Eurostat que pueda servirnos para el objetivo marcado que, en este caso, consiste en examinar las diferencias en el consumo de alcohol por país.



datatable(search_eurostat("alcohol consumption"))


Seleccionamos el dataset que lleva como nombre Frequency of alcohol consumption by sex, age and country of citizenship. Al igual que sucedía con el ejemplo previo modificamos el formato para las fechas por su valor numérico dado que los datos del dataset corresponden al año 2014. Para examinar las características del dataframe existen diversas alternativas que podemos utilizar y que no ayudarán a familiarizarnos con la información presente en el dataset.



consumo <- get_eurostat(id="hlth_ehis_al1c", time_format = "num")

head(consumo)
## # A tibble: 6 x 8
##   unit  frequenc sex   age    citizen   geo        time values
##   <fct> <fct>    <fct> <fct>  <fct>     <fct>     <dbl>  <dbl>
## 1 PC    DAY      F     TOTAL  EU28_FOR  EU27_2020  2014    6.3
## 2 PC    DAY      F     TOTAL  FOR       EU27_2020  2014    4.8
## 3 PC    DAY      F     TOTAL  NAT       EU27_2020  2014    4.9
## 4 PC    DAY      F     TOTAL  NEU28_FOR EU27_2020  2014    3.5
## 5 PC    DAY      F     Y15-24 EU28_FOR  EU27_2020  2014    0  
## 6 PC    DAY      F     Y15-24 FOR       EU27_2020  2014    0

consumo_labels <- label_eurostat(consumo)

head(consumo_labels)
## # A tibble: 6 x 8
##   unit    frequenc  sex    age      citizen           geo            time values
##   <fct>   <fct>     <fct>  <fct>    <fct>             <fct>         <dbl>  <dbl>
## 1 Percen~ Every day Femal~ Total    EU28 countries (~ European Uni~  2014    6.3
## 2 Percen~ Every day Femal~ Total    Foreign country   European Uni~  2014    4.8
## 3 Percen~ Every day Femal~ Total    Reporting country European Uni~  2014    4.9
## 4 Percen~ Every day Femal~ Total    Non-EU28 countri~ European Uni~  2014    3.5
## 5 Percen~ Every day Femal~ From 15~ EU28 countries (~ European Uni~  2014    0  
## 6 Percen~ Every day Femal~ From 15~ Foreign country   European Uni~  2014    0

str(consumo_labels)
## tibble [44,268 x 8] (S3: tbl_df/tbl/data.frame)
##  $ unit    : Factor w/ 1 level "Percentage": 1 1 1 1 1 1 1 1 1 1 ...
##  $ frequenc: Factor w/ 7 levels "Every day","Less than once a month",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ sex     : Factor w/ 3 levels "Females","Males",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ age     : Factor w/ 17 levels "Total","From 15 to 24 years",..: 1 1 1 1 2 2 2 2 3 3 ...
##  $ citizen : Factor w/ 4 levels "EU28 countries (2013-2020) except reporting country",..: 1 2 3 4 1 2 3 4 1 2 ...
##  $ geo     : Factor w/ 31 levels "European Union - 27 countries (from 2020)",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ time    : num [1:44268] 2014 2014 2014 2014 2014 ...
##  $ values  : num [1:44268] 6.3 4.8 4.9 3.5 0 0 0.2 0 0.3 0.5 ...

summary(consumo_labels)
##          unit                                     frequenc         sex       
##  Percentage:44268   Every day                         :6324   Females:14756  
##                     Less than once a month            :6324   Males  :14756  
##                     Every month                       :6324   Total  :14756  
##                     Not in the last 12 months         :6324                  
##                     Never                             :6324                  
##                     Never or not in the last 12 months:6324                  
##                     Every week                        :6324                  
##                   age       
##  Total              : 2604  
##  From 15 to 24 years: 2604  
##  From 15 to 29 years: 2604  
##  From 15 to 64 years: 2604  
##  From 18 to 24 years: 2604  
##  From 18 to 44 years: 2604  
##  (Other)            :28644  
##                                                  citizen     
##  EU28 countries (2013-2020) except reporting country :11067  
##  Foreign country                                     :11067  
##  Reporting country                                   :11067  
##  Non-EU28 countries (2013-2020) nor reporting country:11067  
##                                                              
##                                                              
##                                                              
##                                         geo             time     
##  European Union - 27 countries (from 2020): 1428   Min.   :2014  
##  European Union - 28 countries (2013-2020): 1428   1st Qu.:2014  
##  Belgium                                  : 1428   Median :2014  
##  Bulgaria                                 : 1428   Mean   :2014  
##  Czechia                                  : 1428   3rd Qu.:2014  
##  Denmark                                  : 1428   Max.   :2014  
##  (Other)                                  :35700                 
##      values     
##  Min.   : 0.00  
##  1st Qu.: 4.80  
##  Median :13.50  
##  Mean   :16.75  
##  3rd Qu.:25.30  
##  Max.   :99.50  
##  NA's   :13545


El dataframe contiene información del consumo según frecuencia (cada día, menos de una vez al mes, etc.), de sexo (femenino, masculino o total), por rangos de edad, por ciudadanía y por país. Para consultar el nombre completo de las variables del data set podemos utilizar la función label_eurostat_vars(names()) y para comprobar las distintas categorías de las observaciones podemos examinar los levels como se expone a continuación. De esta forma podemos tener una imagen más adecuada del dataset sobre el que estamos trabajando:



label_eurostat_vars(names(consumo_labels))
## [1] "Unit of measure"                 "Frequency"                      
## [3] "Sex"                             "Age class"                      
## [5] "Country of citizenship"          "Geopolitical entity (reporting)"
## [7] "Period of time"

levels(consumo_labels$unit)
## [1] "Percentage"

levels(consumo_labels$frequenc)
## [1] "Every day"                          "Less than once a month"            
## [3] "Every month"                        "Not in the last 12 months"         
## [5] "Never"                              "Never or not in the last 12 months"
## [7] "Every week"

levels(consumo_labels$sex)
## [1] "Females" "Males"   "Total"

levels(consumo_labels$age)
##  [1] "Total"               "From 15 to 24 years" "From 15 to 29 years"
##  [4] "From 15 to 64 years" "From 18 to 24 years" "From 18 to 44 years"
##  [7] "From 18 to 64 years" "From 25 to 34 years" "From 25 to 64 years"
## [10] "From 35 to 44 years" "From 45 to 54 years" "From 45 to 64 years"
## [13] "From 55 to 64 years" "From 65 to 74 years" "18 years or over"   
## [16] "65 years or over"    "75 years or over"

levels(consumo_labels$citizen)
## [1] "EU28 countries (2013-2020) except reporting country" 
## [2] "Foreign country"                                     
## [3] "Reporting country"                                   
## [4] "Non-EU28 countries (2013-2020) nor reporting country"

levels(consumo_labels$geo)
##  [1] "European Union - 27 countries (from 2020)"       
##  [2] "European Union - 28 countries (2013-2020)"       
##  [3] "Belgium"                                         
##  [4] "Bulgaria"                                        
##  [5] "Czechia"                                         
##  [6] "Denmark"                                         
##  [7] "Germany (until 1990 former territory of the FRG)"
##  [8] "Estonia"                                         
##  [9] "Ireland"                                         
## [10] "Greece"                                          
## [11] "Spain"                                           
## [12] "Croatia"                                         
## [13] "Italy"                                           
## [14] "Cyprus"                                          
## [15] "Latvia"                                          
## [16] "Lithuania"                                       
## [17] "Luxembourg"                                      
## [18] "Hungary"                                         
## [19] "Malta"                                           
## [20] "Austria"                                         
## [21] "Poland"                                          
## [22] "Portugal"                                        
## [23] "Romania"                                         
## [24] "Slovenia"                                        
## [25] "Slovakia"                                        
## [26] "Finland"                                         
## [27] "Sweden"                                          
## [28] "United Kingdom"                                  
## [29] "Iceland"                                         
## [30] "Norway"                                          
## [31] "Turkey"

levels(consumo$geo)
##  [1] "EU27_2020" "EU28"      "BE"        "BG"        "CZ"        "DK"       
##  [7] "DE"        "EE"        "IE"        "EL"        "ES"        "HR"       
## [13] "IT"        "CY"        "LV"        "LT"        "LU"        "HU"       
## [19] "MT"        "AT"        "PL"        "PT"        "RO"        "SI"       
## [25] "SK"        "FI"        "SE"        "UK"        "IS"        "NO"       
## [31] "TR"


Resulta curioso comprobar que el dataset seleccionado, obtenido de Eurostat, no contiene información sobre Francia.


Partiendo del dataset obtenido de Eurostat vamos a intentar responder algunas preguntas:


1. ¿Cuál es la proporción de personas por país que consumen alcohol de forma diaria?

Tal y como hemos hecho previamente, en primer lugar realizamos una serie de operaciones donde seleccionamos la frecuencia (every day), elegimos ambos sexos y cualquier edad. Queremos de esta forma mostrar el consumo de alcohol en términos generales y agregados.



consumo <- get_eurostat(id="hlth_ehis_al1c", time_format = "num")

consumo_total <- consumo %>%
  filter(frequenc == "DAY") %>%
  filter(sex == "T") %>%
  filter(age == "TOTAL") %>%
  filter(citizen == "NAT") %>%
  filter(geo != "EU28" & geo !="EU27_2020")

head(consumo_total)
## # A tibble: 6 x 8
##   unit  frequenc sex   age   citizen geo    time values
##   <fct> <fct>    <fct> <fct> <fct>   <fct> <dbl>  <dbl>
## 1 PC    DAY      T     TOTAL NAT     BE     2014   14.5
## 2 PC    DAY      T     TOTAL NAT     BG     2014    8.8
## 3 PC    DAY      T     TOTAL NAT     CZ     2014    9.5
## 4 PC    DAY      T     TOTAL NAT     DK     2014   11.6
## 5 PC    DAY      T     TOTAL NAT     DE     2014    9.2
## 6 PC    DAY      T     TOTAL NAT     EE     2014    2.1

 

Realizamos el mapa utilizando la función get_eurostat_geospatial(), estableciendo 8 rangos para los valores y utilizando como paleta de colores la llamada Spectral.




consumo_total_mapa <- get_eurostat_geospatial(nuts_level = 0) %>%
  right_join(consumo_total) %>%
  mutate(categorias = cut_to_classes(values, n=8, decimals=1)) 

head(select(consumo_total_mapa, geo, values, categorias), 3)
## Simple feature collection with 3 features and 3 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 12.10024 ymin: 34.56908 xmax: 34.56859 ymax: 51.0547
## geographic CRS: WGS 84
##   geo values  categorias                       geometry
## 1  BG    8.8  6.5 ~< 9.5 MULTIPOLYGON (((22.99717 43...
## 2  CY    4.1  3.5 ~< 6.5 MULTIPOLYGON (((33.75237 34...
## 3  CZ    9.5 9.5 ~< 12.4 MULTIPOLYGON (((14.49122 51...


ggplot(consumo_total_mapa, aes(fill=categorias)) +
  geom_sf(color = alpha("white", 1/2), alpha= 0.9) +
  xlim(c(-20, 44)) +
  ylim(c(35, 70)) +
  labs(title = "Frequency of alcohol consumption, 2014",
       subtitle = "Citizenship: National (has the citizenship of the reporting country)",
       caption = "Source: Eurostat",
       fill= "%")+
  theme_minimal() +
  theme(
    axis.line = element_blank(),
    axis.text = element_blank(),
    axis.title = element_blank(),
    axis.ticks = element_blank(),
    plot.background = element_rect(fill = "snow", color = NA),
    panel.background = element_rect(fill= "snow", color = NA),
    plot.title = element_text(size = 16, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    plot.caption = element_text(size = 8, hjust = 1),
    legend.title = element_text(color = "grey40", size = 8),
    legend.text = element_text(color = "grey40", size = 7, hjust = 0),
    legend.position = c(0.93, 0.6),
    plot.margin = unit(c(0.5,2,0.5,1), "cm")) +
  scale_fill_brewer(palette= "Spectral")


2. ¿Cuál es la proporción de mujeres por país que consumen alcohol de forma diaria?

En este caso vamos a analizar únicamente la población femenina. Para ello realizamos una pequeña modificación en el dataframe indicando: filter(sex == "F").



consumo <- get_eurostat(id="hlth_ehis_al1c", time_format = "num")

consumo_F <- consumo %>%
  filter(frequenc == "DAY") %>%
  filter(sex == "F") %>%
  filter(age == "TOTAL") %>%
  filter(citizen == "NAT") %>%
  filter(geo != "EU28"& geo !="EU27_2020")


Graficamos:




consumo_F_mapa <- get_eurostat_geospatial(nuts_level = 0) %>%
  right_join(consumo_F) %>%
  mutate(categorias = cut_to_classes(values, n=10, decimals=1)) 

head(select(consumo_F_mapa, geo, values, categorias), 3)
## Simple feature collection with 3 features and 3 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 12.10024 ymin: 34.56908 xmax: 34.56859 ymax: 51.0547
## geographic CRS: WGS 84
##   geo values categorias                       geometry
## 1  BG    3.6 2.5 ~< 3.6 MULTIPOLYGON (((22.99717 43...
## 2  CY    0.7 0.1 ~< 1.3 MULTIPOLYGON (((33.75237 34...
## 3  CZ    3.2 2.5 ~< 3.6 MULTIPOLYGON (((14.49122 51...


ggplot(consumo_F_mapa, aes(fill=categorias)) +
  geom_sf(color = alpha("white", 1/2), alpha= 0.9) +
  xlim(c(-20, 44)) +
  ylim(c(35, 70)) +
  labs(title = "Frequency of female alcohol consumption, 2014",
       subtitle = "Citizenship: National (has the citizenship of the reporting country)",
       caption = "Source: Eurostat",
       fill= "%")+
  theme_minimal() +
  theme(
    axis.line = element_blank(),
    axis.text = element_blank(),
    axis.title = element_blank(),
    axis.ticks = element_blank(),
    plot.background = element_rect(fill = "snow", color = NA),
    panel.background = element_rect(fill= "snow", color = NA),
    plot.title = element_text(size = 16, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    plot.caption = element_text(size = 8, hjust = 1),
    legend.title = element_text(color = "grey40", size = 8),
    legend.text = element_text(color = "grey40", size = 7, hjust = 0),
    legend.position = c(0.93, 0.6),
    plot.margin = unit(c(0.5,2,0.5,1), "cm")) +
  scale_fill_brewer(palette= "Spectral")


3. ¿Cuál es la proporción de hombres por país que consumen alcohol de forma diaria?

Para ser equitativos, y por curiosidad personal, comprobamos el consumo de alcohol de la población masculina. Para ello indicamos: `filter(sex == “M”).



consumo <- get_eurostat(id="hlth_ehis_al1c", time_format = "num")

consumo_M <- consumo %>%
  filter(frequenc == "DAY") %>%
  filter(sex == "M") %>%
  filter(age == "TOTAL") %>%
  filter(citizen == "NAT") %>%
  filter(geo != "EU28" & geo !="EU27_2020")


Y graficamos:




consumo_M_mapa <- get_eurostat_geospatial(nuts_level = 0) %>%
  right_join(consumo_M) %>%
  mutate(categorias = cut_to_classes(values, n=10, decimals=1)) 

head(select(consumo_M_mapa, geo, values, categorias), 3)
## Simple feature collection with 3 features and 3 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 12.10024 ymin: 34.56908 xmax: 34.56859 ymax: 51.0547
## geographic CRS: WGS 84
##   geo values   categorias                       geometry
## 1  BG   14.8 12.1 ~< 15.9 MULTIPOLYGON (((22.99717 43...
## 2  CY    7.6   4.6 ~< 8.4 MULTIPOLYGON (((33.75237 34...
## 3  CZ   16.3 15.9 ~< 19.7 MULTIPOLYGON (((14.49122 51...


ggplot(consumo_M_mapa, aes(fill=categorias)) +
  geom_sf(color = alpha("white", 1/2), alpha= 0.9) +
  xlim(c(-20, 44)) +
  ylim(c(35, 70)) +
  labs(title = "Frequency of male alcohol consumption, 2014",
       subtitle = "Citizenship: National (has the citizenship of the reporting country)",
       caption = "Source: Eurostat",
       fill= "%")+
  theme_minimal() +
  theme(
    axis.line = element_blank(),
    axis.text = element_blank(),
    axis.title = element_blank(),
    axis.ticks = element_blank(),
    plot.background = element_rect(fill = "snow", color = NA),
    panel.background = element_rect(fill= "snow", color = NA),
    plot.title = element_text(size = 16, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    plot.caption = element_text(size = 8, hjust = 1),
    legend.title = element_text(color = "grey40", size = 8),
    legend.text = element_text(color = "grey40", size = 7, hjust = 0),
    legend.position = c(0.93, 0.6),
    plot.margin = unit(c(0.5,2,0.5,1), "cm")) +
  scale_fill_brewer(palette= "Spectral")


4. ¿Cuál es la proporción de población de entre 15 y 24 años por país que consumen alcohol cada semana?

Por último examinamos la población, pero en esta ocasión seleccionamos la población con una edad comprendida entre los 15 y los 24 años, que consumen alcohol cada semana. Para ello realizamos los cambios necesarios como se indica a continuación



consumo <- get_eurostat(id="hlth_ehis_al1c", time_format = "num")

consumo_1524 <- consumo %>%
  filter(frequenc == "WEEK") %>%
  filter(sex == "T") %>%
  filter(age == "Y15-24") %>%
  filter(citizen == "NAT") %>%
  filter(geo != "EU28"& geo != "EU27_2020")


Y realizamos el gráfico:




consumo_1524_mapa <- get_eurostat_geospatial(nuts_level = 0) %>%
  right_join(consumo_1524) %>%
  mutate(categorias = cut_to_classes(values, n=10, decimals=1)) 

head(select(consumo_1524_mapa, geo, values, categorias), 3)
## Simple feature collection with 3 features and 3 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 12.10024 ymin: 34.56908 xmax: 34.56859 ymax: 51.0547
## geographic CRS: WGS 84
##   geo values   categorias                       geometry
## 1  BG   11.6 10.1 ~< 14.3 MULTIPOLYGON (((22.99717 43...
## 2  CY   13.3 10.1 ~< 14.3 MULTIPOLYGON (((33.75237 34...
## 3  CZ   33.7 31.2 ~< 35.4 MULTIPOLYGON (((14.49122 51...


ggplot(consumo_1524_mapa, aes(fill=categorias)) +
  geom_sf(color = alpha("white", 1/2), alpha= 0.9) +
  xlim(c(-20, 44)) +
  ylim(c(35, 70)) +
  labs(title = "Frequency of alcohol consumption per week, Age: 15-24 yrs, 2014",
       subtitle = "Citizenship: National (has the citizenship of the reporting country)",
       caption = "Source: Eurostat",
       fill= "%")+
  theme_minimal() +
  theme(
    axis.line = element_blank(),
    axis.text = element_blank(),
    axis.title = element_blank(),
    axis.ticks = element_blank(),
    plot.background = element_rect(fill = "snow", color = NA),
    panel.background = element_rect(fill= "snow", color = NA),
    plot.title = element_text(size = 16, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    plot.caption = element_text(size = 8, hjust = 1),
    legend.title = element_text(color = "grey40", size = 8),
    legend.text = element_text(color = "grey40", size = 7, hjust = 0),
    legend.position = c(0.93, 0.6),
    plot.margin = unit(c(0.5,2,0.5,1), "cm")) +
  scale_fill_brewer(palette= "Spectral")