que es la geocodificacion
Mapa con silueta multicolor.

¿Qué Es La Geocodificación?

La geocodificación es fundamental en el análisis de datos geoespaciales, aplicándose en campos como el marketing y la planificación urbana. Este proceso, que transforma direcciones y nombres de lugares en coordenadas geográficas, facilita la creación de mapas y el análisis espacial. A continuación, exploramos en profundidad su importancia, aplicaciones y herramientas relacionadas con la ciencia de datos.

Explicación

La geocodificación consiste en transformar direcciones, nombres de lugares y otra información de ubicación en coordenadas geográficas (latitud y longitud) para fines de mapeo y análisis. Este proceso permite combinar datos geográficos con otros conjuntos de datos, facilitando el análisis y la visualización de patrones y relaciones entre ellos. La geolocalización o geocódigo es la computación que convierte la dirección en una ubicación identificable de la Tierra mediante coordenadas, siendo esencial para asignar recursos cercanos, calcular distancias de rutas y utilizar la localización para diversos fines.

Un ejemplo sencillo de geocodificación directa sería convertir la dirección “Calle de Tramontana 1, 28223, Madrid” en sus correspondientes coordenadas: latitud 40.406135, longitud 3.793264. Esta transformación es crucial porque permite que los datos de dirección, que son comprensibles para humanos, sean interpretables por sistemas informáticos para análisis espacial.

Tipos De Geocodificación

Existen diversos tipos de geocodificación, cada uno con sus propias ventajas y limitaciones según el contexto de aplicación:

  1. Basada en direcciones: convierte direcciones de calles, como “Calle Pio IX, Valencia, ES” en coordenadas geográficas. Resulta particularmente útil para analizar patrones de delincuencia y fenómenos a pie de calle.
  2. Basada en nombres de lugares: convierte nombres de lugares, como “Plaza del Sol, Madrid” en coordenadas geográficas. Esta modalidad es conveniente para mapear lugares históricos y fenómenos en zonas específicas.
  3. Inversa: realiza el proceso contrario, convirtiendo coordenadas geográficas en la dirección correspondiente. Resulta eficaz para analizar datos provenientes de sistemas antiguos o dispositivos GPS.
  4. Por lotes: permite convertir múltiples direcciones o nombres de lugares en coordenadas geográficas simultáneamente, siendo especialmente útil cuando se trabaja con grandes conjuntos de datos cuyas coordenadas abarcan un área extensa.

Geocodificación En Servicios

El uso de la geocodificación es básico en los servicios que funcionan mediante la ubicación del usuario, principalmente aplicaciones móviles. Su utilidad se extiende a diversas funciones como llegar a ubicaciones específicas, detectar radares o congestiones de tráfico en tiempo real, u obtener información sobre lugares de interés cercanos.

1. Software De Geocodificación y SIG

El software de Sistemas de Información Geográfica (SIG) como ArcGIS o QGIS hace uso intensivo de la geocodificación para crear mapas y realizar análisis espaciales. Estos análisis espaciales incorporan técnicas estadísticas y algoritmos que combinan datos de ubicación con otras variables para identificar patrones geográficos significativos. Esta capacidad resulta útil para numerosas aplicaciones, entre ellas el planeamiento urbanístico, la gestión de recursos naturales y la respuesta a emergencias de cualquier tipo.

1.1 Plugin Geocoder CartoCiudad para QGIS

Una herramienta notable es el plugin Geocoder CartoCiudad para QGIS, que ofrece acceso directo a una base de datos de alto valor con direcciones de toda España. Este complemento permite a los usuarios transformar rápidamente direcciones en coordenadas geográficas y viceversa, obteniendo objetos geográficos de referencia como entidades de población, unidades administrativas y topónimos.

Este plugin permite localizar y descargar varios tipos de objetos geográficos de España por identificadores geográficos o coordenadas, incluyendo:

  • Direcciones postales
  • Topónimos
  • Puntos de Interés
  • Unidades administrativas
  • Poblaciones
  • Códigos postales
  • Referencias catastrales (mediante Servicios SOAP de la Dirección General de Catastro)

