El código se puede encontrar aquí
library(MicroDatosEs)
library(plyr)
library(maptools)
library(sp)
library(RColorBrewer)
library(classInt)
library(ggmap) # tb carga ggplot2
Se puede bajar de aquí. Supongo que también se podrá utilizar webscrapping. Una vez bajado lo leemos con la función epa2005
del paquete MicroDatosEs
.
download.file("https://www.dropbox.com/s/g8400vnizozu9jp/EPAT0115?dl=0",
destfile="epa1t15" ,quiet=TRUE, method="wget")
epa <- epa2005("epa1t15")
Seleccionamos las variables que vamos a utilizar y eliminamos el objeto anterior
dat <- subset(epa, select=c(prov,edad,nforma, aoi,factorel))
rm(epa)
Recodificamos, convertimos a data.frame y eliminamos los menores de 16 años y los inactivos
Función para recodificar las variable aoi , nforma y edad
recodificacion <- function (dat) {
dat$aoi <- memisc::recode(dat$aoi, "o" = 1 <- 3:4, "p" = 2 <- 5:6, "i" = 3 <- 7:9)
dat$nforma3 <- memisc::recode(dat$nforma,
"Est primarios o menos" = 1 <- c("AN","P1","P2"),
"Secundarios" = 2 <- c("S1","SG","SP"),
"Universitarios" = 3 <- c("SU")
)
dat$gedad <- memisc::recode(dat$edad,
"15 años o menos" = 1 <- c(0,5,10),
"16-34" = 2 <- c(16,20,25,30),
"35-54" = 3 <- c(35,40,45,50),
"Más de 55" = 4 <- c(55,60,65)
)
dat
}
dat <- recodificacion(dat)
# convierto a data.frame tradicional
dat <-as.data.frame(dat)
# creo variable numérica para las provincias
dat$prov.n <- as.numeric(dat$prov)
# eliminar menores de 16 años
dat <- dat[ as.numeric(dat$edad) > 3, ]
# eliminar inactivos
dat <- dat[ dat$aoi != "i", ]
# eliminar niveles que no se usan
dat$gedad <- droplevels( dat$gedad)
levels(dat$gedad)
## [1] "16-34" "35-54" "Más de 55"
Utilizamos la función ddply del paquete plyr
tasa.paro <- ddply(dat,.(prov,prov.n,gedad,nforma3),summarise,
paro=weighted.mean(aoi=="p",factorel))
head(tasa.paro)
## prov prov.n gedad nforma3 paro
## 1 Álava 1 16-34 Est primarios o menos 0.62275143
## 2 Álava 1 16-34 Secundarios 0.30576090
## 3 Álava 1 16-34 Universitarios 0.16297880
## 4 Álava 1 35-54 Est primarios o menos 0.57526845
## 5 Álava 1 35-54 Secundarios 0.22396994
## 6 Álava 1 35-54 Universitarios 0.09607716
Lectura de archivo shapefile, bajado del IECA en su apartado Datos Espaciales de Referencia de Andalucía DERA
download.file("https://dl.dropboxusercontent.com/u/2712908/shp/prov.zip",destfile="prov.zip" ,quiet=TRUE, method="wget")
unzip("prov.zip")
prov.map <- readShapePoly(fn="da03_provincia.shp")
Encoding(levels(prov.map$PROVINCIA)) <- "latin1"
Seleccionamos las provincias de Andalucía
# En el objeto prov.map tenemos una variable con el nombre de las provincias
prov.map$PROVINCIA
## [1] Almería Cádiz Córdoba Granada Huelva Jaén
## [7] Málaga Sevilla
## Levels: Almería Cádiz Córdoba Granada Huelva Jaén Málaga Sevilla
# pongo en minúsculas las variables en prov.map@data
colnames(prov.map@data) <- tolower(colnames(prov.map@data))
# la usamos para seleccionar las provincias en tasa.paro.provincial
tasa.paro.and.provincial <- tasa.paro[tasa.paro$prov %in% prov.map$provincia,]
head(tasa.paro.and.provincial)
## prov prov.n gedad nforma3 paro
## 28 Almería 4 16-34 Est primarios o menos 0.4835209
## 29 Almería 4 16-34 Secundarios 0.3187231
## 30 Almería 4 16-34 Universitarios 0.2050676
## 31 Almería 4 35-54 Est primarios o menos 0.5832151
## 32 Almería 4 35-54 Secundarios 0.2884102
## 33 Almería 4 35-54 Universitarios 0.1636315
Con fortify convertimos el objeto prov.map a un objeto que pueda entender ggplot2. En el argumento region ponemos la variable que va a servir de enlace con los datos.
and.ggmap <- fortify(prov.map, region="cod_prov")
Renombramos prov.n como cod_prov en el data.frame con los datos del paro y convertimos a cáracter para que se pueda enlazar el código 04 de Almería
names(tasa.paro.and.provincial)[2] <- "cod_prov"
tasa.paro.and.provincial[tasa.paro.and.provincial$cod_prov==4,"cod_prov"] <- "04"
Ahora ya podemos crear el mapa, utilizando ggplot y geom_map. Como facets utilizamos gedad y nforma3
ggplot(tasa.paro.and.provincial) +
geom_map(aes(map_id = cod_prov, fill=paro), map = and.ggmap,
colour="black") +
expand_limits(x = and.ggmap$long, y = and.ggmap$lat) +
facet_grid( gedad ~ nforma3) +
scale_fill_gradient(low="#FDECDD",high="#D94701") +
scale_x_continuous(breaks=NULL) +
scale_y_continuous(breaks=NULL) +
theme(axis.text.y = element_blank(),
axis.text.x = element_blank(),
plot.title = element_text(face="bold", size=rel(1.4)),
legend.text = element_text(size=rel(1.1)),
strip.text = element_text(face="bold",size=rel(1)))+
labs(list(title= " Tasa de paro\npor edad y estudios\n 1º Trimestre 2015 ",x="",y="",
fill=""))
También podemos categorizar la tasa de paro. Utilizamos las función classIntervals y findInterval del paquete classInt
intervalos <- classIntervals(tasa.paro.and.provincial$paro,5,style="pretty")
tasa.paro.and.provincial$intervalos <- as.factor(findInterval(tasa.paro.and.provincial$paro, intervalos$brks,all.inside=TRUE))
Mapa con tasa de paro categorizada.
ggplot(tasa.paro.and.provincial) +
geom_map(aes(map_id = cod_prov, fill=intervalos),
map = and.ggmap,
colour="black") +
expand_limits(x = and.ggmap$long, y = and.ggmap$lat) +
facet_grid( gedad ~ nforma3) +
scale_fill_manual(values = c("#FDEBDD","#F9C9AD","#E1885F","#D34400"),
labels=c("Menos del 20%","[20% - 40%)","[40% - 60%)",
"[60% - 80%]")) +
scale_x_continuous(breaks=NULL) +
scale_y_continuous(breaks=NULL) +
theme(axis.text.y = element_blank(),
axis.text.x = element_blank(),
plot.title = element_text(face="bold", size=rel(1.4)),
legend.text = element_text(size=rel(1.1)),
strip.text = element_text(face="bold",size=rel(1.1)))+
labs(list(title= " Tasa de paro\npor edad y estudios\n 1º Trimestre 2015 ",x="",y="",
fill=""))