Datos#

Objetivos de aprendizaje#

Al finalizar este notebook, el estudiante será capaz de:

  • Describir el área de estudio: cuencas hidrográficas de los Andes colombianos.

  • Identificar la variable respuesta (inventario de deslizamientos) y las variables predictoras del caso de estudio.

  • Cargar un GeoDataFrame desde una URL remota con geopandas y requests.

  • Realizar una exploración estadística inicial del dataset (dimensiones, tipos de variables, estadísticas descriptivas).

Requisitos previos: 00_Ambiente — entorno de trabajo configurado; nociones básicas de Python y pandas.

En los notebooks se presentan ejemplos para cada una de las herramientas presentadas. Muchos de estos ejemplos son obtenidos de las diferentes fuentes utilizadas en este libro, como del libro de los profesores Sergio Rey (Universidad del Estado de San Diego), Dani Arribas-Bel (Universidad de Liverpool) y Levi Wolf (Universidad de Bristol) denominado Geographic data science with Python. Adicionalmente se presenta un caso local de los Andes Colombianos en torno a la ocurrencia de movimientos en masa utilizando como unidad de análisis subcuencas.

El área de estudio se encuentra al norte de 5°N y abarca las Cordilleras Occidental y Central de los Andes colombianos, separadas por el cañón del Cauca. La región está delimitada por el río Atrato al oeste y el río Magdalena al este. Cubriendo aproximadamente 50,000 \(km^2\), el área está dividida en 533 subcuencas dentro de las cuencas hidrográficas del Atrato (25% de las cuencas), Cauca (50%) y Magdalena (25%). Aproximadamente el 73% de estas cuencas tienen áreas menores de 100 \(km^2\), con un área media de 48 \(km^2\).

Se cuenta con un catálogo de 13,777 deslizamientos superficiales y profundos que ocurrieron entre 1970 y 2023, detectados visualmente utilizando imágenes ópticas de alta resolución (\(<\)1 m) en color real de Google Earth™ y Planet Scope con resolucion espacial de 3-4 m.

Como variables predictoras para el área de estudio se eentran área bajo la curva hipsométrica de la subcuenca, elevación media, pendiente media, relieve local medio, precipitación media anual, número de días con precipitación diaria acumulada \(>20\) mm, cobertura del suelo y geología predominante.

Los parámetros del terreno se calcularon utilizando el modelo digital de elevación (DEM) del radar de apertura sintética en banda L del satélite de observación terrestre Aaanzada (ALOS-PALSAR), con una resolución de píxel de 12.5 m (Logan 2014).

Las métricas de precipitación se derivaron utilizando los datos de CHIRPS (Climate Hazard Group InfraRed Precipitation with Station Data) (Funk 2015), versión 2.0, para datos de precipitación con una resolución de 5 km desde 1981 hasta 2023. Para este cálculo se utilizó la plataforma Google Earth Engine (GEE) con lenguaje Javascript.

Se generó un mapa de cobertura del suelo utilizando datos del programa Copernicus Sentinel-2, con una resolución de 10 m. Utilizando GEE, seleccionamos imágenes desde 2018 hasta 2023 con menos del 10% de cobertura de nubes, eliminando efectos de sombra. El mapa se creó calculando el índice de vegetación de diferencia normalizada (NDVI) (Kriegler 1969), el índice de diferencia normalizada de construcciones (NDBI) (Zha et al. 2003), el índice de diferencia normalizada de agua modificado (MNDWI) (Xu 2006) y el índice de suelo desnudo (BSI) (Li 2014). La clasificación de cobertura del suelo se realizó con un algoritmo de bosque aleatorio (random forest) del paquete Classifier de GEE (Breiman 2001).

Los datos pueden ser obtenidos del repositorio de Github edieraristizabal/ModeloMultinivel

A continuación se presenta la forma de descargar los datos y su visualización.

import warnings
warnings.filterwarnings('ignore')

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import geopandas as gpd

Una forma directa es con geopandas, ya que es un archivo espacial tipo gpkg:

gdf = gpd.read_file("https://github.com/edieraristizabal/ModeloMultinivel/raw/refs/heads/main/DATA/df_catchments_spatial.gpkg")
gdf.info()

Tambien es posible, primero descargando el archivo y luego leerlo en Python:

import requests
from io import BytesIO

url = "https://github.com/edieraristizabal/ModeloMultinivel/raw/refs/heads/main/DATA/df_catchments_spatial.gpkg"

try:
    response = requests.get(url, stream=True)
    response.raise_for_status()  # Lanza una excepción para errores HTTP

    # Lee el contenido descargado como un archivo en memoria
    with BytesIO(response.content) as f:
        gdf = gpd.read_file(f)

    gdf.info()

except requests.exceptions.RequestException as e:
    print(f"Error al descargar el archivo: {e}")
except Exception as e:
    print(f"Error al leer el archivo GPKG: {e}")