La información que proporciona puede ser puntual (portales, puntos kilométricos, códigos postales, puntos de interés, topónimos y referencias catastrales), lineal (viales) o superficial (unidades administrativas y entidades de población).

3. Calidad De Los Servicios De Geocodificación

La precisión de los resultados obtenidos durante la geocodificación depende de varios factores, como la cantidad y calidad de los datos, el algoritmo utilizado y el servicio de geocodificación seleccionado. No todos los servicios ofrecen el mismo nivel de calidad y precisión; un buen servicio de geocodificación proporciona datos de alta calidad y utiliza algoritmos eficaces para garantizar resultados precisos.

Entre las opciones populares para geocodificación se encuentran Google Maps, Bing Maps, OpenStreetMap y MapQuest. Al comparar estos servicios, deben considerarse factores como la facilidad de uso, rapidez en proporcionar resultados, cobertura global y precisión en localizaciones rurales o áreas con direcciones más complejas.

4. Optimización del Rendimiento en Geocodificación

Para mejorar el rendimiento de los procesos de geocodificación, pueden aplicarse varias estrategias:

  1. Ajuste del número de subprocesos: la geocodificación puede utilizar todos los núcleos disponibles del equipo para completar trabajos más rápidamente. Se recomienda determinar el número de núcleos que se pueden dedicar a esta tarea.
  2. Configuración del número máximo de candidatos: si la geocodificación tarda demasiado pero ofrece coincidencias de alta calidad, verificar que la propiedad “Candidatos máximos” no tenga un valor excesivamente alto puede mejorar el rendimiento.
  3. Ajuste del número de candidatos sugeridos: esta configuración permite aumentar o reducir el número de sugerencias que se muestran por defecto en los clientes de servicios geográficos.

Geocodificación y Data Science

La geocodificación se integra ampliamente en la ciencia de datos, con aplicaciones diversas y significativas. Su uso se extiende a campos como la epidemiología, donde puede ayudar a rastrear y predecir la propagación de enfermedades, y la logística, donde optimiza las rutas de entrega.

En el ámbito del marketing, la geocodificación permite a las empresas orientar su publicidad basándose en las ubicaciones de sus clientes y en análisis de datos geográficos. Este tipo de análisis proporciona información detallada sobre tendencias de consumo, áreas de alta demanda y patrones de comportamiento, ayudando a las empresas a diseñar estrategias de marketing más efectivas y personalizadas.

Ejemplo De Geocodificación Con Python

A continuación se presenta un ejemplo práctico de geocodificación utilizando Python, SPARQL y Folium, para obtener un mapa con la ubicación de futbolistas registrados en Wikidata:

I) Instalación de dependencias

# En caso de no usar notebooks, eliminar '!'
!pip install -q rdflib
!pip install -q rdflib-jsonld
!pip install -q sparqlwrapper

II) Inclusión de librerías y funciones necesarias

# Importamos las librerías necesarias para trabajar con SPARQL y procesar los datos

import io
import urllib.request
import rdflib
import rdflib_jsonld
from rdflib import Graph, plugin
from SPARQLWrapper import SPARQLWrapper, JSON, XML, N3, RDF , POST, GET, POSTDIRECTLY, CSV
import warnings
warnings.filterwarnings ("ignore")

# Importamos las librerías necesarias para visualizar los datos en un mapa

from IPython.display import HTML
import matplotlib.pyplot as plt
import math
import json 
import requests
import pandas as pd
import numpy as np
import unittest
from datetime import datetime

# Función para crear el cliente SPARQL

def create_sparql_client ( endpoint , result_format=JSON , query_method=POST , token=None ):
    ''' Crea un cliente SPARQL '''
    sparql = SPARQLWrapper(endpoint) 
    if token:
        sparql.addCustomHttpHeader ("Authorization","Bearer {}".format(token))
    sparql.setMethod ( query_method )
    sparql.setReturnFormat ( result_format )
    if query_method == POST:
        sparql.setRequestMethod(POSTDIRECTLY)
    return sparql

