Descarga de datos desde
la API del MDS
# departamentos <- c(
# "alto_paraguay", "alto_parana", "amambay", "boqueron", "caaguazu", "caazapa",
# "canindeyu", "capital", "central", "concepcion", "cordillera", "guaira",
# "itapua", "misiones", "neembucu", "paraguari", "presidente_hayes", "san_pedro"
# )
#
# output_dir <- "beneficiarios_am"
# dir.create(output_dir, showWarnings = FALSE)
#
# safe_request <- function(depto) {
# res <- POST(
# url = "https://listadoam.mds.gov.py/api.lam.departamento.php",
# body = list(departamento = depto),
# encode = "form",
# add_headers(
# `User-Agent` = "Mozilla/5.0",
# Referer = "https://listadoam.mds.gov.py/"
# )
# )
# content <- content(res, as = "text", encoding = "UTF-8")
# data <- tryCatch(fromJSON(content), error = function(e) NULL)
# if (!is.null(data) && length(data) > 0) {
# write_csv(data, file.path(output_dir, paste0(depto, ".csv")))
# return(data)
# }
# return(NULL)
# }
#
# datos_lista <- map(departamentos, safe_request)
# datos_completos <- bind_rows(datos_lista)
# write_csv(datos_completos, "G:/Mi unidad/adultomayor/beneficiarios_completo.csv")
Limpieza y
enriquecimiento de datos
bene <- read_csv("G:/Mi unidad/adultomayor/beneficiarios_completo.csv") %>%
distinct(cedula, .keep_all = TRUE) %>%
mutate(
mes = month(Sys.Date()),
anho = year(Sys.Date())
)
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 335926 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): apellido, nombre, departamento, distrito
## dbl (3): cedula, monto, v_http
## lgl (2): mes, sucursal
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
imputados <- read_csv("G:/Mi unidad/adultomayor/imputar_sexo_y_fechanacim.csv")
## Rows: 7700457 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): nro_cedula, sexoimput, fnacimimput
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
bene <- bene %>%
mutate(cedula = as.character(cedula))
imputados <- imputados %>%
rename(fnac = fnacimimput) %>%
mutate(cedula = as.character(nro_cedula)) %>%
select(cedula, sexoimput, fnac)
# Unir con datos de fecha de nacimiento
bene <- left_join(bene, imputados, by = "cedula")
# Parsear y calcular edad
bene <- bene %>%
mutate(
fnac = dmy(fnac),
fecha_ref = ymd(paste0(anho, "-", str_pad(mes, 2, pad = "0"), "-01")),
edad = as.integer(interval(fnac, fecha_ref) / years(1))
)
Clasificación por grupo
etario
bene <- bene %>%
mutate(
grupo_edad = case_when(
edad < 60 ~ "Menor de 60",
edad >= 60 & edad <= 64 ~ "60-64",
edad >= 65 & edad <= 69 ~ "65-69",
edad >= 70 & edad <= 74 ~ "70-74",
edad >= 75 & edad <= 79 ~ "75-79",
edad >= 80 & edad <= 84 ~ "80-84",
edad >= 85 & edad <= 89 ~ "85-89",
edad >= 90 ~ "90+",
TRUE ~ "Desconocido"
)
)