Advertisement
yayopoint

Graficos ENE

Aug 16th, 2021 (edited)
2,024
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 11.84 KB
  1. library(haven)
  2. library(ggplot2)
  3. library(ggpubr)
  4. library(gridExtra)
  5. library(stringr)
  6. library(scales)
  7.  
  8. #Función para descargar las bases de datos de la Encuesta Nacional de Empleos (Chile)
  9. descargarENE <- function(inicio, fin, guardarRDATA=TRUE) {
  10.   urlENE19 <- "https://ine.cl/docs/default-source/ocupacion-y-desocupacion/bbdd/####/formato-spss/"
  11.   urlENE <- "https://www.ine.cl/docs/default-source/ocupacion-y-desocupacion/bbdd/####/spss/"
  12.   letras <- "defmamjjasonde"
  13.   rangoFecha <- seq(as.Date(paste0(inicio,"-01")),
  14.                     to=as.Date(paste0(fin,"-01")),
  15.                     by="months")
  16.   if (file.exists(paste0("DB/ene.RData"))) {
  17.     load("DB/ene.RData")
  18.   } else {
  19.     ENE <- new.env()
  20.   }
  21.   series <- data.frame(mes=character(0),
  22.                        desocupados=numeric(0), desocupadosH=numeric(0), desocupadosM=numeric(0),
  23.                        ocupados=numeric(0), ocupadosH=numeric(0),ocupadosM=numeric(0),
  24.                        fuerzaTrabajo=numeric(0), fuerzaTrabajoH=numeric(0),fuerzaTrabajoM=numeric(0),
  25.                        poblacionEdadTrabajar=numeric(0), poblacionEdadTrabajarH=numeric(0), poblacionEdadTrabajarM=numeric(0),
  26.                        iniciadoresDisponibles=numeric(0), iniciadoresDisponiblesH=numeric(0), iniciadoresDisponiblesM=numeric(0),
  27.                        tiempoParcialInvoluntario=numeric(0), tiempoParcialInvoluntarioH=numeric(0), tiempoParcialInvoluntarioM=numeric(0),
  28.                        ocupadosBuscaronEmpleo=numeric(0), ocupadosBuscaronEmpleoH=numeric(0), ocupadosBuscaronEmpleoM=numeric(0),
  29.                        ocupadosInformales=numeric(0), ocupadosInformalesH=numeric(0), ocupadosInformalesM=numeric(0),
  30.                        ocupadosSectorInformal=numeric(0), ocupadosSectorInformalH=numeric(0), ocupadosSectorInformalM=numeric(0),
  31.                        stringsAsFactors=FALSE)
  32.   for(fecha in as.character(rangoFecha)) {
  33.     nMes <- as.numeric(format(as.Date(fecha), "%m"))
  34.     nAno <- as.numeric(format(as.Date(fecha), "%Y"))
  35.     nombreENE <- paste0("ene-",
  36.                         format(as.Date(fecha), "%Y-%m"))
  37.     nombreENEL <- paste0(nombreENE, "-", substr(letras,nMes,nMes+2))
  38.     if(!file.exists(paste0("DB/", nombreENE,".sav"))) {
  39.       if (nAno <= 2019) {
  40.         url <- sub("####", format(as.Date(fecha), "%Y"), urlENE19)
  41.         #nombreENE19 <- sub("^(ene-[0-9]{4}-[0-9]{2})(-[a-z]{3})$","\\1", nombreENE)
  42.         download.file(paste0(url,nombreENE,".sav"), destfile = paste0("DB/", nombreENE,".sav"))
  43.       } else {
  44.         url <- sub("####", format(as.Date(fecha), "%Y"), urlENE)
  45.         download.file(paste0(url,nombreENEL,".sav"), destfile = paste0("DB/", nombreENE,".sav"))
  46.       }
  47.     }
  48.     nombreGB <- gsub("-", "_", nombreENE)
  49.     if(!exists(nombreGB, envir=ENE)) {
  50.       assign(nombreGB, read_spss(paste0("DB/", nombreENE,".sav")), envir=ENE)
  51.     }
  52.  
  53.     ### Calcular los principales indicadores de ocupación y desocupación ###
  54.  
  55.     # Personas Desocupadas
  56.     DO <- ENE[[nombreGB]]$cae_especifico == 8 | ENE[[nombreGB]]$cae_especifico == 9
  57.     # Personas Ocupadas
  58.     O <- ENE[[nombreGB]]$cae_especifico >= 1 & ENE[[nombreGB]]$cae_especifico <= 7
  59.     # Fuerza de trabajo
  60.     FT <- ENE[[nombreGB]]$cae_especifico >= 1 & ENE[[nombreGB]]$cae_especifico <= 9
  61.     # Población en Edad de Trabajar
  62.     PET <- ENE[[nombreGB]]$edad >= 15
  63.     # Iniciadores Disponibles
  64.     ID <- ENE[[nombreGB]]$cae_especifico == 10
  65.     # Personas a tiempo parcial involuntario
  66.     TPI <- O & ENE[[nombreGB]]$habituales <= 30 & ENE[[nombreGB]]$c10 == 1 &
  67.       (ENE[[nombreGB]]$c11 == 1 | ENE[[nombreGB]]$c11 == 2)
  68.     # Personas ocupadas que buscaron empleo
  69.     OBE <- O & (ENE[[nombreGB]]$e4 >=1 & ENE[[nombreGB]]$e4 <=6)
  70.     # Personas ocupadas informales
  71.     OI <- ENE[[nombreGB]]$ocup_form == 2
  72.     # Personas ocupadas en el sector informal
  73.     OSI <- ENE[[nombreGB]]$sector == 2
  74.     # Añadir a la serie estadística
  75.     series[nrow(series)+1, 1] <- fecha#format(as.Date(fecha), "%Y-%m")
  76.     i <- 2
  77.     for (indicador in list(DO,O,FT,PET,ID,TPI,OBE,OI,OSI)) {
  78.       series[nrow(series),i:(i+2)] <- c(sum(indicador*ENE[[nombreGB]]$fact_cal, na.rm=TRUE),
  79.                                   tapply(indicador*ENE[[nombreGB]]$fact_cal, ENE[[nombreGB]]$sexo, sum, na.rm=TRUE))
  80.       i <- i+3
  81.     }
  82.   }
  83.   tasaDesocupacion <- with(series, desocupados/fuerzaTrabajo)
  84.   tasaDesocupacionH <- with(series, desocupadosH/fuerzaTrabajoH)
  85.   tasaDesocupacionM <- with(series, desocupadosM/fuerzaTrabajoM)
  86.   tasaOcupacion <- with(series, ocupados/poblacionEdadTrabajar)
  87.   tasaParticipacion <- with(series, fuerzaTrabajo/poblacionEdadTrabajar)
  88.   tasaPresionLaboral <- with(series, (desocupados+iniciadoresDisponibles+ocupadosBuscaronEmpleo)/(fuerzaTrabajo+iniciadoresDisponibles))
  89.   tasaDesocupacionIniciadores <- with(series, (desocupados+iniciadoresDisponibles)/(fuerzaTrabajo+iniciadoresDisponibles))
  90.   tasaDesocupacionTPI <- with(series, (desocupados+iniciadoresDisponibles+tiempoParcialInvoluntario)/(fuerzaTrabajo+iniciadoresDisponibles))
  91.  
  92.   series <- data.frame(series,tasaDesocupacion,tasaDesocupacionH, tasaDesocupacionM,
  93.                        tasaOcupacion, tasaParticipacion, tasaPresionLaboral, tasaDesocupacionIniciadores, tasaDesocupacionTPI)
  94.   assign("series", series, ENE)
  95.   if (guardarRDATA) {
  96.     save(ENE, file="DB/ene.RData")
  97.   }
  98.   return(ENE)
  99. }
  100.  
  101. # Si las bases de datos ya están descargadas, comentar esta línea y descomentar load
  102. ENE <- descargarENE("2019-05","2021-05")
  103. #load("DB/ene.RData")
  104.  
  105. # GRÁFICO DE TASA DE DESEMPLEO SEGÚN GÉNERO
  106. ggplot(data = ENE$series, aes(x = as.Date(mes), y = tasaDesocupacion, color="Total"))+
  107.   geom_line(size=1) +
  108.   geom_line(aes(y=tasaDesocupacionH, color="Hombres"),size=1) +
  109.   geom_line(aes(y=tasaDesocupacionM, color="Mujeres"),size=1) +
  110.   scale_color_manual(values = c("Total"="#00AABB", "Hombres"="#AA00BB", "Mujeres"="#AABB00")) +
  111.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  112.   scale_y_continuous(labels = scales::percent) +
  113.   theme(legend.position="top", axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  114.   labs(title = "Tasa de desocupación por trimestre móvil, según género",
  115.        x="Trimestre Móvil",
  116.        y="Tasa de desocupación %",
  117.        caption="Fuente: Elaboración propia\n
  118.       en base a datos de Encuesta Nacional de Empleo\n
  119.       (INE,2021)")
  120.  
  121. serieE9 <- data.frame(mes=character(0), motivoInactividad=numeric(0), Freq=numeric(0),
  122.                       hombres=numeric(0), mujeres=numeric(0))
  123. for (mes in ENE$series$mes) {
  124.   encuesta <- paste0("ene_", format(as.Date(mes), "%Y_%m"))
  125.   f <- ENE[[encuesta]]$activ == 3 &
  126.     ENE[[encuesta]]$edad >= 15
  127.   if("e9_otro_covid" %in% names(ENE[[encuesta]]) & "e12_otro_covid" %in% names(ENE[[encuesta]])) {
  128.     subsetENE <- ENE[[encuesta]][f,c("sexo", "e9", "e12", "e9_otro_covid", "e12_otro_covid" ,"fact_cal")]
  129.   } else {
  130.     subsetENE <- ENE[[encuesta]][f,c("sexo", "e9", "e12" ,"fact_cal")]
  131.   }
  132.   attach(subsetENE)
  133.   motivoInactividad <- numeric(nrow(subsetENE))
  134.   # Espera iniciar un empleo o actividad por cuenta propia
  135.   motivoInactividad[e9 %in% c(1,2,9,13) | (is.na(e9) & e12 %in% 1:2)] <- 1
  136.   # Responsabilidades familiares (embarazo o cuidado de menores o personas dependientes)
  137.   motivoInactividad[e9 %in% c(3,11,12,14) | (is.na(e9) & e12 %in% c(4,10,11))] <- 2
  138.   # Estudios
  139.   motivoInactividad[e9 == 4 | (is.na(e9) & e12 == 3)] <- 3
  140.   # Es Jubilado/a, Rentista, Pensionado/a o Montepiada
  141.   motivoInactividad[e9 %in% 5:7 | (is.na(e9) & e12 %in% 5:7)] <- 4
  142.   # Razones de salud
  143.   motivoInactividad[e9 %in% c(8,10) | (is.na(e9) & e12 %in% c(8,9))] <- 5
  144.   # Razones de desaliento
  145.   motivoInactividad[e9 %in% 15:20] <- 6
  146.   # No quiere o no necesita trabajar
  147.   motivoInactividad[e9 == 21 | (is.na(e9) & e12 == 12)] <- 7
  148.   if ("e9_otro_covid" %in% names(ENE[[encuesta]]) & "e12_otro_covid" %in% names(ENE[[encuesta]])) {
  149.     # Razones asociadas al covid 19
  150.     motivoInactividad[(e9 == 22 & e9_otro_covid == 1) | (is.na(e9) & e12 == 13 & e12_otro_covid ==1)] <- 8
  151.     # Otras razones
  152.     motivoInactividad[(e9 == 22 & (e9_otro_covid == 0 | is.na(e9_otro_covid))) | (is.na(e9) & e12 == 13 & (e12_otro_covid ==0 | is.na(e12_otro_covid)))] <- 9
  153.   } else {
  154.     motivoInactividad[e9 == 22 | (is.na(e9) & e12 == 13)] <- 9
  155.   }
  156.   motivoInactividad[motivoInactividad == 0] <- NA
  157.   detach(subsetENE)
  158.  
  159.   motivoInactividad <- factor(motivoInactividad,
  160.                               levels=1:9,
  161.                               labels=c("Espera iniciar un empleo o actividad por cuenta propia", #1
  162.                                        "Responsabilidades familiares (embarazo, cuidado de menores o personas dependientes)", #2
  163.                                        "Estudios", #3
  164.                                        "Es Jubilado/a, Rentista, Pensionado/a o Montepiada", #4
  165.                                        "Razones de salud", #5
  166.                                        "Razones de desaliento", #6
  167.                                        "No quiere o no necesita trabajar", #7
  168.                                        "Razones asociadas al covid-19", #8
  169.                                        "Otras Razones")) #9
  170.   subsetENE <- data.frame(subsetENE, motivoInactividad)
  171.   tmi <- with(subsetENE, xtabs(fact_cal ~ motivoInactividad))
  172.   tmis <- with(subsetENE, xtabs(fact_cal ~ motivoInactividad + sexo))
  173.   serieE9 <- rbind(serieE9, data.frame(mes=rep(mes,nrow(tmi)), tmi,
  174.                                        hombres=tmis[,1], mujeres=tmis[,2]))
  175.   rm(encuesta,f,motivoInactividad,tmi,tmis,subsetENE)
  176. }
  177.  
  178. levels(serieE9$motivoInactividad) <- str_wrap(levels(serieE9$motivoInactividad),40)
  179.  
  180. g1 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=Freq, fill=motivoInactividad)) +
  181.   geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
  182.   scale_fill_brewer(palette = "Set1", name=str_wrap("Motivo por el cual no ha trabajado, buscado empleo o no ha estado disponible para trabajar en las últimas cuatro semanas",30)) +
  183.   guides(fill=guide_legend(legend.key.height=unit(2, "cm"),ncol=1)) +
  184.   labs(x="Trimestre Móvil", y="Población Total\n(Millones de personas)") +
  185.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  186.   theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  187.   scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
  188.  
  189. g2 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=hombres, fill=motivoInactividad)) +
  190.   geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
  191.   scale_fill_brewer(palette = "Set1") +
  192.   labs(x="Trimestre Móvil", y="Hombres\n(Millones de personas)") +
  193.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  194.   theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  195.   scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
  196.  
  197. g3 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=mujeres, fill=motivoInactividad)) +
  198.   geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
  199.   scale_fill_brewer(palette = "Set1") +
  200.   labs(x="Trimestre Móvil", y="Mujeres\n(Millones de personas)") +
  201.   scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
  202.   theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
  203.   scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
  204.  
  205. legend <- get_legend(g1)
  206.  
  207. # Descomentar esta línea y dev.off para exportar a png
  208. #png("grafico2.png", width=8.5, height=11, units="in", res=300)
  209. grid.arrange(arrangeGrob(g1 + theme(legend.position = "none"),
  210.                          g2 + theme(legend.position = "none"),
  211.                          g3 + theme(legend.position = "none")),
  212.              as_ggplot(legend),
  213.              ncol=2,
  214.              widths=c(1.5,1),
  215.              top=grid::textGrob("Motivo por el que no ha trabajado o buscado empleo",gp=grid::gpar(fontsize=20,font=3)),
  216.              bottom="Fuente: Elaboración propia en base a Encuesta Nacional de Empleo (INE, 2021)"
  217. )
  218. #dev.off()
  219.  
Advertisement
RAW Paste Data Copied
Advertisement