# Función para ejecutar la consulta SPARQL

def query_sparql ( sparql , prefix, query ):
    ''' Ejecuta una consulta SPARQL '''
    sparql.setQuery ( prefix + query  )  
    results = sparql.query()               
    if sparql.returnFormat == JSON:
        return results._convertJSON()
    return results.convert()

# Función para mostrar los resultados de la consulta SPARQL

def print_results ( results, limit =''):
    ''' Imprime los resultados de una consulta SPARQL '''
    resdata = results["results"]["bindings"]
    if limit != '':
        resdata = results["results"]["bindings"][:limit]
    for result in resdata:
        for ans in result:
            print('{0}: {1}'.format(ans, result[ans]['value']))
        print()

# Función para convertir los resultados de la consulta SPARQL en un dataframe:

def json2dataframe (results):
    ''' Genera un dataframe con los resultados de una consulta SPARQL. 
    Cada una de las filas es un resultado y en columnas cada uno de los atributos'''
    data = []
    for result in results['results']['bindings']:
        row = {}
        for var in results['head']['vars']:
            row[var] = result[var]['value']
        data.append(row)
    df = pd.DataFrame(data)
    return df

# Función para ejecutar la consulta y generar el dataframe

def dataframe_results(sparql, prefix, query ):
    ''' Ejecuta consulta y genera el dataframe '''
    sparql.setQuery(prefix + query)
    results = sparql.query().convert()
    df = json2dataframe(results)
    return df

III) Ejecución de la consulta y creación del mapa con datos geográficos

# Creamos la consulta SPARQL para obtener los datos de los futbolistas

q = '''
SELECT DISTINCT ?person ?personLabel (COALESCE(?image, "") as ?image) ?lat ?lon

WHERE {
  ?person wdt:P106 wd:Q937857 .
  ?person rdfs:label ?personLabel . 
  ?person  wdt:P166 ?work .
  ?work rdfs:label ?workLabel .      

  OPTIONAL {?person wdt:P18 ?image} 

  OPTIONAL {?person wdt:P19 ?country .  
            ?country rdfs:label ?countryLabel .
            ?country wdt:P625 ?coords .
            ?country p:P625/psv:P625 ?node.
            ?node wikibase:geoLatitude ?lat.
            ?node wikibase:geoLongitude ?lon.
           }
  
  FILTER ( LANG ( ?personLabel ) = "en" )   
  FILTER ( LANG ( ?workLabel ) = "en" ) 
  FILTER ( LANGMATCHES ( LANG ( ?countryLabel ), "en" ) ) 
  
}
GROUP BY ?person ?personLabel ?image ?lat ?lon
'''

# Creamos el cliente SPARQL con el endpoint

wikidata_endpoint = "https://query.wikidata.org/sparql"
wd_sparql = SPARQLWrapper(wikidata_endpoint)
wd_sparql.setQuery(q)
wd_sparql.setReturnFormat(JSON)
results = wd_sparql.query().convert()
df_wiki = pd.json_normalize(results['results']['bindings'])

df_wiki = dataframe_results (wd_sparql, '', q)
df_wiki.drop_duplicates(inplace = True)

import folium

world_map = folium.Map(prefer_canvas=True)

# Recorremos el dataframe, agregando -en forma de círculo- las coordenadas de donde proceden los deportistas

for p in range ( df_wiki.shape[0]):
  lat = df_wiki.iloc[p]['lat']
  lon =  df_wiki.iloc[p]['lon'] 
  name = df_wiki.iloc[p]['personLabel'] 
  folium.CircleMarker ( [lat , lon ], 
                       radius=1.5, 
                       line_color='#3186cc',
                       fill_color='#3186cc', 
                       fill=True,
                       tooltip = name
                       ).add_to(world_map)

# Obtenemos el mapa

world_map

-------------------------------------------------------------

mapa con la procedencia de los futbolistas presentes en wikidata

