¡Hola a todos! Como buen entusiasta de los datos y, sobre todo, del impacto visual que estos pueden tener, hoy me sumerjo en el fascinante mundo de la geoinformación. Si alguna vez te has preguntado cómo se crean esos mapas interactivos y analíticos que ves en reportes y dashboards, ¡estás en el lugar correcto! En este artículo, te guiaré a través del proceso de manipular y visualizar datos geoespaciales utilizando dos de mis librerías favoritas en Python: GeoPandas y Folium. Mi objetivo es que, al finalizar, seas capaz de transformar datos crudos en historias visuales impactantes.
Introducción y Configuración
Antes de sumergirnos en el análisis y la visualización, necesitamos asegurarnos de que nuestro entorno de trabajo esté configurado correctamente. Si aún no las tienes, la instalación de GeoPandas, Folium y Matplotlib es bastante sencilla y puedes hacerlo a través de pip.
Instalación de Librerías
pip install geopandas folium matplotlib
Carga de Datos Geoespaciales
Para nuestros ejemplos, utilizaremos datasets geoespaciales de fácil acceso proporcionados directamente por GeoPandas. Esto nos permite trabajar con datos reales sin la necesidad de descargas manuales complejas. Cargaremos dos datasets: `naturalearth_lowres` que contiene información de países, y `naturalearth_cities` con datos de ciudades.
import geopandas
import matplotlib.pyplot as plt
import folium
# Cargar datasets de GeoPandas
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
cities = geopandas.read_file(geopandas.datasets.get_path('naturalearth_cities'))
print("Primeras 5 filas del GeoDataFrame 'world':")
print(world.head())
print("
Primeras 5 filas del GeoDataFrame 'cities':")
print(cities.head())
La salida de este código nos mostrará las primeras filas de nuestros GeoDataFrames, confirmando que los datos se han cargado correctamente. Verás columnas como ‘pop_est’ (estimación de población) y ‘geometry’, que es donde reside la magia de los datos geoespaciales.
Análisis y Visualización Estática con GeoPandas
GeoPandas extiende las funcionalidades de Pandas para facilitar el trabajo con datos espaciales. Aquí te mostraré cómo realizar manipulaciones básicas y crear mapas estáticos informativos.
Manipulación Básica de GeoDataFrames
Podemos filtrar datos, seleccionar columnas y cambiar el Sistema de Coordenadas de Referencia (CRS) de manera similar a como lo haríamos con un DataFrame de Pandas, pero con el beneficio adicional de la información geográfica.
# Filtrar países por continente (ej. Sudamérica)
south_america = world[world['continent'] == 'South America']
print("
Países de Sudamérica:")
print(south_america[['name', 'pop_est', 'gdp_md_est']].head())
# Seleccionar columnas específicas y cambiar el CRS
# El CRS 'EPSG:4326' es WGS 84, común para latitud y longitud.
world_wgs84 = world[['name', 'pop_est', 'geometry']].to_crs("EPSG:4326")
print("
GeoDataFrame 'world' con CRS cambiado a EPSG:4326:")
print(world_wgs84.head())
Visualización de Mapas Estáticos
Crear mapas estáticos es sorprendentemente sencillo con GeoPandas y Matplotlib. Podemos generar mapas coropléticos que colorean regiones según un valor numérico, o superponer diferentes capas de datos.
# Mapa coroplético de población mundial
fig, ax = plt.subplots(1, 1, figsize=(10, 8))
world.plot(column='pop_est', cmap='viridis', linewidth=0.8, ax=ax, edgecolor='0.8', legend=True)
ax.set_title('Población Mundial por País')
ax.set_axis_off()
plt.show() # Para visualizar el mapa si estás en un entorno interactivo
# Se recomienda guardar esta figura como imagen para el artículo, por ejemplo:
# plt.savefig('poblacion_mundial.png', dpi=300)

Este mapa nos permite visualizar rápidamente la distribución de la población global. Ahora, superpongamos las ciudades sobre los países.
# Superposición de capas: Países y Ciudades
fig, ax = plt.subplots(1, 1, figsize=(12, 10))
world.plot(ax=ax, color='lightgrey', edgecolor='black')
cities.plot(ax=ax, marker='o', color='red', markersize=5, label='Ciudades')
ax.set_title('Países y Ciudades del Mundo')
ax.set_axis_off()
plt.legend()
plt.show()
# plt.savefig('paises_y_ciudades.png', dpi=300)

Visualización Interactiva con Folium
Si bien los mapas estáticos son útiles, los mapas interactivos con Folium llevan nuestra visualización al siguiente nivel, permitiendo a los usuarios explorar los datos por sí mismos.
Creación de Mapas Interactivos desde Cero
Folium construye sobre la librería JavaScript Leaflet.js, lo que nos permite crear mapas interactivos fácilmente en Python.
# Crear un mapa básico centrado en una ubicación (ej. Buenos Aires, Argentina)
m = folium.Map(location=[-34.6037, -58.3816], zoom_start=4) # Latitud, Longitud
# Puedes añadir marcadores, círculos, etc.
folium.Marker([-34.6037, -58.3816], popup='Buenos Aires').add_to(m)
# m.save('mapa_basico.html') # Para guardar el mapa como un archivo HTML
# Si estás en un entorno Jupyter/Colab, el mapa se mostrará directamente.
print(m._repr_html_()) # Para mostrar el HTML del mapa en entornos no interactivos (ej. para embedding)
Aquí se visualizaría el mapa interactivo de Folium.
Integración de GeoDataFrames con Folium
La verdadera potencia de Folium para datos geoespaciales se revela cuando integramos nuestros GeoDataFrames. Necesitamos convertir el GeoDataFrame a formato GeoJSON, que Folium entiende perfectamente.
# Crear un mapa centrado en el promedio de las coordenadas de los países
map_center = [world['geometry'].centroid.y.mean(), world['geometry'].centroid.x.mean()]
m_countries = folium.Map(location=map_center, zoom_start=2)
# Añadir los países como una capa GeoJSON
folium.GeoJson(
world,
name='Países del Mundo',
tooltip=folium.GeoJsonTooltip(fields=['name', 'pop_est'], aliases=['País:', 'Población:'])
).add_to(m_countries)
# Añadir las ciudades como marcadores con pop-ups
for idx, row in cities.iterrows():
folium.Marker(
location=[row.geometry.y, row.geometry.x],
popup=f"Ciudad: {row['name']}
País: {row['country']}
Población: {row['pop']}"
).add_to(m_countries)
folium.LayerControl().add_to(m_countries)
# m_countries.save('mapa_interactivo_geopandas.html')
print(m_countries._repr_html_()) # Para mostrar el HTML del mapa
Aquí se visualizaría el mapa interactivo de Folium con capas de países y ciudades.
Con este código, hemos creado un mapa interactivo donde puedes hacer clic en los países para ver su nombre y población, y en las ciudades para obtener más detalles. ¡Es la combinación perfecta de análisis y experiencia de usuario!
Conclusión y Pasos Siguientes
¡Hemos llegado al final de nuestro viaje por el mundo de los datos geoespaciales con Python! A lo largo de este artículo, hemos explorado cómo utilizar GeoPandas para manipular y visualizar datos geográficos de forma estática, y cómo Folium nos permite llevar esas visualizaciones a un nivel interactivo y dinámico.
Hemos cubierto desde la configuración inicial de nuestro entorno, pasando por la carga de datasets, hasta la creación de mapas coropléticos y la superposición de capas. La habilidad de integrar GeoDataFrames con Folium abre un sinfín de posibilidades para presentar información geográfica de una manera atractiva y comprensible. Ahora eres capaz de:
- Cargar y entender datasets geoespaciales.
- Realizar operaciones básicas de manipulación con GeoPandas.
- Crear visualizaciones estáticas con Matplotlib.
- Desarrollar mapas interactivos con Folium, integrando tus propios datos.
Pero esto es solo el comienzo. Te animo a que explores más allá, por ejemplo:
- Análisis Espacial Avanzado: Investiga funciones como uniones espaciales (spatial joins), cálculo de distancias, o la creación de buffers con GeoPandas.
- Otras Librerías de Visualización: Experimenta con librerías como Plotly o Bokeh, que también ofrecen capacidades interactivas y pueden ser útiles para visualizaciones más complejas.
- Fuentes de Datos: Busca y trabaja con otros datasets geoespaciales públicos, como los de OpenStreetMap, o datos de sensores remotos.
La geoinformación es un campo en constante crecimiento, con aplicaciones en urbanismo, medio ambiente, logística, epidemiología y mucho más. Dominar estas herramientas te dará una ventaja significativa en el análisis de datos.
¡Recuerda que siempre siempre vas a aprender un bit a la vez!
🤖 Automatiza tu trading en 5 días con Python
Únete a mi Mini-Curso gratuito por email. Aprende a extraer datos reales, crear indicadores cuantitativos y hacer backtesting profesional.