Las librerías utilzadas son las siguientes:
library(ggplot2)
library(gridExtra)
library(ggthemes)
library(scales)
library(dplyr)
library(readr)
library(reshape2)
library(DT)
library(extrafont)
library(utf8)
library(kableExtra)
Prox.
El 11 de diciembre de 2019 el INE publicó los datos demográficos de España - Nota de prensa, acceso general a datos.
Se puede leer en el enlace anterior el alcance de estas estadísticas:
Por tanto, en primera aproximación, nos quedamos con las series semestrales desde 2002, que podrías encontrar aquí (digo podrías porque tiene pinta de ser un enlace poco permanente -la web del INE es más bien del siglo pasado y terminarán pudiendo invertir en su modernización). En cualquier caso, se aceptan como buenos, no he visto inconsistencias y a partir de ellos está generada la tabla que voy a utilizar, y que podéis consultar en este gist. Incluye los datos totales de población por procedencia.
Se trata de una tabla con 35
filas correspondientes a
los sondeos semestrales desde el 1 de enero de 2002 al 1 de enero de
2019, 1
columna de fechas y 10
con los datos
totales y desglosados por origen.
inm2k2_19 <- as.data.frame(read.csv("INM2002-2019.csv", encoding = "UTF-8", header = TRUE))
## Datos de población total
total_ciud <- inm2k2_19$Total
total_es <- inm2k2_19$España
total_ex <- inm2k2_19$Total - inm2k2_19$España
total <- as.data.frame(ts(cbind(total_ciud, total_es, total_ex)))
## Generar secuencia de fechas (1 cada seis meses, tal cual los datos)
ts <- seq.Date(from = as.Date("2002-01-01"), to = as.Date("2019-01-01"), by="6 month")
total[,"date"] <- ts
colnames(total) <- c("Total", "Españoles", "Extranjeros", "Fecha")
save(total,file = "total.Rda")
datatable(total)
Para simplificar un poco la tabla se han unido los datos de Centro América y Caribe con los de Sudamérica, y los de Asia con Oceanía.
inm2k2_19 <- as.data.frame(read.csv("INM2002-2019.csv", encoding = "UTF-8", header = TRUE))
## Datos de población extranjera por regiones de procedencia
total_UE <- inm2k2_19$UE
total_RE <- inm2k2_19$Resto.de.Europa
total_AF <- inm2k2_19$África
total_AN <- inm2k2_19$América.del.Norte
total_CySA <- inm2k2_19$Centro.América.y.Caribe + inm2k2_19$Sudamérica # por simplificar
total_AyO <- inm2k2_19$Asia + inm2k2_19$Oceanía
totalext <- as.data.frame(ts(cbind(total_UE, total_RE, total_AF, total_AN, total_CySA, total_AyO)))
## Generar secuencia de fechas (1 cada seis meses, tal cual los datos)
ts <- seq.Date(from = as.Date("2002-01-01"), to = as.Date("2019-01-01"), by = "6 month")
totalext[,"date"] <- ts
colnames(totalext) <- c("UE", "Resto.de.Europa", "África", "América.del.Norte", "Centro.y.Sudamérica", "Asia.y.Oceanía", "Fecha")
save(totalext,file = "totalext.Rda")
datatable(totalext)
A partir de los datos anteriores (gist), veamos como ha evolucionado la población en España entre 2002 y 2019.
### Cifras totales
load("total.Rda")
# Usamos unidades en millones - dividimos por 1000000
total$Total <- total$Total/1000000
total$Españoles <- total$Españoles/1000000
total$Extranjeros <- total$Extranjeros/1000000
ggtot <- ggplot(data = total) +
geom_line(aes(x = Fecha, y = Total),
size = 1.5,
color = "#048a8f",
alpha = 0.6) +
# geom_text(aes(x = as.Date("2010-06-07"), y = 48, label = "Total", color = "gray")) +
geom_label(x = as.Date("2010-06-07"), y = 44, label = "Total", color = "#048a8f") +
geom_line(aes(x = Fecha, y = Españoles),
size = 1.5,
color = "#c90a5a",
alpha = 0.6) +
# geom_text(aes(x = as.Date("2010-06-07"), y = 42, label = "Españoles", color = "gray")) +
geom_label(x = as.Date("2010-06-07"), y = 37, label = "Españoles", color = "#c90a5a") +
geom_line(aes(x = Fecha, y = Extranjeros),
size = 1.5,
color = "#06d117",
alpha = 0.6) +
# geom_text(aes(x = as.Date("2010-06-07"), y = 9, label = "Extranjeros", color = "gray")) +
geom_label(x = as.Date("2010-06-07"), y = 9, label = "Extranjeros", color = "#06d117") +
labs(x = "",
y = "Ciudadanos - millones",
title = "Evolución de la población española",
subtitle = "2002 - 2019",
caption = "@scienceisbeauty"
) +
theme_solarized() +
theme(
legend.position = "none",
panel.background = element_rect(fill = "grey75",
colour = "grey75",
size = 0.3, linetype = "solid"),
plot.background = element_rect(fill = "azure3")
)
print(ggtot)
### Sólo extranjeros
ggex <- ggplot(data = total) +
geom_line(aes(x = Fecha, y = Extranjeros),
size = 1.2,
color = "#06d117",
alpha = 0.6) +
scale_y_continuous(sec.axis = sec_axis(~.*100/(max(total$Total)), name = "%")) +
labs(x = "",
y = "Extranjeros - millones",
title = "Evolución del número y porcentaje de extranjeros en España",
subtitle = "2002 - 2019",
caption = "@scienceisbeauty"
) +
theme_solarized() +
theme(
panel.background = element_rect(fill = "grey75",
colour = "grey75",
size = 0.3, linetype = "solid"),
plot.background = element_rect(fill = "azure3"),
)
print(ggex)
###
load("totalext.Rda")
# Usamos unidades en miles - dividimos por 1000
totalext$UE <- totalext$UE/1000 #Unión Europea
totalext$Resto.de.Europa <- totalext$Resto.de.Europa/1000 #Resto de Europa
totalext$África <- totalext$África/1000 # África
totalext$América.del.Norte <- totalext$América.del.Norte/1000 # Norteamérica
totalext$Centro.y.Sudamérica <- totalext$Centro.y.Sudamérica/1000 # Centro y Sudamérica
totalext$Asia.y.Oceanía <- totalext$Asia.y.Oceanía/1000 # Centro y Sudamérica
# Se usa reshape2 (`melt`) que resulta más versatil para representar múltiples series.
totalext_rs = melt(totalext, id=c("Fecha"))
ggexprors <- ggplot(totalext_rs) +
geom_line(aes(x = Fecha, y = value, colour = variable), size = 1.2) +
# Procedencias
# "UE" = "#300ce8","Resto.de.Europa" = "#1daecf", "África" = "#ff1a05",
# "América.del.Norte" = "#5d4dab","Centro.y.Sudamérica" = "#04c21a",
# "Asia.y.Oceanía" = "#ffdd00"
scale_colour_manual(values = c("#300ce8","#1daecf","#ff1a05","#5d4dab","#04c21a","#ffdd00")) +
labs(x = "",
y = "Extranjeros - miles",
title = "Evolución del número de extranjeros en España por procedencia",
subtitle = "2002 - 2019",
caption = "@scienceisbeauty",
fill= ''
) +
theme_solarized() +
theme(
panel.background = element_rect(fill = "grey75",
colour = "grey75",
size = 0.3, linetype = "solid"),
plot.background = element_rect(fill = "azure3"),
legend.background = element_rect(fill = "transparent", colour = NA),
legend.key = element_rect(fill = "grey90"),
legend.title = element_blank()
)
print(ggexprors)
Próximamente. No se si utilizaré las opciones que ofrece
R
(sin salir de ggplot2
y sf
), o si pasarme a QGIS
, o a una mezcla de los dos.