Astropy
Resumen
Astropy es el paquete principal de Python para astronomía, que proporciona funcionalidades esenciales para la investigación y el análisis de datos astronómicos. Usa astropy para transformaciones de coordenadas, cálculos con unidades y cantidades, operaciones con archivos FITS, cálculos cosmológicos, manejo preciso del tiempo, manipulación de datos tabulares y procesamiento de imágenes astronómicas.
Cuándo usar esta habilidad
Usa astropy cuando las tareas impliquen:
- Convertir entre sistemas de coordenadas celestes (ICRS, Galáctico, FK5, AltAz, etc.)
- Trabajar con unidades y cantidades físicas (convertir Jy a mJy, pársecs a km, etc.)
- Leer, escribir o manipular archivos FITS (imágenes o tablas)
- Cálculos cosmológicos (distancia de luminosidad, tiempo de retroceso, parámetro de Hubble)
- Manejo preciso del tiempo con diferentes escalas horarias (UTC, TAI, TT, TDB) y formatos (JD, MJD, ISO)
- Operaciones con tablas (leer catálogos, cruzar coincidencias, filtrar, unir)
- Transformaciones WCS entre coordenadas de píxel y coordenadas del mundo
- Constantes y cálculos astronómicos
Inicio rápido
import astropy.units as u
from astropy.coordinates import SkyCoord
from astropy.time import Time
from astropy.io import fits
from astropy.table import Table
from astropy.cosmology import Planck18
# Unidades y cantidades
distancia = 100 * u.pc
distancia_km = distancia.to(u.km)
# Coordenadas
coord = SkyCoord(ra=10.5*u.degree, dec=41.2*u.degree, frame='icrs')
coord_galactica = coord.galactic
# Tiempo
t = Time('2023-01-15 12:30:00')
jd = t.jd # Fecha Juliana
# Archivos FITS
datos = fits.getdata('imagen.fits')
encabezado = fits.getheader('imagen.fits')
# Tablas
tabla = Table.read('catalogo.fits')
# Cosmología
d_L = Planck18.luminosity_distance(z=1.0)
Capacidades principales
1. Unidades y Cantidades (astropy.units)
Maneja cantidades físicas con unidades, realiza conversiones de unidades y asegura la consistencia dimensional en los cálculos.
Operaciones clave:
- Crear cantidades multiplicando valores con unidades
- Convertir entre unidades usando el método
.to() - Realizar aritmética con manejo automático de unidades
- Usar equivalencias para conversiones específicas del dominio (espectral, doppler, paralaje)
- Trabajar con unidades logarítmicas (magnitudes, decibelios)
Ver: references/units.md para documentación completa, sistemas de unidades, equivalencias, optimización de rendimiento y aritmética de unidades.
2. Sistemas de Coordenadas (astropy.coordinates)
Representa posiciones celestes y transforma entre diferentes marcos de coordenadas.
Operaciones clave:
- Crear coordenadas con
SkyCoorden cualquier marco (ICRS, Galáctico, FK5, AltAz, etc.) - Transformar entre sistemas de coordenadas
- Calcular separaciones angulares y ángulos de posición
- Emparejar coordenadas con catálogos
- Incluir distancia para operaciones de coordenadas 3D
- Manejar movimientos propios y velocidades radiales
- Consultar objetos nombrados desde bases de datos en línea
Ver: references/coordinates.md para descripciones detalladas de marcos de coordenadas, transformaciones, marcos dependientes del observador (AltAz), emparejamiento de catálogos y consejos de rendimiento.
3. Cálculos Cosmológicos (astropy.cosmology)
Realiza cálculos cosmológicos utilizando modelos cosmológicos estándar.
Operaciones clave:
- Usar cosmologías integradas (Planck18, WMAP9, etc.)
- Crear modelos cosmológicos personalizados
- Calcular distancias (luminosidad, comóvil, diámetro angular)
- Calcular edades y tiempos de retroceso
- Determinar el parámetro de Hubble en cualquier corrimiento al rojo
- Calcular parámetros de densidad y volúmenes
- Realizar cálculos inversos (encontrar z para una distancia dada)
Ver: references/cosmology.md para modelos disponibles, cálculos de distancia, cálculos de tiempo, parámetros de densidad y efectos de neutrinos.
4. Manejo de Archivos FITS (astropy.io.fits)
Lee, escribe y manipula archivos FITS (Sistema de Transporte de Imágenes Flexible).
Operaciones clave:
- Abrir archivos FITS con administradores de contexto
- Acceder a HDUs (Unidades de Datos de Encabezado) por índice o nombre
- Leer y modificar encabezados (palabras clave, comentarios, historial)
- Trabajar con datos de imagen (arrays NumPy)
- Manejar datos de tabla (tablas binarias y ASCII)
- Crear nuevos archivos FITS (de extensión única o múltiple)
- Usar mapeo de memoria para archivos grandes
- Acceder a archivos FITS remotos (S3, HTTP)
Ver: references/fits.md para operaciones completas de archivos, manipulación de encabezados, manejo de imágenes y tablas, archivos de múltiples extensiones y consideraciones de rendimiento.
5. Operaciones con Tablas (astropy.table)
Trabaja con datos tabulares con soporte para unidades, metadatos y varios formatos de archivo.
Operaciones clave:
- Crear tablas a partir de arrays, listas o diccionarios
- Leer/escribir tablas en múltiples formatos (FITS, CSV, HDF5, VOTable)
- Acceder y modificar columnas y filas
- Ordenar, filtrar e indexar tablas
- Realizar operaciones estilo base de datos (unir, agrupar, agregar)
- Apilar y concatenar tablas
- Trabajar con columnas que reconocen unidades (QTable)
- Manejar datos faltantes con enmascaramiento
Ver: references/tables.md para creación de tablas, operaciones de E/S, manipulación de datos, ordenación, filtrado, uniones, agrupación y consejos de rendimiento.
6. Manejo del Tiempo (astropy.time)
Representación precisa del tiempo y conversión entre escalas y formatos horarios.
Operaciones clave:
- Crear objetos Time en varios formatos (ISO, JD, MJD, Unix, etc.)
- Convertir entre escalas de tiempo (UTC, TAI, TT, TDB, etc.)
- Realizar aritmética temporal con TimeDelta
- Calcular tiempo sidéreo para observadores
- Calcular correcciones de tiempo de viaje de la luz (baricéntrica, heliocéntrica)
- Trabajar con arrays de tiempo de manera eficiente
- Manejar tiempos enmascarados (faltantes)
Ver: references/time.md para formatos de tiempo, escalas de tiempo, conversiones, aritmética, funciones de observación y manejo de precisión.
7. Sistema de Coordenadas Mundiales (astropy.wcs)
Transforma entre coordenadas de píxel en imágenes y coordenadas del mundo real.
Operaciones clave:
- Leer WCS de encabezados FITS
- Convertir coordenadas de píxel a coordenadas del mundo (y viceversa)
- Calcular huellas de imágenes
- Acceder a parámetros WCS (píxel de referencia, proyección, escala)
- Crear objetos WCS personalizados
Ver: references/wcs_and_other_modules.md para operaciones y transformaciones WCS.
Capacidades adicionales
El archivo references/wcs_and_other_modules.md también cubre:
NDData y CCDData
Contenedores para conjuntos de datos n-dimensionales con metadatos, incertidumbre, enmascaramiento e información WCS.
Modelado
Marco de trabajo para crear y ajustar modelos matemáticos a datos astronómicos.
Visualización
Herramientas para visualización de imágenes astronómicas con estiramiento y escalado apropiados.
Constantes
Constantes físicas y astronómicas con unidades adecuadas (velocidad de la luz, masa solar, constante de Planck, etc.).
Convolución
Kernels de procesamiento de imágenes para suavizado y filtrado.
Estadística
Funciones estadísticas robustas que incluyen recorte sigma y rechazo de valores atípicos.
Instalación
# Instalar astropy
uv pip install astropy
# Con dependencias opcionales para funcionalidad completa
uv pip install astropy[all]
Flujos de trabajo comunes
Convertir coordenadas entre sistemas
from astropy.coordinates import SkyCoord
import astropy.units as u
# Crear coordenada
c = SkyCoord(ra='05h23m34.5s', dec='-69d45m22s', frame='icrs')
# Transformar a galáctico
c_gal = c.galactic
print(f"l={c_gal.l.deg}, b={c_gal.b.deg}")
# Transformar a alt-az (requiere tiempo y ubicación)
from astropy.time import Time
from astropy.coordinates import EarthLocation, AltAz
tiempo_observacion = Time('2023-06-15 23:00:00')
ubicacion_observacion = EarthLocation(lat=40*u.deg, lon=-120*u.deg)
aa_frame = AltAz(obstime=tiempo_observacion, location=ubicacion_observacion)
c_altaz = c.transform_to(aa_frame)
print(f"Alt={c_altaz.alt.deg}, Az={c_altaz.az.deg}")
Leer y analizar archivos FITS
from astropy.io import fits
import numpy as np
# Abrir archivo FITS
with fits.open('observacion.fits') as hdul:
# Mostrar estructura
hdul.info()
# Obtener datos de imagen y encabezado
datos = hdul[1].data
encabezado = hdul[1].header
# Acceder a valores del encabezado
exptime = encabezado['EXPTIME']
nombre_filtro = encabezado['FILTER']
# Analizar datos
media = np.mean(datos)
mediana = np.median(datos)
print(f"Media: {media}, Mediana: {mediana}")
Cálculos de distancia cosmológica
from astropy.cosmology import Planck18
import astropy.units as u
import numpy as np
# Calcular distancias en z=1.5
z = 1.5
d_L = Planck18.luminosity_distance(z)
d_A = Planck18.angular_diameter_distance(z)
print(f"Distancia de luminosidad: {d_L}")
print(f"Distancia de diámetro angular: {d_A}")
# Edad del universo en ese corrimiento al rojo
edad = Planck18.age(z)
print(f"Edad en z={z}: {edad.to(u.Gyr)}")
# Tiempo de retroceso
t_retroceso = Planck18.lookback_time(z)
print(f"Tiempo de retroceso: {t_retroceso.to(u.Gyr)}")
Cruce de coincidencias de catálogos
from astropy.table import Table
from astropy.coordinates import SkyCoord, match_coordinates_sky
import astropy.units as u
# Leer catálogos
cat1 = Table.read('catalogo1.fits')
cat2 = Table.read('catalogo2.fits')
# Crear objetos de coordenadas
coords1 = SkyCoord(ra=cat1['RA']*u.degree, dec=cat1['DEC']*u.degree)
coords2 = SkyCoord(ra=cat2['RA']*u.degree, dec=cat2['DEC']*u.degree)
# Encontrar coincidencias
idx, sep, _ = coords1.match_to_catalog_sky(coords2)
# Filtrar por umbral de separación
sep_max = 1 * u.arcsec
coincidencias = sep < sep_max
# Crear catálogos emparejados
cat1_emparejado = cat1[coincidencias]
cat2_emparejado = cat2[idx[coincidencias]]
print(f"Se encontraron {len(cat1_emparejado)} coincidencias")
Mejores prácticas
- Usa siempre unidades: Asigna unidades a las cantidades para evitar errores y asegurar consistencia dimensional
- Usa administradores de contexto para archivos FITS: Asegura el cierre adecuado del archivo
- Prefiere arrays sobre bucles: Procesa múltiples coordenadas/tiempos como arrays para mejor rendimiento
- Verifica los marcos de coordenadas: Confirma el marco antes de las transformaciones
- Usa la cosmología adecuada: Elige el modelo cosmológico correcto para tu análisis
- Maneja datos faltantes: Usa columnas enmascaradas para tablas con valores faltantes
- Especifica escalas de tiempo: Sé explícito sobre las escalas de tiempo (UTC, TT, TDB) para una sincronización precisa
- Usa QTable para tablas con unidades: Cuando las columnas de la tabla tengan unidades
- Verifica la validez de WCS: Confirma el WCS antes de usar transformaciones
- Almacena en caché valores usados con frecuencia: Los cálculos costosos (por ejemplo, distancias cosmológicas) se pueden almacenar en caché
Documentación y recursos
- Documentación oficial de Astropy: https://docs.astropy.org/en/stable/
- Tutoriales: https://learn.astropy.org/
- GitHub: https://github.com/astropy/astropy
Archivos de referencia
Para obtener información detallada sobre módulos específicos:
references/units.md- Unidades, cantidades, conversiones y equivalenciasreferences/coordinates.md- Sistemas de coordenadas, transformaciones y emparejamiento de catálogosreferences/cosmology.md- Modelos y cálculos cosmológicosreferences/fits.md- Operaciones y manipulación de archivos FITSreferences/tables.md- Creación, E/S y operaciones de tablasreferences/time.md- Formatos, escalas y cálculos de tiemporeferences/wcs_and_other_modules.md- WCS, NDData, modelado, visualización, constantes y utilidades