Geocodificar direcciones con la API de Google Maps y Alteryx

El análisis espacial es uno de los grandes puntos fuertes de Alteryx (y uno de mis favoritos). Pero no siempre disponemos de la latitud y longitud de los datos para visualizarlos en un mapa. Así que vamos a ver como geocodificar direcciones utilizando la API de Google Maps y Alteryx, Y transformar direcciones en puntos geográficos con latitud y longitud.

Las direcciones postales

Para este ejemplo voy a utilizar las direcciones de las 32 comisarias de Madrid con Oficina de Denuncias y Atención al Ciudadano. Las direcciones las comisarias las he descargado desde la página web de la policía en este enlace. Y he creado un fichero excel con el nombre de la comisaria y la dirección que tiene este aspecto:

De poco nos sirven las direcciones postales si no podemos posicionarlas en un mapa para poder realizar cualquier análisis que necesitemos. Así que pasemos a informarnos algo más de la API de Google Maps para geocodificar direcciones postales.

La API de Google Maps

Lo que queremos hacer es como hemos dicho antes, transformar las direcciones postales en coordenadas geográficas. Es decir, geocodificarlas (geocoding en inglés). Y la API de Google Maps ofrece este servicio que podéis consultar en esta página web.

Para ello debemos hacer una llamada a la API con la siguiente estructura:

https://maps.googleapis.com/maps/api/geocode/output?parameters

El output es el formato en el que queremos que la API nos devuelva los datos, que puede ser json o xml.

Los parametros (parameters) obligatorios en una solicitud de geocodificación son la dirección (address) o componentes (components) y la key, es decir la llave que utilizaremos para identificarnos y realizar la solicitud. En el anterior enlace podéis consultar todo con mayor detalle, pero para nuestro ejemplo, lo que necesitamos es hacer una llamada como esta:

https://maps.googleapis.com/maps/api/geocode/json?address=Avda.+de+los+Poblados+51+28047+Madrid&components=country:ES&key=MI_API

Como se puede ver la dirección que queremos geocodificar está separada por “+” no por espacios. Hemos añadido el componente country:ES (de España), para acotar la geocodificación a España y después de key= debemos indicar nuestro código de la API.

¿Cómo obtener la clave (key)?

Es bastante sencillo, se pueden seguir los sencillos pasos que se indican en este enlace. Pero no lleva más de un par de minutos. Podemos además restringuir el uso de la API a una IP concreta por ejemplo para asegurarnos de que nadie hace un uso indebido de la misma. La forma más sencilla de crearla es a través de dicho enlace, pero también podemos entrar en la Consola de Desarrolladores y solicitar la clave desde ahí.

¿Pero tengo que pagar algo por el servicio?

El servicio es gratuito hasta un límite de uso. Tal como se indica en este otro enlace, se puede realizar sin ningún tipo de restricción hasta 2.500 solicitudes al día y 50 solicitudes por segundo.

Si necesitamos realizar un mayor uso y no podemos esperar al día siguiente, es entonces cuando podemos habilitar la opción de pago. La opción de pago permite alcanzar las 100.000 solicitudes al día a un precio de 0.50$ por cada 1.000 solicitudes adicionales.

Workflow en Alteryx

Una vez tenemos nuestra clave para utilizar la API, ya podemos empezar a trabajar con Alteryx. A continuación veremos paso por paso el proceso, pero en definitiva nos bastará con 10 herramientas muy sencillas para obtener nuestro resultado. Este es el aspecto global del workflow:

Y para los impacientes, este es el resultado que obtendríamos, primero en nuestro fichero inicial;

Ahora podríamos utilizar este fichero con la latitud y la longitud en Tableau, o también visualizarlo directamente en Alteryx:

geocodificacion con Alteryx y Google Maps API
geocodificacion con Alteryx y Google Maps API

Vamos a ver el workflow paso a paso.

Inputs, primera fórmulas y Append Fields

Son las primeras 5 herramientas que utilizaremos para dar forma a las solicitudes que realizaremos a la API con la posterior herramienta Download.

La primera herramienta Input es simplemente para leer el fichero excel con las direcciones, por lo que no tiene mayor secreto. La segunda herramienta Input es un Input de texto en el que en la primera columna, que he llamado API, he pegado la parte inicial de la solicitud a la API que vimos anteriormente: https://maps.googleapis.com/maps/api/geocode/json?address=

La segunda columna la he llamado Key, y en ella he pegado mi clave de la API.

En la primera fórmula tan sólo he utilizado la función REPLACE para sustituir cualquier espacio en el campo de Dirección por un +. Ya que es el formato que Google nos indica en el que se debe realizar la solicitud.

A continuación, la herramienta Append Fields nos sirve para pegar la API y la Key del Input de texto, a cada registro de nuestro listado de comisarias del input principal.

La segunda fórmula la he utilizado para generar la query, es decir, la solicitud concreta para cada dirección. De forma que en una nueva columna del fichero llamada “Query” tenga la estructura completa necesaria con este formato: API seguido de la DIRECCION, seguido de el COMPONENTE CON EL PAÍS y seguido por último de la KEY.

