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 좌표 작업에 거리 포함
- 고유 운동 및 시선 속도 처리
- 온라인 데이터베이스에서 명명된 객체 쿼리
참조: references/coordinates.md에서 상세 좌표 프레임 설명, 변환, 관측자 종속 프레임(AltAz), 카탈로그 매칭 및 성능 팁을 확인하세요.
3. 우주론 계산 (astropy.cosmology)
표준 우주론 모델을 사용하여 우주론 계산을 수행합니다.
주요 작업:
- 내장 우주론 (Planck18, WMAP9 등) 사용
- 사용자 정의 우주론 모델 생성
- 거리 계산 (광도, 공변, 각지름)
- 나이 및 후방 시간 계산
- 모든 적색편이에서 허블 매개변수 결정
- 밀도 매개변수 및 부피 계산
- 역 계산 수행 (주어진 거리에 대한 z 찾기)
참조: 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에서 테이블 생성, 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
메타데이터, 불확실성, 마스킹 및 WCS 정보가 포함된 n차원 데이터셋을 위한 컨테이너입니다.
모델링
천문 데이터에 대한 수학적 모델을 생성하고 피팅하기 위한 프레임워크입니다.
시각화
적절한 늘이기 및 스케일링을 사용한 천문 이미지 표시 도구입니다.
상수
적절한 단위가 포함된 물리 및 천문 상수 (광속, 태양 질량, 플랑크 상수 등)입니다.
컨볼루션
평활화 및 필터링을 위한 이미지 처리 커널입니다.
통계
시그마 클리핑 및 이상치 제거를 포함한 강력한 통계 함수입니다.
설치
# astropy 설치
uv pip install astropy
# 전체 기능을 위한 선택적 종속성 포함
uv pip install astropy[all]
일반적인 워크플로우
좌표계 간 변환
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"고도={c_altaz.alt.deg}, 방위각={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)}개의 일치 항목 발견")
모범 사례
- 항상 단위 사용: 수량에 단위를 첨부하여 오류를 방지하고 차원 일관성 보장
- FITS 파일에는 컨텍스트 관리자 사용: 적절한 파일 닫기 보장
- 루프보다 배열 선호: 성능 향상을 위해 여러 좌표/시간을 배열로 처리
- 좌표 프레임 확인: 변환 전에 프레임 확인
- 적절한 우주론 사용: 분석에 맞는 우주론 모델 선택
- 누락된 데이터 처리: 누락된 값이 있는 테이블에 마스킹된 열 사용
- 시간 척도 지정: 정밀한 타이밍을 위해 시간 척도(UTC, TT, TDB)를 명시적으로 지정
- 단위 인식 테이블에 QTable 사용: 테이블 열에 단위가 있는 경우
- WCS 유효성 확인: 변환을 사용하기 전에 WCS 확인
- 자주 사용하는 값 캐싱: 비용이 많이 드는 계산(예: 우주론적 거리)은 캐시 가능
문서 및 리소스
- 공식 Astropy 문서: https://docs.astropy.org/en/stable/
- 튜토리얼: https://learn.astropy.org/
- GitHub: https://github.com/astropy/astropy
참조 파일
특정 모듈에 대한 자세한 정보:
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, 모델링, 시각화, 상수 및 유틸리티