Ingeniería de Datos: Transformando de Direcciones a Coordenadas

Implementando Geocoding API de Google Maps en Python

Daniel Martinez Bielostotzky
Ciencia y Datos
5 min readJan 29, 2019

--

Foto de Robert Penaloza en Unsplash

Para mi proyecto final de pregrado estoy trabajando en un proyecto de ciencia de datos, en los datos, una de las columnas contiene un punto de la ciudad en formato tipo texto. Para poder visualizar estos datos se tuvo que transformar estos datos a coordenadas en formato latitud y longitud. Para esto, el API de Google Maps tiene un servicio llamado Geocoding con el que al pasar al API la dirección como cadena se obtiene, entre otras cosas, la latitud y longitud exactas de la dirección.

La intención de este artículo es explicar cómo utilizar esta API en Python, explicando desde la instalación y los costos hasta algunos tips para facilitar la precisión.

Instalación de la librería

El modulo de Python de Google Maps se instala igual que cualquier otro módulo, usando pip o conda.

via pip:

via conda:

Una vez la instalación se haya completado, necesitarás un API key para poder utilizar el API. Para obtenerla, en necesario registrarse en Google Cloud y habilitar una tarjeta de crédito, los pasos para obtener el API key están muy bien documentados por Google y pueden encontrarse aquí.

Costos del API

Cada petición tiene un costo de $0.005 USD, lo que significa un valor de $5 USD cada 1,000 peticiones, es importante calcular el costo antes de utilizar el API ya que cada dirección será una petición.

fuente

Sin embargo, cada mes Google permite las primeras 40,000 peticiones ($200 USD) gratuitas para promover la utilización del servicio.

Implementación del API

En Python, lo único que se necesita es importar la libreria y crear un cliente utilizando la llave que se obtuvo al comienzo.

El cliente gmaps tiene un método geocode que al recibir como parámetro una dirección como cadena retorna un JSON con el siguiente formato:

Las coordenadas latitud y longitud estarán en la sección geometry.

Ejemplo

Para ilustrar el uso de esta herramienta, tomaré 10 direcciones del conjunto de datos de mi proyecto.

En la ciudad de donde provienen estas direcciones los formatos pueden variar mucho, las calles y carreras pueden referenciarse por su número o por su nombre, así por ejemplo la dirección de la posición 4 podría escribirse como “Murillo con 19” y estaría bien.

Además, las abreviaturas pueden variar también, como puede verse, es posible usar CALLE, CLLE o CL. Lo mismo ocurre con las carreras, esto puede causar que el API identifique mal la dirección o no la encuentre. Teniendo en cuenta esto, la transformación de los datos la hice utilizando el método apply de Pandas al cual se le pasa una funcion que retorna la latitud y longitud en forma de lista en caso de ser exitosa la identificación y NaN en el caso contrario.

Añadiendo el nombre de la ciudad y el país a la cadena también ayuda a la identificación de la dirección.

Para las 10 direcciones de ejemplo todas pudieron ser identificadas con éxito, si se aplica la función anterior a un gran conjunto de datos, se debe revisar los registros que queden con valores NaN. En mi caso para un total de casi 25,000 datos hubo cerca de 160 direcciones que no pudieron identificarse (0.64% del total). Además, es buena idea graficar todos los puntos con Basemap o Tableau.

Como una sugerencia final, el tiempo de respuesta de datos en mi caso era de casi 5 peticiones por segundo, con un volumen grande de datos procesar todas las direcciones puede llevar tiempo. La solución que encontré fue utlizar Kaggle, creando mi dataset y kernel privado que me devolviera el data frame en forma de archivo CSV una vez se haya hecho commit al kernel, de esta forma pude seguir trabajando en las otras partes del proyecto mientras las direcciones se convertían en los servidores de Kaggle.

Conclusiones

La herramienta Geocoding API de Google permite convertir direcciones de distinto formato y obtener información de ellas, puede utilizarse para estandarizar los formatos, obtener códigos postales, o coordenadas latitud y longitud. Su implementación en Python es sencilla e intuitiva y puede aplicarse de manera personalizada a los data frame de Pandas. Las primeras 40,000 direcciones del mes serán tratadas gratuitamente y de ahí en adelante tendrán un costo de $0.005 USD por cada una.

--

--

Daniel Martinez Bielostotzky
Ciencia y Datos

Certified Tableau Desktop Specialist, lead Tableau consultant at Bera Group SAS (Bogota, Colombia) in love with data science, machine learning and Python