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.


1. Mapa de los puertos de uso público en el Perú

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))

2. Mapa nacional de la tasa de ejecución del presupuesto público

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

Manejado de base de datos

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>' ) })

Diseñando nuestro mapa

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ú.