Community研究与数据分析github.com

ruwwww/agent-skills

天文学与天体物理学工作流的核心Python库,提供Astropy API,包括单位/量、坐标、FITS I/O、表格、时间系统、WCS和宇宙学。在实现或调试使用Astropy的天文数据分析代码时使用。

agent-skills 是什么?

该技能为AI智能体提供了利用Astropy库进行天文学和天体物理学数据分析的全面指导。Astropy是Python天文学的核心包,支持坐标变换、单位与量计算、FITS文件操作、宇宙学计算、精确时间处理、表格数据操作以及天文图像处理。技能详细介绍了七个核心功能模块:单位与量(astropy.units)、坐标系统(astropy.coordinates)、宇宙学计算(astropy.cosmology)、FITS文件处理(astropy.io.fits)、表格操作(astropy.table)、时间处理(astropy.time)和世界坐标系统(astropy.wcs)。它包含了快速入门示例、最佳实践、安装指南以及常见工作流(如坐标转换、FITS文件分析、宇宙学距离计算和星表交叉匹配)。该技能适用于Claude Code、Cursor、Codex等AI智能体平台,帮助开发者高效完成天文数据分析任务,避免常见错误,并遵循Astropy 7.2.0版本的推荐用法和弃用警告。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ruwwww/agent-skills/tree/HEAD/hermes-skills/scientific/astropy

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Astropy

概述

Astropy 是 Python 天文学的核心包,为天文研究和数据分析提供基本功能。使用 astropy 进行坐标变换、单位与量计算、FITS 文件操作、宇宙学计算、精确时间处理、表格数据操作以及天文图像处理。

何时使用此技能

当任务涉及以下内容时,使用 astropy:

  • 在天体坐标系统之间转换(ICRS、Galactic、FK5、AltAz 等)
  • 处理物理单位和量(将 Jy 转换为 mJy、秒差距转换为千米等)
  • 读取、写入或操作 FITS 文件(图像或表格)
  • 宇宙学计算(光度距离、回溯时间、哈勃参数)
  • 使用不同时间尺度(UTC、TAI、TT、TDB)和格式(JD、MJD、ISO)进行精确时间处理
  • 表格操作(读取星表、交叉匹配、过滤、连接)
  • 像素坐标与世界坐标之间的 WCS 转换
  • 天文常数和计算

快速开始

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

# 单位和量
distance = 100 * u.pc
distance_km = distance.to(u.km)

# 坐标
coord = SkyCoord(ra=10.5*u.degree, dec=41.2*u.degree, frame='icrs')
coord_galactic = coord.galactic

# 时间
t = Time('2023-01-15 12:30:00')
jd = t.jd  # 儒略日

# FITS 文件
data = fits.getdata('image.fits')
header = fits.getheader('image.fits')

# 表格
table = Table.read('catalog.fits')

# 宇宙学
d_L = Planck18.luminosity_distance(z=1.0)

核心功能

1. 单位和量 (astropy.units)

处理带单位的物理量,执行单位转换,并确保计算中的量纲一致性。

关键操作:

  • 通过将数值与单位相乘来创建量
  • 使用 .to() 方法在单位之间转换
  • 使用自动单位处理执行算术运算
  • 使用等效性进行领域特定的转换(光谱、多普勒、视差)
  • 处理对数单位(星等、分贝)

参见: references/units.md 获取全面的文档、单位系统、等效性、性能优化和单位算术。

2. 坐标系统 (astropy.coordinates)

表示天体位置并在不同坐标框架之间转换。

关键操作:

  • 在任何框架(ICRS、Galactic、FK5、AltAz 等)中使用 SkyCoord 创建坐标
  • 在坐标系统之间转换
  • 计算角距离和位置角
  • 将坐标与星表匹配
  • 包含距离以进行 3D 坐标操作
  • 处理自行和径向速度
  • 从在线数据库查询命名对象

参见: references/coordinates.md 获取详细的坐标框架描述、转换、观测者相关框架 (AltAz)、星表匹配和性能提示。

3. 宇宙学计算 (astropy.cosmology)

使用标准宇宙学模型执行宇宙学计算。

关键操作:

  • 使用内置宇宙学模型(Planck18、WMAP9 等)
  • 创建自定义宇宙学模型
  • 计算距离(光度、共动、角直径)
  • 计算年龄和回溯时间
  • 确定任意红移处的哈勃参数
  • 计算密度参数和体积
  • 执行逆向计算(根据距离找到红移)

参见: references/cosmology.md 获取可用模型、距离计算、时间计算、密度参数和中微子效应。

4. FITS 文件处理 (astropy.io.fits)

读取、写入和操作 FITS(灵活图像传输系统)文件。

关键操作:

  • 使用上下文管理器打开 FITS 文件
  • 按索引或名称访问 HDU(头部数据单元)
  • 读取和修改头部(关键字、注释、历史)
  • 处理图像数据(NumPy 数组)
  • 处理表格数据(二进制和 ASCII 表格)
  • 创建新的 FITS 文件(单扩展或多扩展)
  • 对大文件使用内存映射
  • 访问远程 FITS 文件(S3、HTTP)

