Imaginemos estar leyendo una de las simpática publicinotas de La Nación, por ejemplo ésta: “Qué es el café de especialidad y dónde encontrarlo en Buenos Aires”
Al final de la nota aparece un listado de direcciones. Podemos copiarlo, pegarlo en un documento de texto y guardarlo como archivo .csv. Al cargarlo en R, obtenemos esto:
cafes <- read.csv("https://bitsandbricks.github.io/data/cafes.csv", encoding = "UTF-8")
cafes
Sería útil tener las coordenadas de cada café para poder visualizarlos en un mapa. Por suerte, traducir direcciones en coordenadas es una necesidad recurrente en el análisis de datos; eso significa que ya seguro existe algún paquete que ayuda a resolver el problema. Por ejemplo…
Esta receta requiere los paquetes dplyr, opencage y leaflet. Así que (si no los tenemos aún) los instalamos:
install.packages("dplyr")
install.packages("opencage")
install.packages("leaflet")
OpenCage es una compañía cuyo propósito declarado es brindar geocodificación fácil, mundial y asequible, utilizando datos abiertos. Para acceder al servicio hay que dar de alta una cuenta en https://opencagedata.com/. Con el plan gratuito (“Free Trial”) podemos consultar hasta 2.500 direcciones por día sin cargo. Una vez realizado el registro, accedemos a nuestro panel de control en OpenCage para generar una “API key”, que vendría a ser nuestra clave de identificación para conectarnos al servicio desde R.
Habiendo obtenido una API key, la copiamos del panel de control de OpenCage y la declaramos con Sys.setenv(), para que las funciones del paquete opencage sepan como contectarse de forma autorizada.
library(opencage)
#API key inventada, utilizar la que obtuvimos de OpenCage
Sys.setenv(OPENCAGE_KEY = "23d9c9f6069690193b01fe5fb05a404e")
Ya estamos listos para procesar el listado de direcciones a georreferenciar. Nuestro dataset lo hace fácil, ya que tiene una columna con calle más altura, y otra con la ciudad. Para asegurarnos de que OpenCage sepa a qué dirección nos referimos en cada caso (ya que al fin y al cabo tiene un directorio mundial de sitios) podemos crear un campo de dirección detallada, que contenga tanto la calle como la ciudad y el país, así:
library(dplyr)
cafes <- cafes %>%
mutate(Dir_completa = paste(Dirección, ",", Ciudad, ", Argentina"))
cafes
Ahora si, a georreferenciar. Usamos la función oc_forward_df(), y para el parámetro “placename” usamos la columna recién creada, “Dir_completa”:
cafes <- cafes %>% oc_forward_df(placename = Dir_completa)
El resultado:
cafes
Nótese que han aparecido columnas con latitud y longitud de cada punto, “oc_lat” y “oc_lng”.
Para una verificación rápida, podemos proyectar los puntos en un mapa, usando leaflet:
library(leaflet)
leaflet(cafes) %>%
addTiles() %>%
addMarkers(lat = ~oc_lat, lng = ~oc_lng, label = ~Nombre)
Si todo luce bien, nos guardarmos el dataframe geolocalizado con
write.csv(cafes, "cafes_geolocalizados.csv", row.names = FALSE)
¡Listo!