Astropy
Resumen
Astropy es el paquete principal de Python para astronomía, que proporciona funcionalidades esenciales para la investigación astronómica y el análisis de datos. Usa astropy para transformaciones de coordenadas, cálculos de 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 (UTC, TAI, TT, TDB) y formatos (JD, MJD, ISO)
- Operaciones con tablas (leer catálogos, hacer cross-matching, filtrar, unir)
- Transformaciones WCS entre coordenadas de píxel y mundo
- Constantes astronómicas y cálculos
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_galactico = coord.galactic
# Tiempo
t = Time('2023-01-15 12:30:00')
jd = t.jd # Fecha Juliana
# Archivos FITS
datos = fits.getdata('imagen.fits')
cabecera = 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 consistencia dimensional en los cálculos.
Operaciones clave:
- Crear cantidades multiplicando valores por unidades
- Convertir entre unidades usando el método
.to() - Realizar aritmética con manejo automático de unidades
- Usar equivalencias para conversiones específicas de 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
- Hacer coincidir 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 usando 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)
Leer, escribir y manipular archivos FITS (Sistema de Transporte de Imágenes Flexibles).
Operaciones clave:
- Abrir archivos FITS con administradores de contexto
- Acceder a HDUs (Unidades de Datos de Cabecera) por índice o nombre
- Leer y modificar cabeceras (palabras clave, comentarios, historial)
- Trabajar con datos de imagen (arrays de NumPy)
- Manejar datos tabulares (tablas binarias y ASCII)
- Crear nuevos archivos FITS (único o múltiples extensiones)
- 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 cabeceras, 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 de estilo base de datos (unir, agrupar, agregar)
- Apilar y concatenar tablas
- Trabajar con columnas que tienen unidades (QTable)
- Manejar datos faltantes con enmascaramiento
Ver: references/tables.md para creación de tablas, operaciones de E/S, manipulación de datos, ordenamiento, 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 de tiempo.
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 de tiempo con TimeDelta
- Calcular tiempo sidéreo para observadores
- Calcular correcciones de tiempo de viaje de la luz (baricéntrico, heliocéntrico)
- 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, características 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 mundiales.
Operaciones clave:
- Leer WCS desde cabeceras FITS
- Convertir coordenadas de píxel a coordenadas mundiales (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 para crear y ajustar modelos matemáticos a datos astronómicos.
Visualización
Herramientas para la 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
# Instalación reproducible contra la versión estable actual
uv pip install "astropy==7.2.0"
# Dependencias opcionales recomendadas para trazado y flujos de trabajo comunes
uv pip install "astropy[recommended]==7.2.0"
# Conjunto completo de dependencias opcionales para flujos de trabajo astronómicos amplios
uv pip install "astropy[all]==7.2.0"
Astropy 7.2.0 requiere Python 3.11+ y depende de NumPy, PyERFA, PyYAML y packaging. Usa un entorno virtual aislado; no instales Astropy con privilegios elevados.
Ten en cuenta que los extras [recommended] y [all] incorporan dependencias transitivas (matplotlib, scipy, etc.) en versiones no fijadas. Para entornos de producción reproducibles, fija todo el árbol de dependencias con un archivo de bloqueo (uv lock en un proyecto, o uv pip compile para archivos de requisitos) y revisa las versiones resueltas antes de implementar.
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)
marco_aa = AltAz(obstime=tiempo_observacion, location=ubicacion_observacion)
c_altaz = c.transform_to(marco_aa)
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 cabecera
datos = hdul[1].data
cabecera = hdul[1].header
# Acceder a valores de cabecera
tiempo_expo = cabecera['EXPTIME']
nombre_filtro = cabecera['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)}")
Emparejamiento 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"Encontradas {len(cat1_emparejado)} coincidencias")
Mejores prácticas
- Usa siempre unidades: Adjunta unidades a las cantidades para evitar errores y asegurar consistencia dimensional
- Usa administradores de contexto para archivos FITS: Asegura el cierre adecuado de archivos
- Prefiere arrays sobre bucles: Procesa múltiples coordenadas/tiempos como arrays para mejor rendimiento
- Verifica los marcos de coordenadas: Comprueba 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 mediciones precisas
- Usa QTable para tablas con unidades: Cuando las columnas de la tabla tengan unidades
- Verifica la validez de WCS: Comprueba WCS antes de usar transformaciones
- Almacena en caché valores usados frecuentemente: Los cálculos costosos (por ejemplo, distancias cosmológicas) se pueden almacenar en caché
- Sé explícito sobre el acceso a la red:
SkyCoord.from_name(),EarthLocation.of_site(refresh_cache=True),EarthLocation.of_address(),download_file(), lecturas remotas de FITS y algunas transformaciones de tiempo/coordenadas IERS pueden contactar servicios externos o actualizar cachés locales. Evita enviar nombres de objetivos sensibles, direcciones, URLs o ubicaciones de archivos propietarios a servicios de terceros. Al trabajar con objetivos potencialmente sensibles o ubicaciones de datos, confirma con el usuario antes de realizar estas llamadas de red. - Fija para reproducibilidad: Usa versiones fijadas como
astropy==7.2.0para entornos compartidos; actualiza las fijaciones intencionalmente después de revisar las notas de la versión.
Notas de la versión actual
- Versión estable actual investigada: Astropy 7.2.0 (publicada el 2025-11-25; verificada como actual al 2026-06-10)
- Requisito de Python: 3.11+
- Astropy 8.0 está en etapa de candidato a publicación (8.0.0rc1, 2026-05-26). Cambios clave a anticipar:
- Se eliminan los shims de submódulos
astropy.cosmologyobsoletos (astropy.cosmology.flrw,.core,.funcs,.connect,.parameter) — importa todo directamente desdeastropy.cosmology(por ejemplo,from astropy.cosmology import FlatLambdaCDM, z_at_value) - Los valores predeterminados de
astropy.constantscambian de CODATA 2018 a CODATA 2022; fija una versión de constantes a través de los estados científicosastropyconstsi la reproducibilidad es importante - NumPy 2.0 se convierte en la versión mínima compatible; la rama LTS 7.2.x mantiene soporte para NumPy 1.x durante seis meses después del lanzamiento de 8.0
- El ejecutor de pruebas integrado (
astropy.test(),TestRunner) queda formalmente obsoleto — invocapytestdirectamente
- Se eliminan los shims de submódulos
- Obsolescencias recientes de 7.x a evitar en código nuevo: pasar un identificador de índice de tabla como primer elemento
.loc(t.loc["b", 2]) — usat.loc.with_index("b")[2]en su lugar (eliminación planeada para 9.0);astropy.utils.isiterable()— usanumpy.iterable() - Eliminaciones recientes de 7.0: APIs FITS obsoletas como
(Bin)Table.update,_ExtensionHDU,_NonstandardExtHDUy el argumentotile_sizeparaCompImageHDU;CompImageHeaderestá obsoleto. Evita esos patrones heredados en ejemplos nuevos. - Los extras opcionales recomendados son
recommendedpara dependencias comunes de trazado/científicas yallsolo cuando se necesita un conjunto amplio de funciones opcionales.
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 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 cosmológicos y cálculosreferences/fits.md- Operaciones y manipulación de archivos FITSreferences/tables.md- Creación de tablas, E/S y operacionesreferences/time.md- Formatos de tiempo, escalas y cálculosreferences/wcs_and_other_modules.md- WCS, NDData, modelado, visualización, constantes y utilidades
Cómo citar habilidades de agente científico
Esta habilidad es parte de Scientific Agent Skil
…
[truncado para traducción]