mcpField
A
astropy

astropy

github.com/kalarislabsその他7340 回インストール3 日前に更新
リポジトリ

astropy について

Astropy は、天体観測データ、天球座標、物理量を扱う天文学研究・データ解析向けの Python ツールキットです。FITS、時刻、テーブル、宇宙論計算に加え、画像ピクセルと天球座標の変換機能を備えています。

主な機能

  1. 01単位付き物理量と単位変換
  2. 02天球座標の変換とマッチング
  3. 03FITS 画像・テーブルの入出力
  4. 04時刻形式と時刻系の変換
  5. 05宇宙論的距離とモデルの計算
  6. 06テーブル操作と WCS 変換

活用シーン

  1. 01観測対象の赤道座標と銀河座標の変換
  2. 02FITS 画像の読み込みと WCS の確認
  3. 03天文カタログのクロスマッチと絞り込み
  4. 04選択した宇宙論モデルによる距離計算

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill astropy

インストール後、Claude Code で/astropyを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
coordinates.md
cosmology.md
fits.md
tables.md
time.md
units.md
wcs_and_other_modules.md

詳細

Astropy

概要

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

このスキルを使用する場面

以下のタスクが含まれる場合に astropy を使用してください:

  • 天球座標系間の変換(ICRS、Galactic、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

# Units and quantities
distance = 100 * u.pc
distance_km = distance.to(u.km)

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

# Time
t = Time('2023-01-15 12:30:00')
jd = t.jd  # Julian Date

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

# Tables
table = Table.read('catalog.fits')

# Cosmology
d_L = Planck18.luminosity_distance(z=1.0)

中核機能

1. 単位と量(astropy.units)

単位を伴う物理量を扱い、単位変換を行い、計算における次元の整合性を確保します。

主な操作:

  • 値に単位を乗じて量を生成する
  • .to() メソッドを使用して単位間を変換する
  • 単位を自動的に処理して算術演算を行う
  • 分野固有の変換(スペクトル、ドップラー、視差)に等価性を使用する
  • 対数単位(等級、デシベル)を扱う

参照: 包括的なドキュメント、単位系、等価性、パフォーマンス最適化、単位演算については references/units.md を参照してください。

2. 座標系(astropy.coordinates)

天体の位置を表現し、異なる座標フレーム間で変換します。

主な操作:

  • SkyCoord で任意のフレーム(ICRS、Galactic、FK5、AltAz など)の座標を生成する
  • 座標系間を変換する
  • 角度の隔たりと位置角を計算する
  • 座標をカタログにマッチングする
  • 3D 座標操作のために距離を含める
  • 固有運動と視線速度を扱う
  • オンラインデータベースから名前付き天体を照会する

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

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

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

主な操作:

  • 組み込みの宇宙論(Planck18、WMAP9 など)を使用する
  • カスタムの宇宙論モデルを作成する
  • 距離(光度距離、共動距離、角直径距離)を計算する
  • 年齢とルックバックタイムを計算する
  • 任意の赤方偏移におけるハッブルパラメータを求める
  • 密度パラメータと体積を計算する
  • 逆計算を行う(与えられた距離に対する z を求める)

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

4. FITS ファイルの取り扱い(astropy.io.fits)

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

主な操作:

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

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

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

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

主な操作:

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

参照: テーブルの作成、I/O 操作、データ操作、並べ替え、フィルタリング、結合、グループ化、パフォーマンスのヒントについては、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 情報を備えた、多次元データセット用のコンテナーです。

モデリング

天文データに数学モデルを作成して当てはめるためのフレームワークです。

可視化

適切なストレッチとスケーリングを使って天文画像を表示するツールです。

定数

適切な単位を備えた物理定数および天文定数(光速、太陽質量、プランク定数など)です。

畳み込み

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

統計

シグマクリッピングや外れ値の除去など、頑健な統計関数です。

インストール

# Reproducible install against the current stable release
uv pip install "astropy==7.2.0"

# Recommended optional dependencies for plotting and common workflows
uv pip install "astropy[recommended]==7.2.0"

# Full optional dependency set for broad astronomy workflows
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、requirements ファイルでは uv pip compile)を使って依存関係ツリー全体のバージョンを固定し、デプロイ前に解決されたバージョンを確認してください。

