코드의 결과물
**이 글은 제가 처음 astropy에 입문하는 과정을 담은 글로, 제가 적은 코드는 모두 아래 티스토리에서 온 것임을 밝힙니다.
파이썬을 이용하여 허셜 우주망원경의 적외선 관측 데이터 분석하기
오늘 파이썬 포스팅은 그동안 써 왔던 내용 중 가장 내용이 어렵지 않을까 싶습니다. 그럼에도 궂이 이 내용을 올리는 것은 실제 학생들과 해 보니 꾀 신기해 하며 열심히 따라오려는 모습에 생
kalchi09.tistory.com
뭘 공부해 볼까 하다가 이번에야말로 astropy를 배워 볼 때라고 생각하여, 앞으로 내내 관련 계시물을 올릴 예정입니다.
오늘 글은 파이썬을 엡실론만큼 아는 자가 작성하였기 때문에 중간중간에 뻘짓이 많습니다. 그러나 이런 것들 또한 결국 다 배움의 한 과정이라고 생각하고 기록해 둡니다.
이번 글은 처음 astropy를 사용하기 때문에 자료도 많이 참고하고 조금 미숙하지만, 다음 글 부터는 좀 더 깊게 공부해 오겠습니다!!
주제
오늘 제가 포스팅 하는 것은 'astropy를 이용하여 IC434의 적외선 관측 데이터 분석하기' 입니다.
사용한 파일은 아래 파일입니다.
** astropy란? **
Astropy is a collection of software packages written in the Python programming language and designed for use in astronomy. - Wikipedia -
astropy란 천문학을 위해서 만들어져, 이와 관련된 작업을 할 때 사용되는 파이썬 소프트웨어 패키지를 말합니다.
** IC434란? **
멋있어 보이라고 일부러 영어로 적었는데, 사실 IC434는 우리가 교과서에서 많이 봤던 말머리성운입니다.
일단 astropy를 사용하기 위해서는 anaconda를 사용하거나, cmd에 인스톨하는 방법이 있습니다.
저는 처음엔 anaconda가 astropy가 이미 있다고 하여 anaconda로 작업을 하려고 하였는데요. 이 과정에서 조금 많이 문제가 있었습니다. 한 3시간 30분 정도를 이걸로 날린 것 같아요...
저는 덕분에 파이썬의 파일 위치를 따서(where python) 고급 시스템 설정에 있는 환경 변수에 들어가 시스템 변수의 Path에 추가하여 직접 경로를 뚫는 방법을 배우게 되었습니다....
그러나 어디서 문제가 생겼는지 아무리 해도 알지 못하겠어서 결국 anaconda로는 import 한 번 못 해보고 끝냈습니다.
결국 제가 선택한 방법은 파이썬을 다운로드 받고 이를 이용해서 진행하는 것이었는데요.
이 길이 맞았습니다. 결국 성공했습니다. 이게 더 돌아가는 길처럼 보였는데 역시 정도는 정도더라고요.
MY CODE
import numpy as np
import matplotlib.pyplot as plt
from astropy.wcs import WCS
from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename
filename = get_pkg_data_filename('C:\\Users\\user\\Downloads\\IC434.fits')
hdu = fits.open(filename)[1]
wcs = WCS(hdu.header)
fif = plt.figure(figsize=(18, 12))
plt.subplot(projection=wcs)
plt.grid(color='white', ls='dotted')
bar=plt.imshow(hdu.data, origin='lower', cmap=plt.cm.gist_heat, vmin=0, vmax=2000)
plt.colorbar(bar, label='Herschel 250$mu$m (MJy/sr)')
plt.xlabel('RA')
plt.ylabel('Dec')
levellinter=np.linspace(0, 850, 3)
plt.contour(hdu.data, linewidths=2, colors='white', linestyles="--", levels=levellinter)
plt.savefig('C:\\Users\\user\\Downloads\\IC434-2.png', bbox_inches='tight', pad_inches=0.1, dpi=300)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from astropy.wcs import WCS
from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename
#numpy 선언
#컬러맵을 그리기 위해 불러옵니다.
#관측 좌표계를 불러옵니다.
#fits 파일을 읽습니다.
#fits 파일을 불러옵니다.
filename = get_pkg_data_filename('C:\\Users\\user\\Downloads\\IC434.fits')
hdu = fits.open(filename)[1]
#fits 파일을 읽기 위한 기본적인 코드
#2번째 줄에서 [1]을 쓴 이유는, fits파일을 보면 보통 [0]에는 헤더 데이터가, [1]에는 관측 데이터가 저장되어있다고 합니다. 지금 제가 사용해야 하는 것은 관측 데이터이기 때문에, [1]을 적어줍니다. 그러나 어떤 자료들은 꼭 [1]에 관측 데이터가 담겨 있는 것이 아니라서 파일을 한 번 열어서 확인하는 작업이 필요할 것이라고 생각합니다.
wcs = WCS(hdu.header)
fif = plt.figure(figsize=(18, 12))
plt.subplot(projection=wcs)
plt.grid(color='white', ls='dotted')
#fits 파일에 들어있는 정보는, 각 픽셀별 빛의 세기와 좌표가 저장되어 있다고 합니다. WCS는 world coordinate system의 약자로, 적경(RA)와 적위(Dec)의 픽셀별 좌표가 모두 여기 있습니다. 먼저 좌표정보를 불러오기 위해 wcs=WCS(hdu.header)라고 입력합니다.
#두번째 줄은 그래프의 크기입니다.
#plt.subplot(projection=wcs): 가로세로 2개의 그래프를 그릴 때 많이 사용, projection으로 좌표인 wcs를 지정.(wcs를 사용함으로써 matplotlib의 기본적인 좌표 사용방식이 아니라, fits파일의 좌표 형식을 따르겠다는 의미.)
여기까지 코드를 적은 후에 plt.show( )를 하면
이런 식의 격자무늬 평면이 그려지게 됩니다
*따로 x축과 y축을 지정하지 않았어도, 기본 좌표정보로 wcs를 사용했기 때문에 가로세로 출력
bar=plt.imshow(hdu.data, origin='lower', cmap=plt.cm.gist_heat, vmin=0, vmax=2000)
plt.colorbar(bar, label='Herschel 250$mu$m (MJy/sr)')
#픽셀별 빛의 세기를 색상 지도로 표현함. imshow: 픽셀별 색상 지정, camp: 표현할 색상의 유형은, vmin과 vmax:각 색상의 최댓값과 최솟값. 색이 너무 어둡게 나와서 vmax를 조정하였다.
#plt.colorbar는 색상이 뭐뭐 있는지 보여준다.
슬슬 말머리 성운이 보이기 시작하죠?
plt.xlabel('RA')
plt.ylabel('Dec')
levellinter=np.linspace(0, 850, 3)
plt.contour(hdu.data, linewidths=2, colors='white', linestyles="--", levels=levellinter) plt.savefig('C:\\Users\\user\\Downloads\\IC434-2.png', bbox_inches='tight', pad_inches=0.1, dpi=300)
plt.show()
#눈금 색 흰색으로 변경, 점선 그리기
#제목, x, y방향 정하고 사진으로 저장
#사진으로 저장 할 때 본인의 컴퓨터에 저장되는 것이기 때문에, 본인의 컴퓨터에 맞는 파일의 위치를 적어주셔야 합니다.
완성한 결과는 이와 같습니다.
느낀점
집 가서 무조건 다른 걸로 돌려보고 싶다. 우여곡절이 많았으나 그래도 그림이 잘 나오니까 정말 뿌듯하다. 다른 데이터들도 받아서 구현해 봐야겠어요. 원래 글에서도 차근차근 잘 설명이 되어 있으니 다들 심심할 때 한 번씩 astropy를 공부해 보시는 것도 좋을 것 같아요. 화이팅!!
'정보 과학융합탐구' 카테고리의 다른 글
Famous Scientists by Balenciaga (발렌시아가 밈 패러디) (2) | 2024.08.12 |
---|---|
경사하강법 구현하기 (0) | 2023.07.04 |
최소제곱법 구현하기 (0) | 2023.07.04 |
9박 7일간의 차원여행 후기 (1) | 2023.06.01 |
python을 이용하여 말머리성운의 fits파일 구현하기 (0) | 2023.05.19 |