Un curso completo de 5 clases usando Google Earth Engine y Python

M.Sc. Edwin Calle Condori Por M.Sc. Edwin Calle Condori - Master en Geomatica

Introducción a la Exploración Minera con Teledetección

La exploración minera ha entrado en una nueva era con la integración de tecnologías de teledetección y machine learning. En este blog, te llevaré a través de un curso completo de 5 clases donde aprenderás a detectar zonas con potencial aurífero utilizando Google Earth Engine y algoritmos de aprendizaje automático.

Este enfoque revolucionario permite analizar vastas áreas de manera eficiente, reduciendo costos y tiempo en la exploración mineral.

Sobre el Expositor

M.Sc. Edwin Calle Condori es especialista en teledetección aplicada a la exploración RRNN con más de 8 años de experiencia en la industria. Cuenta con una Maestría en Ciencias Geomáticas, y ha liderado proyectos de exploración mineral en Bolivia utilizando técnicas avanzadas de machine learning y análisis de datos satelitales.

1 Fundamentos y Configuración del Entorno

En esta primera clase, configuramos el entorno de trabajo y aprendimos los fundamentos de la exploración minera con teledetección.

# Instalación de librerías !pip install earthengine-api geemap rasterio numpy pandas scikit-learn xgboost matplotlib localtileserver -q # Importación de bibliotecas import ee import geemap import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import roc_auc_score, confusion_matrix, ConfusionMatrixDisplay from xgboost import XGBClassifier import os import time import rasterio import shutil from google.colab import drive import warnings import math # Autenticación con Earth Engine ee.Authenticate() ee.Initialize(project='tu_proyecto')

Conceptos Clave

Teledetección, SIG, Python para análisis geoespacial, Google Earth Engine.

2 Adquisición de Datos Satelitales

En la segunda clase, aprendimos a adquirir y preprocesar datos satelitales de múltiples fuentes.

# Función para obtener composito de Sentinel-2 def get_s2_composite(aoi, start_date='2023-01-01', end_date='2023-12-31', cloud_thresh=20): s2 = (ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED') .filterBounds(aoi) .filterDate(start_date, end_date) .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', cloud_thresh))) # Máscara de nubes def mask_clouds(img): qa = img.select('QA60') cloud_mask = qa.bitwiseAnd(1 << 10).Or(qa.bitwiseAnd(1 << 11)) return img.updateMask(cloud_mask.Not()) s2_masked = s2.map(mask_clouds) return s2_masked.median().clip(aoi)

Conceptos Clave

Espectro electromagnético, corrección atmosférica, composiciones temporales, sensores ópticos y SAR.

3 Generación de Características e Índices

La tercera clase se centró en la creación de índices espectrales para detectar alteraciones hidrotermales.

# Función para calcular índices de alteración hidrotermal def calculate_hydrothermal_indices(img): # Índices de alteración hidrotermal iron_ox = img.expression( 'float(B6 / B2)', {'B6': img.select('B6'), 'B2': img.select('B2')} ).rename('Iron_Ox') clay = img.expression( 'float(B11 / B12)', {'B11': img.select('B11'), 'B12': img.select('B12')} ).rename('Clay_Ratio') ndvi = img.normalizedDifference(['B8', 'B4']).rename('NDVI') # Índice de alteración compuesto alteration_index = img.expression( 'float(Iron_Ox + Clay_Ratio)', {'Iron_Ox': iron_ox, 'Clay_Ratio': clay} ).rename('Alteration_Idx') return img.addBands([iron_ox, clay, ndvi, alteration_index])

Conceptos Clave

Firmas espectrales, alteración hidrotermal, mineralogía espectral, índices de vegetación.

4 Modelado Predictivo con Machine Learning

En la cuarta clase, implementamos algoritmos de machine learning para predecir potencial aurífero.

# Entrenar Random Forest rf_model = RandomForestClassifier(n_estimators=100, random_state=42, n_jobs=-1) rf_model.fit(X_train, y_train) # Entrenar XGBoost xgb_model = XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42) xgb_model.fit(X_train, y_train) # Evaluación de modelos def evaluate_model(model, X_test, y_test, name): y_pred = model.predict(X_test) y_prob = model.predict_proba(X_test)[:,1] auc = roc_auc_score(y_test, y_prob) print(f"{name} AUC: {auc:.4f}") return auc

Conceptos Clave

Aprendizaje supervisado, validación cruzada, importancia de variables, Random Forest, XGBoost.

5 Generación de Mapas de Probabilidad

La quinta y última clase se enfocó en la generación de mapas de probabilidad y la interpretación de resultados.

# Función para exportar características y predecir def predict_and_export(model, feature_image, region, output_name, scale=30): # Exportar características # Aplicar modelo a cada pixel # Guardar resultados return output_path # Crear mapa de consenso consensus_prob = (rf_prob + xgb_prob) / 2

Conceptos Clave

Mapas de probabilidad, interpretación geológica, planificación de exploración, validación de campo.

Leyenda de Potencial Aurífero

Muy Bajo (0-0.2)
Bajo (0.2-0.4)
Moderado (0.4-0.6)
Alto (0.6-0.8)
Muy Alto (0.8-1.0)

Recursos Adicionales

© 2025 M.Sc. Edwin Calle Condori - Proyecto eddycc66

Contacto: ecallecondori@example.com | LinkedIn: Edwin Calle Condori