一般的なワークフロー

座標系間の変換
from astropy.coordinates import SkyCoord
import astropy.units as u

# Create coordinate
c = SkyCoord(ra='05h23m34.5s', dec='-69d45m22s', frame='icrs')

# Transform to galactic
c_gal = c.galactic
print(f"l={c_gal.l.deg}, b={c_gal.b.deg}")

# Transform to alt-az (requires time and location)
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

# Open FITS file
with fits.open('observation.fits') as hdul:
    # Display structure
    hdul.info()

    # Get image data and header
    data = hdul[1].data
    header = hdul[1].header

    # Access header values
    exptime = header['EXPTIME']
    filter_name = header['FILTER']

    # Analyze data
    mean = np.mean(data)
    median = np.median(data)
    print(f"Mean: {mean}, Median: {median}")
宇宙論的距離の計算
from astropy.cosmology import Planck18
import astropy.units as u
import numpy as np

# Calculate distances at z=1.5
z = 1.5
d_L = Planck18.luminosity_distance(z)
d_A = Planck18.angular_diameter_distance(z)

print(f"Luminosity distance: {d_L}")
print(f"Angular diameter distance: {d_A}")

# Age of universe at that redshift
age = Planck18.age(z)
print(f"Age at z={z}: {age.to(u.Gyr)}")

# Lookback time
t_lookback = Planck18.lookback_time(z)
print(f"Lookback time: {t_lookback.to(u.Gyr)}")
カタログのクロスマッチング
from astropy.table import Table
from astropy.coordinates import SkyCoord, match_coordinates_sky
import astropy.units as u

# Read catalogs
cat1 = Table.read('catalog1.fits')
cat2 = Table.read('catalog2.fits')

# Create coordinate objects
coords1 = SkyCoord(ra=cat1['RA']*u.degree, dec=cat1['DEC']*u.degree)
coords2 = SkyCoord(ra=cat2['RA']*u.degree, dec=cat2['DEC']*u.degree)

# Find matches
idx, sep, _ = coords1.match_to_catalog_sky(coords2)

# Filter by separation threshold
max_sep = 1 * u.arcsec
matches = sep < max_sep

# Create matched catalogs
cat1_matched = cat1[matches]
cat2_matched = cat2[idx[matches]]
print(f"Found {len(cat1_matched)} matches")

ベストプラクティス

  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 リリース後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 で最近削除された機能:(Bin)Table.update、_ExtensionHDU、_NonstandardExtHDU、CompImageHDU の tile_size 引数など、以前に非推奨となった古い FITS API。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、モデリング、可視化、定数、ユーティリティ

エージェントの操作手順

  1. 環境を確認します。 ライブラリのバージョン、単位、座標系、データ形式(FITS、CIF、HDF5、netCDF)を確認します。
  2. 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
  3. まず小規模に実行します。 小さなグリッド、領域、またはサブセットで実行し、物理的に妥当かどうかを確認します。
  4. 上記の手順と参考資料を使用して、タスク全体を実行します。
  5. 結果を検証します。 単位と次元の整合性、保存則または既知の限界、数値収束を確認します。
  6. 報告します。 実行内容(バージョン、コマンド、パラメーター)、確認した項目、未確定の点を明記します。
発生した状況対応
結果が既知の物理的限界に反する報告する前に、単位、境界条件、ソルバーの許容誤差を確認します。
インストール済みバージョンに、手順に記載された関数、フラグ、またはエンドポイントがないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応してユーザーに伝えます。API を捏造してはいけません。
必須の入力、識別子、またはパラメーターが曖昧ユーザーに確認するか、実行前に前提を明示します。

誠実性に関するルール

  • 結果、パラメーター、識別子、引用、統計情報を決して捏造しないでください。実行または検証できないことがあれば、率直に伝えてください。
  • 定量的な結果には、必ず不確実性と数値許容誤差を併記してください。
  • ここに記載されたバージョン固有の情報は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認してください。
  • 金銭が発生する、共有 GPU やクラウドのクォータを消費する、個人データや患者データを扱う、または取り消せない操作を行う前に、ユーザーに確認してください。

関連スキル

  • uncertainty-and-units:pint と uncertainties を使用して、科学計算における物理単位を追跡し、測定の不確実性を伝播させます。

コメント