Ejecutando este código se obtiene un mapa interactivo que muestra la ubicación de los futbolistas, habiendo completado un ejemplo de geocodificación al obtener los datos geográficos de latitud y longitud desde Wikidata mediante una consulta SPARQL, para luego visualizarlos en un mapa.

Combinación de Datos vs. Geocodificación Personalizada

Cuando se trabaja con ubicaciones geográficas que no se geocodifican automáticamente, existen dos enfoques principales: la combinación de datos y la geocodificación personalizada. La siguiente tabla muestra una comparación entre ambos métodos:

CapacidadCombinación de datosGeocodificación personalizada
Trazar ubicaciones propias en mapa
Usar cualquier tipo de datosNo, solo archivos de texto
Agregar funciones geográficas nuevasNo
Agregar a una función geográfica existenteNo
Crear jerarquías geográficas nuevasNo
Reutilizable para otros libros de trabajoNo

La combinación de datos es la forma más sencilla de trazar información en un mapa y resulta ideal para agregar un único nivel de información geográfica con latitud y longitud. Puede utilizarse con cualquier fuente de datos, mientras que la geocodificación personalizada está limitada a archivos de texto.

Mejores Prácticas en Geocodificación

Para maximizar la precisión de los procesos de geocodificación, es recomendable seguir estas prácticas:

  1. Utilizar servicios de autocompletado: el uso de soluciones de búsqueda de direcciones como Google Autocomplete garantiza que el formato de las direcciones sea válido y reconocido consistentemente.
  2. Validar direcciones antes de procesarlas: verificar que las direcciones pueden ser geocodificadas con un nivel apropiado de precisión y que están dentro del área de cobertura del servicio utilizado.
  3. Incluir detalles específicos en campos separados: los detalles como número de apartamento deben incluirse en campos de comentarios en lugar del campo principal de dirección, ya que pueden complicar el proceso de geocodificación.
  4. Formatear adecuadamente las tablas de direcciones: eliminar espacios o caracteres especiales en los nombres de campo de las tablas de direcciones y asegurar que no haya campos duplicados antes de ejecutar herramientas de geocodificación.
  5. Guardar las tablas en formatos compatibles: para algunas herramientas como ArcGIS, es recomendable guardar las tablas de direcciones como archivos CSV para facilitar su procesamiento.

Posibles Problemas

A pesar de su utilidad, la geocodificación presenta varios desafíos importantes:

  1. Datos faltantes: aunque la geocodificación se base en datos precisos y complejos, pueden existir direcciones faltantes o incompletas que complican el proceso de ubicación. Esto suele ser consecuencia de áreas geográficas menos desarrolladas o menos mapeadas, nuevas construcciones o cambios recientes en la infraestructura de una zona.
  2. Datos inconsistentes: al utilizar datos de múltiples fuentes, pueden surgir diferencias en la nomenclatura u orden al escribir nombres de calles, lo que incrementa la dificultad del mapeo. Por ejemplo, una fuente puede listar una dirección como “Calle 50 #10-34”, mientras que otra puede referirse a la misma ubicación como “50 Calle, 10-34”.
  3. Datos obsoletos: algunos datos pueden basarse en lugares con nombres cambiados, mapas antiguos o imágenes satelitales desactualizadas y poco exactas, lo que hace confusa y poco precisa la geocodificación.
  4. Errores de procesamiento: durante el proceso de geocodificación pueden surgir diversos errores técnicos, como problemas con el localizador de direcciones, limitaciones de tamaño de archivo en formatos como shapefile, incompatibilidades con campos GUID o GlobalID, o falta de permisos adecuados en servicios como ArcGIS World Geocoding Service.

Conclusión

La geocodificación constituye un proceso fundamental dentro de la ciencia de datos que permite vincular la información de ubicación geográfica con otros conjuntos de datos para su posterior análisis y visualización, facilitando la identificación de patrones y el establecimiento de relaciones espaciales significativas. Su aplicación abarca numerosos campos como el marketing geoespacial, la planificación urbana, la epidemiología y la logística, convirtiéndola en una herramienta versátil y valiosa para la toma de decisiones basadas en datos.