La geocodificación consiste en el procesamiento de direcciones, nombres de lugares y otra información de ubicación en coordenadas geográficas (en valores de latitud y longitud), con fines de mapeo y análisis. Este proceso permite la integración de datos geográficos con otros conjuntos de datos, haciendo posible analizar y visualizar los patrones y relaciones que presentan entre ellos.
Tipos de Geocodificación
Hay varios tipos de geocodificación, cada uno con su propio conjunto ventajas y limitaciones:
Basada en direcciones: convierte direcciones de calles, como “Calle Pio IX, Valencia, ES” en coordenadas geográficas. Útil para analiizar patrones de delincuencia y fenómenos a pie de calle.
Basada en nombres de lugares: convierte los nombres de lugares: convierte los nombres de lugares, como “Plaza del Sol, Madrid” en coordenadas geográficas. Conveniente para mapear lugares históricos y fenómenos en zonas específicas.
Inversa: convierte las coordenadas en la correspondiente dirección. Eficaz a la hora de analizar datos de sistemas antiguos.
Por lotes: convierte multiples direcciones o nombres de lugares en las coordenadas pertinentes, usado con grandes conjuntos de datos cuyas coordenadas comprendan un área extensa.
Geocodificación en servicios
El uso de la geocodificación es crucial en los servicios que funcionan mediante la ubicación del usuario (aplicaciones móviles, mayoritariamente). Pudiendo utilizarse para -por ejemplo- llegar a una ubicación específica, detectar radares o congestiones de tráfico a tiempo real u obtener información sobre lugares de interés cercanos:
Software de Geocodificación y SIG
El software GIS (ArcGIS, QGIS…) hace uso de la geocodificación para crear mapas y realizar análisis espaciales, lo que resulta útil para una amplia gama de aplicaciones; incluyendo el planeamiento urbanístico, la gestión de recursos naturales y la respuesta a cualquier tipo de emergencias.
Calidad de los servicios de geocodificación
La precisión de los resultados obtenidos mediante la geocodificación depende significativamente de la cantidad de datos, el algoritmo utilizado y el servicio de geocodificación elegido (no todos son iguales, la calidad y precisión pueden variar significativamente). Un buen servicio de geocodificación es aquel que proporciona datos de alta calidad y emplea algoritmos avanzados.
Geocodificación y ciencia de datos
La geocodificación se integra perfectamente con la ciencia de datos al permitir la integración de datos de ubicación para obtener nuevas perspectivas sobre el conjunto de datos a tratar. Por ejemplo, geocodificación se puede utilizar en el campo de la logística y la planificación de rutas, para optimizar la entrega de productos y/o servicios. Determinando la mejor ruta para sus repartidores, basándose en la ubicación de los clientes y el tráfico en tiempo real.
Ejemplo de geocodificación con Python
Un ejemplo sencillo de geocodificación con Python, usando SPARQL & Folium, sería obtener un mapa con la ubicación de todos los futbolistas registrados en Wikidata:
# 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) Ejecutamos la consulta y creamos el mapa con los datos geográficos de cada futbolista:
# 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
-------------------------------------------------------------
Ejecutando el código se debería obtener una imagen como la de arriba, habiendo entonces completado un ejemplo de geocodificación – es decir, el acto de obtener los datos geográficos de latitud y longitud de los futbolistas sacados de Wikidata mediante una consulta SPARQL para posteriormente visualizarlos en un mapa.
Problemas de la geocodificación
A pesar de su utilidad, la geocodificación presenta problemas que siempre debemos recordar:
Datos faltantes: pese a que la geocodificación se base en datos precisos y complejos, puede darse el caso de que algunas direcciones falten o estén incompletas; complicando el proceso de ubicación.
Datos inconsistentes: si utilizamos datos de múltiples fuentes, puede que utilicen una nomenclatura u orden diferente a la hora de por ejemplo escribir el nombre de las calles, incrementando la dificultad del mapeo.
Datos obsoletos: algunos datos pueden estar basados en lugares con el nombre cambiado, mapas antiguos o imágenes satelitales antiguas y poco exactas, haciendo confusa -y poco precisa- la geocodificación.
Conclusión
La geocodificación es un proceso importante dentro de la ciencia de datos que permite vincular la información de ubicación geográfica con otros datos para su posterior mapeo y análisis. Permitiendo identificar patrones y establecer relaciones entre los datos. Además de ser importante en una gran variedad de áreas y servicios de los cuales todos hacemos uso; aún así, es importante tener en cuenta que la precisión de los resultados obtenidos depende en gran medida de la calidad de los datos de entrada, los algoritmos utilizados, y la calidad del servicio de geocodificación.
Comience a escribir para ver resultados o presione Escape para cerrar
Recibirás un boletín semanal con novedades destacadas.
Gestionar el consentimiento de las cookies
Utilizamos cookies para mejorar la experiencia de navegación y poder mostrar anuncios personalizados. El consentimiento de estas tecnologías permitirá a terceros procesar datos como el comportamiento de navegación o la ubicación geográfica. No consentir o ignorar este aviso no afectará de ninguna manera al funcionamiento de esta web.
Funcional
Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos.El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.