Clase 8: Gran Repaso de Minería de Datos Astronómicos#

(Preparación para Machine Learning)

A lo largo de estas semanas hemos construido un “Data Stack” completo para la investigación astronómica. Hemos pasado de no tener datos a poder descargar, cruzar y visualizar catálogos masivos alojados en servidores de todo el mundo, garantizando la reproducibilidad mediante el control de versiones.

Este documento consolida todos los conceptos clave, herramientas y bases de datos que formarán los cimientos para la siguiente etapa: el Aprendizaje Automático.

1. Resumen de Contenidos y Tablas de Comandos Clave#

A. Automatización y Versionado (Bash y Git)#

El trabajo científico debe ser automatizado y reproducible. La terminal de Linux/Unix y Git son el estándar de la industria.

Categoría

Comando/Herramienta

Descripción y Uso Práctico

Descarga

wget -q -O archivo.csv "URL"

Descarga silenciosa de datos desde un Endpoint a un archivo local.

Texto

sed 's/ /+/g'

Reemplaza espacios por signos + (vital para formatear consultas ADQL en URLs).

Variables

QUERY="..."

Almacenamiento de consultas SQL complejas en variables para código limpio.

Versionado

git init / git add .

Inicializa un repositorio y añade los scripts al área de preparación (staging).

Historial

git commit -m "Mensaje"

Guarda una versión inmutable del código con un mensaje descriptivo.

Colaboración

git branch / git merge

Creación de ramas para trabajo en paralelo y unificación de código (Pull Requests).

B. Análisis y Visualización (Python)#

Python es el motor matemático donde los datos crudos se transforman en astrofísica.

Librería

Función Clave

Descripción y Uso Práctico

Pandas

pd.read_csv()

Carga el archivo crudo en un DataFrame (estructura tabular matricial).

Pandas

df.dropna()

Limpieza de datos: elimina filas con valores nulos (NaN), vital antes de hacer Machine Learning.

Matplotlib

plt.scatter(x, y)

Gráfico de dispersión, la herramienta número uno para diagramas HR, CMDs o mapas estelares.

Matplotlib

plt.gca().invert_yaxis()

Convención astronómica obligatoria: invierte ejes para magnitudes (menor valor = más brillante).

Seaborn

sns.histplot()

Creación de histogramas estadísticos superpuestos (usando hue para clasificar, ej. Estrella vs Galaxia).

C. Minería en Bases de Datos (SQL y ADQL)#

Mover el cómputo al servidor en lugar de descargar terabytes de datos a nuestro disco duro.

Concepto

Sintaxis SQL/ADQL

Significado Analítico

Selección

SELECT TOP 100 ra, dec

Extrae columnas específicas limitando la cantidad de filas de salida.

Condición

WHERE pl_rade BETWEEN 1 AND 2

Filtra los datos algebraicamente (ej. planetas de tamaño terrestre).

Cruce

JOIN tabla_B ON id_A = id_B

Intersección relacional. Cruza fotometría y espectroscopía de un mismo objeto.

Geometría

CIRCLE('ICRS', ra, dec, radio)

(Solo ADQL) Define un cono de búsqueda espacial en grados en la esfera celeste.

Inclusión

1 = CONTAINS(Punto, Circulo)

(Solo ADQL) Función lógica que evalúa si un objeto celeste está dentro de una región.

Agregación

COUNT(), AVG(), GROUP BY

Estadísticas en el servidor (ej. “calcula el promedio de masa agrupado por galaxia”).

2. Las 10 Bases de Datos Fundamentales del Observatorio Virtual#

Para alimentar futuros modelos de Machine Learning, necesitamos saber de dónde sacar los datos de entrenamiento. Aquí están los 10 repositorios más importantes del mundo, sus Endpoints para la terminal y sus tablas clave.

(Nota: Las URLs de los Endpoints están en texto plano para su uso directo en scripts)

Nombre y Enfoque

URL Interfaz Web (GUI)

Endpoint de Máquina (TAP/SQL)

Tablas / Colecciones Principales

1. VizieR (Multicatálogo)

https://vizier.cds.unistra.fr

https://tapvizier.cds.unistra.fr/TAPVizieR/tap/sync?request=doQuery&lang=ADQL&format=csv&query=

