Descripción del procesamiento de datos del Banco Mundial (años 2022 y 2018)

Este bloque de código tiene como objetivo preparar dos bases de datos limpias y comparables a partir de indicadores socioeconómicos del Banco Mundial, para los años 2022 y 2018. El propósito es filtrar y estructurar los datos de manera que ambas bases compartan:

Archivos utilizados:

bmop.csv: base original con múltiples indicadores del año 2018.

Procesamiento de la base 2022 (datosbancomundial.csv)

Procesamiento de la base 2018 (bmop.csv)

bmact = read.csv("datos_filtrados_finales.csv")


datos2= read.csv("bmop.csv") 

datos2$X2018..YR2018.[datos2$X2018..YR2018.==".."] = NA


length(unique(datos2$Series.Name))
## [1] 1510
datos2 = datos2[,c(2,3,5)]

datos2 = datos2 %>% rename(Valor = X2018..YR2018.)

# Nombres de las variables en bmact (asumiendo que son los nombres de columnas)
#variables_referencia <- names(bmact)[-1]  


# Países en bmact (asumiendo que la primera columna son países)
paises_referencia <- bmact$Country.Code 

datos2 <- datos2 %>%
  filter(Country.Code %in% paises_referencia)


# Eliminar puntos de los nombres de bmact
variables_bmact <- gsub("\\.", " ", names(bmact)[-1])  # quita los puntos y reemplaza por espacios

# También podés limpiar espacios duplicados
variables_bmact <- trimws(gsub("\\s+", " ", variables_bmact))


# Crear una versión limpia de los nombres en datos2
datos2$Serie_Limpia <- gsub("[()]", "", datos2$Series.Name)
datos2$Serie_Limpia <- gsub(",", "", datos2$Serie_Limpia)


unique(datos2$Serie_Limpia)[1:5]
## [1] "Access to clean fuels and technologies for cooking % of population"            
## [2] "Access to clean fuels and technologies for cooking rural % of rural population"
## [3] "Access to clean fuels and technologies for cooking urban % of urban population"
## [4] "Access to electricity % of population"                                         
## [5] "Access to electricity rural % of rural population"
# Comparar: ver coincidencias
intersect(variables_bmact, datos2$Serie_Limpia)
## [1] "Compulsory education duration years" "Fixed broadband subscriptions"      
## [3] "Mobile cellular subscriptions"       "Secure Internet servers"            
## [5] "Population ages 65 and above total"  "Population total"                   
## [7] "Preprimary education duration years"
limpiar_texto <- function(x) {
  x %>%
    tolower() %>%                                     # minúsculas
    gsub("(?<=\\w)\\s+s\\b", "s", ., perl = TRUE) %>% # arreglar 's sueltos
    gsub("[$+'%(),-]", "", .) %>%                     # quitar $, +, ', %, (, ), , y -
    gsub("(?<=\\d)\\s(?=\\d)", "", ., perl = TRUE) %>%# quitar espacios entre dígitos
    gsub("\\s+", " ", .) %>%                          # colapsar múltiples espacios
    trimws() %>%                                      # quitar espacios extremos
    gsub("post secondary", "postsecondary", .) %>%    # unir post secondary
    gsub("working age", "workingage", .)              # unir working age
}




datos2$Serie_Limpia <- limpiar_texto(datos2$Serie_Limpia)
variables_bmact <- limpiar_texto(variables_bmact)

var = intersect(variables_bmact, datos2$Serie_Limpia)
setdiff(variables_bmact, var)
## character(0)
datos_filtrados <- datos2 %>%
  filter(Serie_Limpia %in% variables_bmact)
View(datos_filtrados)
datos_finales <- datos_filtrados %>%
  select(Country.Code, Serie_Limpia, Valor) %>%  # Solo las necesarias
  pivot_wider(names_from = Serie_Limpia, values_from = Valor)

write.csv(datos_filtrado, "datos_filtrados_finales2018.csv", row.names = FALSE)