Se presenta el trabajo final del Módulo 1 del Programa de Especialización de Econometría Aplicada (X edición - 2020) de la Universidad Nacional de Ingeniería.
Es preciso mencionar que el grupo 8 está conformado por:
La finalidad del trabajo consiste en mostrar el uso de las librerías leaflet, RCurl, RJSONIO, plyr y ggmap, a través de 2 aplicaciones abordadas en el territorio peruano.
En primer lugar, cargamos los siguientes librerías:
library(ggplot2)
library(ggmap)
library(RCurl)
library(RJSONIO)
library(plyr)
library(leaflet)
library(dplyr)
Luego registramos el API_KEY de Google mediante el comando register_google
#register_google(key = "insertar clave")
#google_key()
Una vez registrado el API_KEY, se define una función para obtener los URL que cuenten con la información de localización para cualquier lugar seleccionado.
url <- function(address, return.call = "json", sensor = "false") {
root <- "https://maps.googleapis.com/maps/api/geocode/"
u <- paste0(root,
return.call,
"?address=",
URLencode(address),
"&key=",
google_key())
return(u)
}
Por intermedio de la siguiente función se va a extraer, entre otros, la información sobre la longitud y latitud para cualquier lugar seleccionado, para ello se emplea la función URL definida previamente.
geoCode <- function(address,verbose=FALSE) {
if(verbose) cat(address,"\n")
u <- url(address)
doc <- getURL(u)
x <- fromJSON(doc,simplify = FALSE)
if(x$status=="OK") {
lat <- x$results[[1]]$geometry$location$lat
lng <- x$results[[1]]$geometry$location$lng
location_type <- x$results[[1]]$geometry$location_type
formatted_address <- x$results[[1]]$formatted_address
return(c(lat, lng, location_type, formatted_address))
} else {
return(c(NA,NA,NA, NA))
}}
Las siguientes funciones permiten devolver una matriz que contiene, entre otros, la información sobre la longitud y latitud para cada uno de los puertos de uso público de Perú
f_address <- function(n,i){
address = geoCode(n)
i <- ldply(address, function(x) geoCode(x))
names(i) <- c("lat","lon","location_type", "forAddress")
return(i)
}
A <- as.matrix(f_address("Muelle del Callao","A"))
B <- as.matrix(f_address("Terminales Portuarios Euroandinos Paita. S.A.","B"))
C <- as.matrix(f_address("Terminal Maritimo de Salaverry","C"))
D <- as.matrix(f_address("Terminal Portuario Paracas S.A.","D"))
E <- as.matrix(f_address("Muelle F TISUR","E"))
F <- as.matrix(f_address("Puerto Malabrigo","F"))
G <- as.matrix(f_address("Terminal Portuario De Chimbote","G"))
H <- as.matrix(f_address("Muelle de Puerto Supe","H"))
I <- as.matrix(f_address("Puerto Maritimo de Huacho","I"))
J <- as.matrix(f_address("APM Terminals Callao","J"))
K <- as.matrix(f_address("Transportadora Callao","K"))
L <- as.matrix(f_address("ENAPU S.A. - Terminal Portuario de Ilo","L"))
M <- as.matrix(f_address("erminal Portuario de Iquitos ENAPU","M"))
N <- as.matrix(f_address("Enapu Yurimaguas","N"))
O <- as.matrix(f_address("Terminal Portuario de Yurimaguas - Nueva Reforma","O"))
Como paso previo a la elaboración del mapa de interés, vamos a definir una lista “z” que incluya las caracteristicas aplicables a las etiquetas que se añadirán en el mapa.
z <- list(
"color" = "red",
"font-family" = "serif",
"font-style" = "italic",
"box-shadow" = "3px 3px rgba(0,0,0,0.25)",
"font-size" = "12px",
"border-color" = "rgba(0,0,0,0.5)")
Finalmente utilizamos la libería “leaflet” para grafícar el mapa de los puertos públicos en el Perú.
leaflet() %>% addTiles() %>% setView(-74.900665,-9.800678, 7) %>%
addMarkers(lng=as.double(A[4,2]), lat=as.double(A[4,1]),
label = "Muelle Sur del Terminal Portuario del Callao",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(B[4,2]), lat=as.double(B[4,1]),
label = "Terminal Portuario de Paita",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(C[4,2]), lat=as.double(C[4,1]),
label = "Terminal Portuario de Salaverry",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(D[4,2]), lat=as.double(D[4,1]),
label = "Terminal Portuario General San Martín",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(E[4,2]), lat=as.double(E[4,1]),
label = "Terminal Portuario de Matarani",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(F[4,2]), lat=as.double(F[4,1]),
label = "Terminal Portuario de Chicama",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(G[4,2]), lat=as.double(G[4,1]),
label = "Terminal Portuario de Chimbote",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(H[4,2]), lat=as.double(H[4,1]),
label = "Terminal Portuario de Supe",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(I[4,2]), lat=as.double(I[4,1]),
label = "Terminal Portuario de Huacho",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(J[4,2]), lat=as.double(J[4,1]),
label = "Muelle Norte del Terminal Portuario del Callao",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(K[4,2]), lat=as.double(K[4,1]),
label = "Terminal de Concentrado de Minerales",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(L[4,2]), lat=as.double(L[4,1]),
label = "Terminal Portuario de Ilo",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(M[4,2]), lat=as.double(M[4,1]),
label = "Terminal Portuario de Iquitos",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(N[4,2]), lat=as.double(N[4,1]),
label = "Terminal Portuario de Yurimaguas - ENAPU",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z)) %>%
addMarkers(lng=as.double(O[4,2]), lat=as.double(O[4,1]),
label = "Terminal Portuario de Yurimaguas - Nueva Reforma",
labelOptions = labelOptions(noHide = T, direction = "bottom",style = z))
Agradecimientos a: David Robinson.
Cuyo trabajo titulado R Markdown & Leaflet: Plotting Irish Census Data sirvió de inspiración para la presente aplicación.
El objetivo es mostrar el avance en la ejecución del presupuesto público en los gobiernos locales (distritales y provinciales). Asimismo incentivar el uso de la base de datos disponible en el Sistema Integrado de Administración financiera (SIAF) del MEF, que se actualiza con frecuencia diaria y muestra información sobre los proyectos ejecutados en el territorio peruano.
Las base de datos usadas provienen de:
En primer lugar, cargamos los siguientes librerías:
library(leaflet)
library(sp)
library(GISTools)
library(rgdal)
library(rgeos)
library(dplyr)
library(readxl)
library(htmltools)
Luego establecemos el directorio de trabajo:
setwd("C:/Users/braul/Desktop/PEEAUNI/Modulo1Software Skills/Modulo 1Trabajo final")
Cargamos la información del SIAF, de la población peruana a nivel distrital (censo 2017) y las coordenadas geográficas (.shp), respectivamente:
ejecu <- read_excel("siaf_avance_ejec_hasta_ago2020.xlsx")
pob <- read_excel("BD_pob_distritos.xlsx")
datos <- readOGR(dsn = ".", layer = "distrito_peru")
## OGR data source with driver: ESRI Shapefile
## Source: "C:\Users\braul\Desktop\PEEAUNI\Modulo1Software Skills\Modulo 1Trabajo final", layer: "distrito_peru"
## with 1874 features
## It has 15 fields
## Integer64 fields read as strings: CNT_CCPP
Calculamos el centroide para cada distrito:
centers <-cbind.data.frame(data.frame(gCentroid(datos,byid=TRUE),id=datos@data$UBIGEO))
Renombramos el id para poder hacer un merge luego:
centers<-dplyr::rename(centers, UBIGEO = id)
pob<-dplyr::rename(pob, UBIGEO = cdi)
Hacemos el merge entre la base de centroides con la base de información sobre ejecución presupuestal:
info_centers<-left_join(ejecu, centers, by = "UBIGEO")
# UBIGEO es la variable "llave" o "key"
Hacemos otro merge entre la base producida en la línea de arriba y la población distrital:
info_centers<-left_join(info_centers, pob, by = "UBIGEO")
# UBIGEO es la variable "llave" o "key"
Ya teniendo casi nuestro dataset listo, procederemos a realizar las etiquetas de nuestro próximo mapa:
labs <- lapply(seq(nrow(info_centers)), function(i) {
paste0( '<p>', info_centers[i, "Municipalidad"], '<p></p>',
"Provincia: ", info_centers[i, "prov"], '<p></p>',
"Departamento: ", info_centers[i, "dep"], '<p></p>',
"Ejecución presupuestal: ", format(as.numeric(info_centers[i, "ejec"]),nsmall=1,big.mark=","), "%", '<p></p>',
"Presupuesto (PIM): S/ ", format(as.numeric(info_centers[i, "PIM"]),nsmall=0,big.mark=","), '<p></p>',
"Población: ", format(as.numeric(info_centers[i, "c17_pob"]),nsmall=0,big.mark=","), '</p>' ) })
Cargamos la información de los centroides:
m <- leaflet(info_centers, width = "100%", height = 800) %>% addTiles()
Creamos una escala de colores en base a la información de ejecución:
RdYlBu<-colorQuantile(c("#FF0000", "#FFFF00", "#33cc33"), domain = unique(info_centers$ejec), n=4,
na.color = "#808080", alpha = FALSE, reverse = FALSE, right = FALSE)
Por último, añadimos los circulos (por cada información de ejecución). Asimismo, el radio de cada círculo representa el presupuesto per cápita (PIM/c17_pob).
m %>% addCircles(~x, ~y, radius = ~sqrt(PIM/c17_pob)*60,
stroke = FALSE, fillOpacity = 0.90,
color = ~RdYlBu(ejec),
label = lapply(labs, HTML),
labelOptions = labelOptions(direction = 'left', opacity = 0.7)) %>%
addLegend(pal = RdYlBu, values = ~ejec, title = "Ejecución presupuestal", opacity = .9)
¡Listo! Tenemos nuestro mapa que muestra mediante una escala, el avance de las obras públicas en el país de Perú.