I/355/gaiadr3 (Gaia), II/328/allwise (Infrarrojo), V/147 (Exoplanetas).

2. SDSS (Espectroscopía)

http://skyserver.sdss.org/dr18

http://skyserver.sdss.org/dr18/SkyServerWS/SearchTools/SqlSearch?format=csv&cmd=

SpecObjAll (Espectros), PhotoObjAll (Imágenes).

3. NASA Exoplanet Archive

https://exoplanetarchive.ipac.caltech.edu

https://exoplanetarchive.ipac.caltech.edu/TAP/sync?format=csv&query=

ps (Planetary Systems - Catálogo maestro).

4. ESA Gaia Archive

https://gea.esac.esa.int/archive/

https://gea.esac.esa.int/tap-server/tap/sync?REQUEST=doQuery&LANG=ADQL&FORMAT=csv&QUERY=

gaiadr3.gaia_source (Catálogo puro original).

5. SIMBAD (Identificación)

http://simbad.cds.unistra.fr/simbad/

http://simbad.cds.unistra.fr/simbad/sim-tap/sync?request=doQuery&lang=ADQL&format=csv&query=

basic (Coordenadas y tipos de objetos).

6. MAST (Hubble/JWST/TESS)

https://mast.stsci.edu/portal/

https://vao.stsci.edu/CAOMTAP/TapService.aspx/sync?request=doQuery&lang=ADQL&format=csv&query=

ivoa.ObsCore (Metadatos de observaciones).

7. HEASARC (Rayos X / Gamma)

https://heasarc.gsfc.nasa.gov

https://heasarc.gsfc.nasa.gov/xamin/vo/tap/sync?request=doQuery&lang=ADQL&format=csv&query=

Colecciones de misiones como Chandra, Fermi o XMM-Newton.

8. NED (Extragaláctico)

https://ned.ipac.caltech.edu

https://ned.ipac.caltech.edu/tap/sync?request=doQuery&lang=ADQL&format=csv&query=

objdir (Objetos extragalácticos, galaxias).

9. ESO Archive (VLT/ALMA)

http://archive.eso.org/scienceportal/

http://archive.eso.org/tap_obs/sync?request=doQuery&lang=ADQL&format=csv&query=

ivoa.ObsCore (Datos del Observatorio Europeo Austral).

10. ALMA Science Archive

https://almascience.eso.org/aq/

https://almascience.eso.org/tap/sync?request=doQuery&lang=ADQL&format=csv&query=

ivoa.ObsCore (Interferometría de radio submilimétrica).

3. Ejemplo Detallado: Pipeline de Extracción Extragaláctica#

El siguiente es un ejemplo completo y reproducible de cómo se integran todas las herramientas para resolver un problema físico: Obtener la relación Color-Magnitud de las galaxias usando un JOIN en SDSS.

A. El Script de Extracción (Bash + SQL): 1_descarga.sh

#!/bin/bash
echo "Iniciando pipeline astronómico..."

# 1. Definimos la consulta SQL
# Unimos espectroscopía (para saber qué es y a qué distancia está) con fotometría (para el brillo y color)
QUERY="SELECT TOP 5000 s.z, p.u, p.r FROM SpecObj s INNER JOIN PhotoObj p ON s.bestObjID=p.objID WHERE s.class='GALAXY' AND s.z BETWEEN 0.05 AND 0.15"

# 2. Definimos el Endpoint explícito
ENDPOINT="[http://skyserver.sdss.org/dr18/SkyServerWS/SearchTools/SqlSearch?format=csv&cmd=](http://skyserver.sdss.org/dr18/SkyServerWS/SearchTools/SqlSearch?format=csv&cmd=)"

# 3. Formateamos y descargamos
URL="${ENDPOINT}${QUERY}"
# Reemplazamos los espacios por %20 para la URL de Sloan
URL_CLEAN=$(echo $URL | sed 's/ /%20/g')

wget -q -O galaxias_sdss.csv "$URL_CLEAN"
echo "Datos descargados exitosamente."

B. El Script de Análisis (Python):

import pandas as pd
import matplotlib.pyplot as plt

# 1. Ingesta y Limpieza
df = pd.read_csv('galaxias_sdss.csv', skiprows=1, names=['redshift', 'u', 'r'])
df_limpio = df.dropna()