<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 526 entries, 0 to 525
Data columns (total 20 columns):
 #   Column               Non-Null Count  Dtype   
---  ------               --------------  -----   
 0   id                   526 non-null    int64   
 1   Nombre               526 non-null    object  
 2   ID_CUENCA            526 non-null    float64 
 3   cuenca               526 non-null    object  
 4   area                 526 non-null    int64   
 5   elev_mean            526 non-null    float64 
 6   elev_median          526 non-null    float64 
 7   rel_mean             526 non-null    float64 
 8   rel_median           526 non-null    float64 
 9   rainfallAnnual_mean  526 non-null    float64 
 10  Densidad             526 non-null    float64 
 11  hypso_inte           526 non-null    float64 
 12  slope_mean           526 non-null    float64 
 13  kmeans               526 non-null    object  
 14  RainfallDaysmean     526 non-null    float64 
 15  RainfallDaysmedian   526 non-null    float64 
 16  landcovermedian      526 non-null    object  
 17  geomedian            526 non-null    object  
 18  lands_rec            526 non-null    float64 
 19  geometry             526 non-null    geometry
dtypes: float64(12), geometry(1), int64(2), object(5)
memory usage: 82.3+ KB
gdf.head()
id Nombre ID_CUENCA cuenca area elev_mean elev_median rel_mean rel_median rainfallAnnual_mean Densidad hypso_inte slope_mean kmeans RainfallDaysmean RainfallDaysmedian landcovermedian geomedian lands_rec geometry
0 1 Quebrada Guaco 606.0 Cauca 18443928 1615.334363 1607.0 510.665139 505.0 2264.807895 18.230950 0.493 29.278027 C 1112.245024 1066.0 grass sediment 4.0 POLYGON ((454732.740 622820.251, 454684.825 62...
1 2 Quebrada Cabaña 601.0 Cauca 15797104 1485.514279 1443.0 587.551540 590.0 2453.187233 15.837190 0.515 27.276356 C 1381.331112 1416.0 grass volcanic 6.0 POLYGON ((445998.990 633523.601, 445938.990 63...
2 3 Quebrada Circia 268.0 Cauca 41264565 1751.017810 1771.0 479.273145 482.0 2446.462791 17.364213 0.534 27.046340 C 1335.000000 1335.0 grass granitic 6.0 POLYGON ((449407.484 638933.816, 449416.943 63...
3 4 Quebrada Las Yeguas 257.0 Cauca 86871930 2259.304383 2235.0 290.758334 250.0 2415.640307 12.902091 0.636 19.844786 D 1342.000000 1302.5 grass granitic 8.0 POLYGON ((449127.882 648864.822, 449150.880 64...
4 5 Quebrada Daza 255.0 Cauca 28178836 1671.334481 1660.0 488.840365 499.0 2361.272164 22.018253 0.500 28.240738 C 1186.297521 1268.5 grass granitic 6.0 POLYGON ((445769.984 646158.816, 445776.576 64...
f, ax = plt.subplots(1, figsize=(10, 10))
gdf.plot(column='area', legend=True, ax=ax)
plt.show()
_images/8ffdbeb8c7027dc5e31e7e97c204785d5354abccc7b559a4dd4a0f45f31b99d4.png

A continuación se presenta la distribución de la variable \(Y\), en términos de frecuencia y densidad, asi como su transformación logarítmica.

Estas subcuencas pueden ser agregadas por cuencas hidrográficas de la siguiente manera:

Actividades#

  1. Exploración inicial: Carga el dataset de cuencas y responde: ¿Cuántas subcuencas tiene cada cuenca principal (Atrato, Cauca, Magdalena)? ¿Cuál es la media y la desviación estándar del número de deslizamientos (lands_rec) por cuenca?

  2. Visualización descriptiva: Genera un mapa coropléto simple del número de deslizamientos por subcuenca usando geopandas. Identifica visualmente las 5 subcuencas con mayor densidad de deslizamientos.

  3. Estadísticas por cuenca: Calcula la correlación de Pearson entre cada variable predictora (elev_mean, slope_mean, RainfallDaysmean) y el número de deslizamientos (lands_rec). ¿Qué variable tiene la correlación más alta? ¿Es la dirección de la correlación la esperada geomorfológicamente?

  4. Distribución de la variable respuesta: Grafica el histograma de lands_rec. ¿Qué distribución de probabilidad parece ajustarse mejor a estos datos: Normal, Poisson o Binomial Negativa? Justifica tu respuesta observando la forma del histograma y la relación entre media y varianza.

Recursos adicionales#

Documentación oficial#

Lecturas recomendadas#

  • Aristizábal, E. et al. (2023). Susceptibilidad a movimientos en masa en cuencas hidrográficas de los Andes colombianos. Boletín de Ciencias de la Tierra.

  • Guzzetti, F. et al. (2012). Landslide inventory maps: New tools for an old problem. Earth-Science Reviews, 112(1–2), 42–66.

Fuentes de datos geoespaciales abiertos#