sagantaf-佐賀んタフ-

なんでも自分の思ったこと、経験したことを書いて生きます。

AstropyでFITSデータを読み込んで表示させる方法

 
 
天文データの解析をやってみたい、と思い、
まずは天文画像をPythonに取り込み、表示させるにはどうするか、調べて実践してみた。
 
 

天文データはFITS形式

 
天文データはFITSというファイル形式で扱われることが多いらしい。
 
 
PythonでFITSファイルを扱うには、astropyというライブラリを使う。
 
 
最初に調べた時は、pyfits というライブラリが使われている例が多く見つかったので、インストールして、公式ページ(http://www.stsci.edu/institute/software_hardware/pyfits(英文))を読んでみたら、もう開発していないとのこと。。。
現在はastropyに移行されており、pyfitsは利用非推奨になっていた。
 
 
 
Astropyとmatplotlibを使って天文画像を表示
 
ということでまずはastropyをインストール
 
$ pip install astropy
 
 
FITSファイルのサンプルをネットで探して、sample.fitsという名前に変更しておいた。
 
そのダウンロードしたファイルがある場所で、インタラクティブシェルに入り、astropyを使ってみる。
 
 
以下のページがまとまっていたので、参考にしながら実践:
Astro : 解析によく使う python モジュール/関数
 
 
 
 
①まずはそれぞれ利用するライブラリをimportする
$ python3
>>> import astropy.io.fits as iofits
>>> import matplotlib.pyplot as plt
 
 
②ファイルをopen()で開く。
>>> list = iofits.open("sample.fits")
>>> list
[<astropy.io.fits.hdu.image.PrimaryHDU object at 0x10a4c6cc0>, <astropy.io.fits.hdu.table.TableHDU object at 0x10a4cdf98>]    
 
↑imageとtableがリスト形式で格納されていることがわかる。
 
 
③imageを使って表示させるため、リストの0番目の要素だけ取り出す。
>>> pic = list[0]
 
 
④FITSファイルにはヘッダ部とデータ部があるため、分けておく必要がある。
>>> header = pic.header
>>> data = pic.data
 print(header) とするとヘッダ部の中身を確認することができる。
 
 
⑤imshow()で表示させたい画像(data)を認識させ、show()で表示させる。
>>> plt.imshow(data)
<matplotlib.image.AxesImage object at 0x10a2fd9b0>
>>> plt.show()
 
これで画像が表示される。
 
 
 
APLpyライブラリで画像表示
 
matplotlibと同じくaplpyでも画像を表示することができる。 
 
 
まずはインストール。
$ pip install aplpy
 
 
①利用するライブラリをimport
>>> import astropy.io.fits as iofits
>>> import aplpy
 
 
②ファイルを開くところまでは同じ。 
>>> file = iofits.open("sample.fits") 
 
 
③FITSFigure()を使って画像として認識させ、show_colorscalse()でカラーで表示させることを指定する。
>>> pic = aplpy.FITSFigure(file)
>>> pic.show_colorscale()
>>> plt.show()
 
show_grayscale()を利用することで白黒で画像を表示させることも可能。
 
 
以上!
今回はただ天文データを表示させただけ…
 
実際に天文データ解析は、本やらネットやらを探して、やっていきたいところ。