# 2. Ingeniería de Datos (Feature Engineering básica)
# Calculamos el índice de color (Ultravioleta - Rojo)
df_limpio['color_u_r'] = df_limpio['u'] - df_limpio['r']

# 3. Visualización
plt.figure(figsize=(8,6))
# Hexbin es ideal para visualizar altas densidades de puntos
plt.hexbin(df_limpio['r'], df_limpio['color_u_r'], gridsize=40, cmap='plasma')
plt.colorbar(label='Densidad de Galaxias')

plt.gca().invert_xaxis() # Magnitudes absolutas crecen hacia la izquierda
plt.title('Diagrama Color-Magnitud Galáctico')
plt.xlabel('Magnitud r (Brillo)')
plt.ylabel('Índice de Color (u - r)')
plt.savefig('cmd_galaxias.png')
print("Análisis completado. Gráfica guardada.")

4. Retos de Programación (Laboratorio Final)#

A continuación, se presentan 4 problemas astrofísicos reales. Los estudiantes deberán decidir qué base de datos usar de la tabla anterior, escribir la consulta (SQL o ADQL), construir el pipeline en Bash/Python, y argumentar los resultados físicos.

Retos Individuales:

  1. “La Estructura a Gran Escala del Universo”: Utilizando el catálogo espectroscópico de SDSS, extraigan una muestra masiva (mínimo 200,000 registros) de galaxias ubicadas en un corte transversal del cielo (por ejemplo, fijen la Declinación dec en un rango muy estrecho de +/−2 grados, y extraigan toda la información, incluyendo el corrimiento al rojo z). Usando coordenadas polares en Python, grafiquen la Ascensión Recta como el ángulo y el corrimiento al rojo como el radio. Objetivo Científico: Identificar visualmente la “Red Cósmica” (Cosmic Web), confirmando que las galaxias no se distribuyen uniformemente, sino en filamentos densos y grandes vacíos.

  2. “El Límite Técnico de la Misión Kepler”: Utilizando el Endpoint de la NASA Exoplanet Archive, aíslen exclusivamente los planetas que fueron descubiertos por el observatorio espacial Kepler (revisen la columna disc_facility o filtren el nombre). Extraigan su masa planetaria y su periodo orbital. Objetivo Científico: Grafiquen Masa vs Periodo Orbital en escala logarítmica. Identifiquen la “zona vacía” en su gráfica. Deduzcan y expliquen en su informe por qué el método de tránsito empleado por Kepler tiene un sesgo instrumental gigantesco que le impide descubrir planetas de masa terrestre con órbitas largas (como la de Júpiter o Saturno).

Retos en Parejas (Vía Pull Requests de GitHub)

  1. “Hermanos Solares en el Vecindario”: Nuestro Sol tiene parámetros muy específicos: Temperatura efectiva Teff≈5778K, y una metalicidad cercana a la media galáctica. Queremos buscar estrellas casi idénticas al Sol en nuestro vecindario local. Objetivo Científico: Realicen un cruce espacial masivo (usando ADQL en VizieR) entre la astrometría de Gaia DR3 y la espectroscopía/fotometría de SDSS. Deben aislar un volumen esférico alrededor de la Tierra (paralaje mayor a un cierto límite). Filtren las estrellas cuya temperatura sea estadísticamente similar a la solar. Grafiquen la distribución espacial (coordenadas) de estos “hermanos solares” e indiquen cuántos lograron confirmar mediante el cruce de ambos catálogos.

  2. “Cazadores de Fuentes de Alta Energía”: La astronomía óptica (SDSS/Gaia) nos muestra estrellas y galaxias normales, pero el universo violento brilla en Rayos X. Objetivo Científico: Consulten el Endpoint TAP del archivo de HEASARC (NASA). Extraigan las coordenadas de las fuentes catalogadas por el observatorio de rayos X Chandra (tabla chandra). En un script separado, extraigan coordenadas de galaxias ordinarias en SDSS. Usando Python, sobrepongan ambas poblaciones en un mapa del cielo. Analicen la correlación espacial: ¿Las fuentes de rayos X parecen distribuirse al azar, o siguen la misma estructura que las agrupaciones de galaxias?