Community研究&データ分析github.com

ruwwww/agent-skills

天文学・天体物理学のワークフローでAstropy API(単位/数量、座標、FITS入出力、テーブル、時間系、WCS、宇宙論)を利用するためのコアPythonライブラリです。Astropyを使用した天文データ分析コードの実装やデバッグに使用します。

agent-skills とは?

このスキルは、天文データ分析のためのコアPythonパッケージであるAstropyの包括的な使用法を提供します。天体の座標変換(ICRS、銀河座標、FK5、AltAzなど)、物理単位と数量の操作(JyからmJyへの変換、パーセクからkmへの変換など)、FITSファイルの読み書き、宇宙論的計算(光度距離、ルックバックタイム、ハッブルパラメータ)、精密な時刻処理(UTC、TAI、TT、TDB)、テーブル操作(カタログのクロスマッチング、フィルタリング、結合)、WCS変換(ピクセル座標と天球座標の相互変換)など、天文学研究に不可欠な機能を網羅します。Claude Code、Cursor、CodexなどのAIエージェント上で動作し、コード実装の支援、デバッグ、最適化を可能にします。最新版Astropy 7.2.0に対応し、ベストプラクティスとして単位の明示、コンテキストマネージャの使用、配列処理の推奨、ネットワークアクセスに関する注意点などを含みます。また、非推奨APIや将来のバージョン変更についての注意事項も提供します。

対応~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に質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Astropy

概要

Astropyは天文学のためのコアPythonパッケージであり、天文研究やデータ分析に不可欠な機能を提供します。座標変換、単位と数量の計算、FITSファイル操作、宇宙論的計算、精密な時刻処理、表形式データの操作、天文画像処理にAstropyを使用してください。

使用すべき場面

以下のようなタスクにAstropyを使用します:

  • 天体座標系の変換(ICRS、銀河座標、FK5、AltAzなど)
  • 物理単位と数量の操作(JyからmJy、パーセクからkmなどへの変換)
  • 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、銀河座標、FK5、AltAzなど)で SkyCoord を使用して座標を作成
  • 座標系間の変換
  • 角度分離と位置角の計算
  • 座標をカタログにマッチング
  • 3D座標操作のための距離を含める
  • 固有運動と視線速度の処理
  • オンラインデータベースから名前付きオブジェクトを照会

参照: 詳細な座標フレームの説明、変換、観測者依存フレーム(AltAz)、カタログマッチング、パフォーマンスのヒントについては references/coordinates.md を参照してください。

3. 宇宙論的計算(astropy.cosmology)

標準的な宇宙モデルを使用して宇宙論的計算を実行します。

主な操作:

  • 組み込み宇宙モデル(Planck18、WMAP9など)を使用
  • カスタム宇宙モデルを作成
  • 距離の計算(光度距離、共動距離、角直径距離)
  • 年齢とルックバックタイムの計算
  • 任意の赤方偏移におけるハッブルパラメータの決定
  • 密度パラメータと体積の計算
  • 逆計算(指定距離に対応する赤方偏移を見つける)

参照: 利用可能なモデル、距離計算、時間計算、密度パラメータ、ニュートリノ効果については references/cosmology.md を参照してください。

4. FITSファイル処理(astropy.io.fits)

FITS(Flexible Image Transport System)ファイルの読み取り、書き込み、操作を行います。

主な操作:

  • コンテキストマネージャを使用してFITSファイルを開く
  • インデックスまたは名前でHDU(ヘッダーデータユニット)にアクセス
  • ヘッダー(キーワード、コメント、履歴)の読み取りと変更
  • 画像データ(NumPy配列)の操作
  • テーブルデータ(バイナリテーブルとASCIIテーブル)の処理
  • 新しいFITSファイル(単一または複数拡張)の作成
  • 大きなファイルに対するメモリマッピングの使用
  • リモートFITSファイル(S3、HTTP)へのアクセス

参照: 包括的なファイル操作、ヘッダー操作、画像とテーブルの処理、複数拡張ファイル、パフォーマンスに関する考慮事項については references/fits.md を参照してください。

5. テーブル操作(astropy.table)

単位、メタデータ、さまざまなファイル形式をサポートした表形式データを扱います。

主な操作:

  • 配列、リスト、または辞書からテーブルを作成
  • 複数の形式(FITS、CSV、HDF5、VOTable)でテーブルを読み書き
  • 列と行にアクセスして変更
  • テーブルのソート、フィルタリング、インデックス作成
  • データベース形式の操作(結合、グループ化、集約)の実行
  • テーブルのスタックと連結
  • 単位対応列(QTable)の操作
  • マスキングによる欠損データの処理

参照: テーブル作成、入出力操作、データ操作、ソート、フィルタリング、結合、グループ化、パフォーマンスのヒントについては references/tables.md を参照してください。

6. 時刻処理(astropy.time)

精密な時刻表現と、時間尺度と形式間の変換を行います。

主な操作:

  • さまざまな形式(ISO、JD、MJD、Unixなど)でTimeオブジェクトを作成
  • 時間尺度間の変換(UTC、TAI、TT、TDBなど)
  • TimeDeltaを使用した時刻演算の実行
  • 観測者に対する恒星時の計算
  • 光行差補正(重心、日心)の計算
  • 時刻配列の効率的な操作
  • マスクされた(欠損)時刻の処理

参照: 時刻形式、時間尺度、変換、演算、観測機能、精度処理については references/time.md を参照してください。

7. 世界座標系(astropy.wcs)

画像内のピクセル座標と天球座標の間で変換を行います。

主な操作:

  • FITSヘッダーからWCSを読み取り
  • ピクセル座標を天球座標に変換(およびその逆)
  • 画像フットプリントの計算
  • WCSパラメータ(基準ピクセル、投影法、スケール)へのアクセス
  • カスタムWCSオブジェクトの作成

参照: WCS操作と変換については references/wcs_and_other_modules.md を参照してください。

追加機能

references/wcs_and_other_modules.md ファイルでは以下もカバーしています:

NDData と CCDData

メタデータ、不確実性、マスキング、WCS情報を含むn次元データセットのコンテナ。

モデリング(Modeling)

天文データに数理モデルを作成しフィッティングするためのフレームワーク。

可視化(Visualization)

適切なストレッチとスケーリングを備えた天文画像表示のためのツール。

定数(Constants)

適切な単位を持つ物理的および天文学的な定数(光速、太陽質量、プランク定数など)。

畳み込み(Convolution)

平滑化とフィルタリングのための画像処理カーネル。

統計(Statistics)

シグマクリッピングや外れ値除去を含むロバストな統計関数。

インストール

# 現在の安定リリースに対する再現可能なインストール
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年6月10日現在最新であることを確認済み)
  • Python要件: 3.11+
  • Astropy 8.0はリリース候補段階です(8.0.0rc1、2026年5月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リリース後6ヶ月間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 - テーブル作成、入出力、操作
  • references/time.md - 時刻形式、尺度、計算
  • references/wcs_and_other_modules.md - WCS、NDData、モデリング、可視化、定数、ユーティリティ

科学的エージェントスキルの引用

このスキルはScientific Agent Skillsの一部です。

関連スキル