参见: references/fits.md 获取全面的文件操作、头部操作、图像和表格处理、多扩展文件以及性能考虑。

5. 表格操作 (astropy.table)

处理表格数据,支持单位、元数据和多种文件格式。

关键操作:

  • 从数组、列表或字典创建表格
  • 以多种格式(FITS、CSV、HDF5、VOTable)读取/写入表格
  • 访问和修改列和行
  • 排序、过滤和索引表格
  • 执行数据库风格的操作(连接、分组、聚合)
  • 堆叠和拼接表格
  • 处理带单位的列(QTable)
  • 使用掩码处理缺失数据

参见: references/tables.md 获取表格创建、I/O 操作、数据操作、排序、过滤、连接、分组和性能提示。

6. 时间处理 (astropy.time)

精确的时间表示以及时间尺度和格式之间的转换。

关键操作:

  • 以多种格式(ISO、JD、MJD、Unix 等)创建 Time 对象
  • 在时间尺度之间转换(UTC、TAI、TT、TDB 等)
  • 使用 TimeDelta 执行时间算术
  • 为观测者计算恒星时
  • 计算光行时校正(质心、日心)
  • 高效处理时间数组
  • 处理掩码(缺失)时间

参见: references/time.md 获取时间格式、时间尺度、转换、算术、观测功能和精度处理。

7. 世界坐标系统 (astropy.wcs)

在图像中的像素坐标和世界坐标之间转换。

关键操作:

  • 从 FITS 头部读取 WCS
  • 将像素坐标转换为世界坐标(反之亦然)
  • 计算图像覆盖区域
  • 访问 WCS 参数(参考像素、投影、比例)
  • 创建自定义 WCS 对象

参见: references/wcs_and_other_modules.md 获取 WCS 操作和转换。

附加功能

references/wcs_and_other_modules.md 文件还涵盖:

NDData 和 CCDData

用于 n 维数据集的容器,包含元数据、不确定性、掩码和 WCS 信息。

建模

用于创建和拟合天文数据数学模型的框架。

可视化

用于天文图像显示的工具,具有适当的拉伸和缩放。

常数

具有正确单位的物理和天文常数(光速、太阳质量、普朗克常数等)。

卷积

用于平滑和滤波的图像处理核。

统计

稳健的统计函数,包括 sigma 裁剪和离群值剔除。

安装

# 针对当前稳定版本的可重现安装
uv pip install "astropy==7.2.0"

# 推荐的绘图和常见工作流的可选依赖项
uv pip install "astropy[recommended]==7.2.0"

# 广泛天文学工作流的完整可选依赖项集
uv pip install "astropy[all]==7.2.0"

Astropy 7.2.0 需要 Python 3.11+,并依赖于 NumPy、PyERFA、PyYAML 和 packaging。使用隔离的虚拟环境;不要以提升的权限安装 Astropy。

请注意,[recommended] 和 [all] 附加项会引入传递依赖项(matplotlib、scipy 等)的未固定版本。对于可重现的生产环境,请使用锁定文件(项目中的 uv lock,或需求文件的 uv pip compile)固定完整的依赖树,并在部署前检查解析的版本。

常见工作流

在系统之间转换坐标

from astropy.coordinates import SkyCoord
import astropy.units as u

# 创建坐标
c = SkyCoord(ra='05h23m34.5s', dec='-69d45m22s', frame='icrs')

# 转换到银道坐标
c_gal = c.galactic
print(f"l={c_gal.l.deg}, b={c_gal.b.deg}")

# 转换到地平坐标(需要时间和位置)
from astropy.time import Time
from astropy.coordinates import EarthLocation, AltAz

observing_time = Time('2023-06-15 23:00:00')
observing_location = EarthLocation(lat=40*u.deg, lon=-120*u.deg)
aa_frame = AltAz(obstime=observing_time, location=observing_location)
c_altaz = c.transform_to(aa_frame)
print(f"Alt={c_altaz.alt.deg}, Az={c_altaz.az.deg}")

读取和分析 FITS 文件

from astropy.io import fits
import numpy as np

# 打开 FITS 文件
with fits.open('observation.fits') as hdul:
    # 显示结构
    hdul.info()

    # 获取图像数据和头部
    data = hdul[1].data
    header = hdul[1].header

    # 访问头部值
    exptime = header['EXPTIME']
    filter_name = header['FILTER']

    # 分析数据
    mean = np.mean(data)
    median = np.median(data)
    print(f"平均值: {mean}, 中位数: {median}")

宇宙学距离计算

from astropy.cosmology import Planck18
import astropy.units as u
import numpy as np

# 计算 z=1.5 处的距离
z = 1.5
d_L = Planck18.luminosity_distance(z)
d_A = Planck18.angular_diameter_distance(z)