Es decir, se trata de generar una única línea de texto como esta:

https://maps.googleapis.com/maps/api/geocode/json?address=Avda.+de+los+Poblados+51+28047+Madrid&components=country:ES&key=MI_API

Y que cada línea tenga la dirección concreta de la comisaria.

Download, JSON Parse y filtrar la latitud y la longitd

Aunque dos de estas tres herramientas tal vez no sean tan habituales, vamos a ver que son muy sencillas de utilizar.

En la herramienta Download tenemos que configurar dos cosas. La primera, indicar en la pestaña Basic, y en el apartado de URL el campo de nuestro fichero que contiene la URL que queremos utilizar. En nuestro caso hemos creado dicho campo justo en el apartado anterior: Query y queremos que el resultado, es decir el Output, sea una cadena de texto en un campo adicional.

En segundo lugar, en la pestaña Payload asegurarnos que en la HTTP Action está seleccionado GET. El resto de opciones podemos dejarlas tal como aparecen por defecto.

Eso es todo con la herramienta Download. La siguiente herramienta, JSON Parse es aún más sencilla. Como en la solicitud a la API hemos indicado que queremos la respuesta en formato JSON utilizamos esta herramienta para preparar automáticamente el resultado de la API. Primero indicamos en el menú desplegable el campo que contiene el formato JSON, que en este caso es un nuevo campo que genera la herramienta Download llamado “DownloadData”. Podemos indicar que el resultado esté en un único campo de texto o que añada varios campos según el tipo de datos: valores, texto, etc. Yo he indicado esta segunda opción aunque también podríamos hacerlo con la primera.

A continuación está la herramienta Filtro. Pero ahora es un buen momento para ver el resultado que estamos obteniendo hasta este punto:

Como Alteryx nos indica, tenemos ahora 1.225 registros. Muchísimos más que las 32 comisarias iniciales ¿Por qué? Porque como se puede ver en la imagen de arriba, para cada comisaria está generando muchas filas con distinta información. Tenemos 7 componentes en total con el número de la calle, el nombre de la calle y distintos niveles de información administrativa (municipio, provincia, comunidad autónoma y país), código postal, la dirección completa formateada y varios campos que incluyen latitud y longitud. Los que he resaltado en azul son los que nos interesan en este ejemplo, los demás podemos filtrarlos. Y es precisamente lo que vamos a hacer con la herramienta de filtro, filtrar aquellos valores del campo JSON_Name que no sean la localización de latitud ni longitud.

De este modo ahora tendremos 64 registros. 2 por cada comisaria con la primera fila con los datos de latitud y la segunda con los de longitud. Ya sólo queda por ver 3 herramientas más.

Cross Tab, Select y Create Points

Cross Tab nos permite realizar la función contraria a la que que realiza Transpose. Es decir, permite cambiar la orientación del fichero de datos y pasar los valores que se encuentran en una sola columna a varias columnas. Lo que tenemos que hacer es seleccionar en la parte superior que dice “Group Data by there values” (agrupar datos en estos valores) y marcar ahí los campos que queremos mantener fijos en filas. En este caso el nombre de la comisaría, la dirección, y podríamos mantener también los campos API, Key, Query y Download Headers por si quisiéramos consultaros posteriormente.

A continuación indicamos el campo que queremos que forme nuevas cabeceras, en nuestro caso JSON_Name. Ya que JSON_Name indica si el valor que tenmos en JSON_ValueFloat es la latitud o la longitud, y queremos cada uno en una columna. Y en el valor para las nuevas columnas indicamos el campo que contiene el valor. En nuestro caso JSON_ValueFloat.

Este es el resultado de utilizar Cross Tab.

¡Perfecto! Ahora podemos utilizar la herramienta Select para cambiar el nombre a esos nuevos campos por Latitude y Longitude por ejemplo.

Y por último podemos utilizar la herramienta Create Points para así poder visualizar las comisarias en el mapa que vimos al principio. En esta herramienta basta con indicar el campo correspondiente a la latitud y el correspondiente a la longitud e indicar que son Floating Point. Ya que es el formato en el que Google devuelve los valores.

Ahora ya tenemos un workflow que podemos utilizar las veces que queramos para convertir cualquier dirección en latitud y longitud. Y poder  realizar análiss adicionales en Alteryx o exportar los resultados a Tableau.

2 Comments

  1. miguel

    Hola, he visto la entrada con la explicacion muy interesante de extraer las longitudes y latitudes sobre un archivo excel , estaba reproduciendo lo que comentas pero en el paso de la api, estoy parado ….Con un video como screen matic creo que nos vendria a muchos genial
    Soy un no iniciado a esto me he bajado alteryx y he seguido los pasos pero con lo de la api …seguire probando a ver

    gracias por tu aportacion

    1. Pablo Sáenz de Tejada

      Hola Miguel, intentaré grabar un vídeo al respecto para que quede todo más claro, pero voy a necesitar un par de semanas probablemente ya que ahora estoy muy liado ¿En qué parte relacionada con la API estás bloqueado?

      Saludos,
      Pablo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *