astropy은(는) 무엇을 하나요?
개요
Astropy는 천문학을 위한 핵심 Python 패키지로, 천문 연구 및 데이터 분석에 필수적인 기능을 제공합니다. astropy는 좌표 변환, 단위 및 수량 계산, FITS 파일 작업, 우주론 계산, 정밀 시간 처리, 테이블 데이터 조작, 천문 이미지 처리 등에 사용됩니다.
이 스킬을 사용해야 하는 경우
다음과 같은 작업이 포함될 때 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
# 단위 및 수량
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 좌표 연산을 위한 거리 포함
- 고유 운동 및 시선 속도 처리
- 온라인 데이터베이스에서 명명된 객체 조회
참조: 상세 좌표 프레임 설명, 변환, 관측자 의존적 프레임(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 Units)에 접근
- 헤더 읽기 및 수정 (키워드, 주석, 이력)
- 이미지 데이터 작업 (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차원 데이터셋을 위한 컨테이너.
모델링
천문 데이터에 수학적 모델을 생성하고 피팅하기 위한 프레임워크.
시각화
적절한 스트레칭 및 스케일링을 사용한 천문 이미지 표시 도구.
상수
적절한 단위가 있는 물리 및 천문 상수 (광속, 태양 질량, 플랑크 상수 등).
컨볼루션
스무딩 및 필터링을 위한 이미지 처리 커널.
통계
시그마 클리핑 및 이상치 제거를 포함한 강건한 통계 함수.
설치
# 현재 안정 버전에 대한 재현 가능한 설치
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] extras는 전이 종속성(matplotlib, scipy 등)을 고정되지 않은 버전으로 가져옵니다. 재현 가능한 프로덕션 환경을 위해 lockfile(프로젝트의 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: {mean}, Median: {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를 확인하세요.
- 자주 사용하는 값 캐싱: 비용이 많이 드는 계산(예: 우주론적 거리)은 캐싱할 수 있습니다.
- 네트워크 접근에 대해 명시적으로 확인:
SkyCoord.from_name(),EarthLocation.of_site(refresh_cache=True),EarthLocation.of_address(),download_file(), 원격 FITS 읽기 및 일부 IERS 시간/좌표 변환은 외부 서비스에 접속하거나 로컬 캐시를 업데이트할 수 있습니다. 민감한 대상 이름, 주소, URL 또는 독점 파일 위치를 타사 서비스로 보내지 마십시오. 잠재적으로 민감한 대상이나 데이터 위치로 작업할 때는 이러한 네트워크 호출을 수행하기 전에 사용자에게 확인하세요. - 재현성을 위해 고정: 공유 환경에서는
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하위 모듈 shim(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는 더 이상 사용되지 않습니다. 새 예제에서는 이러한 레거시 패턴을 피하세요. - 권장 선택적 extras는 일반적인 플로팅/과학 종속성을 위한
recommended이며, 광범위한 선택적 기능 세트가 필요한 경우에만all을 사용하세요.
문서 및 리소스
- 공식 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- 테이블 생성, 입출력 및 작업references/time.md- 시간 형식, 척도 및 계산references/wcs_and_other_modules.md- WCS, NDData, 모델링, 시각화, 상수 및 유틸리티
과학 에이전트 스킬 인용
이 스킬은 Scientific Agent Skills 컬렉션의 일부입니다.