print(f"光度距离: {d_L}")
print(f"角直径距离: {d_A}")

# 该红移处的宇宙年龄
age = Planck18.age(z)
print(f"z={z} 处的年龄: {age.to(u.Gyr)}")

# 回溯时间
t_lookback = Planck18.lookback_time(z)
print(f"回溯时间: {t_lookback.to(u.Gyr)}")

交叉匹配星表

from astropy.table import Table
from astropy.coordinates import SkyCoord, match_coordinates_sky
import astropy.units as u

# 读取星表
cat1 = Table.read('catalog1.fits')
cat2 = Table.read('catalog2.fits')

# 创建坐标对象
coords1 = SkyCoord(ra=cat1['RA']*u.degree, dec=cat1['DEC']*u.degree)
coords2 = SkyCoord(ra=cat2['RA']*u.degree, dec=cat2['DEC']*u.degree)

# 查找匹配
idx, sep, _ = coords1.match_to_catalog_sky(coords2)

# 按分离阈值过滤
max_sep = 1 * u.arcsec
matches = sep < max_sep

# 创建匹配后的星表
cat1_matched = cat1[matches]
cat2_matched = cat2[idx[matches]]
print(f"找到 {len(cat1_matched)} 个匹配")

最佳实践

  1. 始终使用单位:将单位附加到量以消除错误并确保量纲一致性
  2. 使用上下文管理器处理 FITS 文件:确保文件正确关闭
  3. 优先使用数组而非循环:作为数组处理多个坐标/时间以获得更好的性能
  4. 检查坐标框架:在转换前验证框架
  5. 使用适当的宇宙学模型:为分析选择合适的宇宙学模型
  6. 处理缺失数据:对包含缺失值的表格使用掩码列
  7. 指定时间尺度:对于精确计时,明确指定时间尺度(UTC、TT、TDB)
  8. 使用 QTable 处理带单位的表格:当表格列具有单位时
  9. 检查 WCS 有效性:在使用转换前验证 WCS
  10. 缓存常用值:昂贵的计算(例如宇宙学距离)可以缓存
  11. 明确网络访问:SkyCoord.from_name()、EarthLocation.of_site(refresh_cache=True)、EarthLocation.of_address()、download_file()、远程 FITS 读取以及一些 IERS 时间/坐标转换可能联系外部服务或更新本地缓存。避免将敏感的目标名称、地址、URL 或专有文件位置发送给第三方服务。在处理潜在敏感目标或数据位置时,请在执行这些网络调用前与用户确认。
  12. 固定版本以保证可重现性:对于共享环境,使用如 astropy==7.2.0 的固定版本;在审查发行说明后有目的地更新固定版本。

当前版本说明

  • 当前研究的稳定版本:Astropy 7.2.0(发布于 2025-11-25;截至 2026-06-10 已验证为最新)
  • Python 要求:3.11+
  • Astropy 8.0 处于发布候选阶段(8.0.0rc1,2026-05-26)。预期的关键变化:
    • 已弃用的 astropy.cosmology 子模块别名(astropy.cosmology.flrw、.core、.funcs、.connect、.parameter)被移除——直接从 astropy.cosmology 导入所有内容(例如 from astropy.cosmology import FlatLambdaCDM, z_at_value)
    • astropy.constants 默认值从 CODATA 2018 更改为 CODATA 2022;如果可重现性重要,通过 astropyconst 科学状态固定常量版本
    • NumPy 2.0 成为最低支持版本;7.2.x LTS 分支将在 8.0 版本发布后保留 NumPy 1.x 支持六个月
    • 内置测试运行器(astropy.test()、TestRunner)正式弃用——直接调用 pytest
  • 新代码中应避免的近期 7.x 弃用:作为第一个 .loc 元素传递表格索引标识符(t.loc["b", 2])——改用 t.loc.with_index("b")[2](计划在 9.0 中移除);astropy.utils.isiterable()——改用 numpy.iterable()
  • 近期 7.0 移除:旧的弃用 FITS API,例如 (Bin)Table.update、_ExtensionHDU、_NonstandardExtHDU 以及 CompImageHDU 的 tile_size 参数;CompImageHeader 已弃用。在新示例中避免这些遗留模式。
  • 推荐的可选额外包是 recommended(用于常见的绘图/科学依赖项),仅在需要广泛可选功能集时使用 all。

文档和资源

参考文件

有关特定模块的详细信息:

  • references/units.md - 单位、量、转换和等效性
  • references/coordinates.md - 坐标系统、转换和星表匹配
  • references/cosmology.md - 宇宙学模型和计算
  • references/fits.md - FITS 文件操作和处理
  • references/tables.md - 表格创建、I/O 和操作
  • references/time.md - 时间格式、尺度和计算
  • references/wcs_and_other_modules.md - WCS、NDData、建模、可视化、常量和实用工具

引用科学智能体技能

此技能是 Scientific Agent Skills 的一部分

相关技能