天文データの解析をやってみたい、と思い、
まずは天文画像を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
>>> 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>]
>>> 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
>>> data = pic.data
print(header) とするとヘッダ部の中身を確認することができる。
⑤imshow()で表示させたい画像(data)を認識させ、show()で表示させる。
>>> plt.imshow(data)
<matplotlib.image.AxesImage object at 0x10a2fd9b0>
>>> plt.show()
<matplotlib.image.AxesImage object at 0x10a2fd9b0>
>>> plt.show()
これで画像が表示される。
APLpyライブラリで画像表示
matplotlibと同じくaplpyでも画像を表示することができる。
まずはインストール。
$ pip install aplpy
①利用するライブラリをimport
>>> import astropy.io.fits as iofits
>>> import aplpy
>>> import aplpy
②ファイルを開くところまでは同じ。
>>> file = iofits.open("sample.fits")
③FITSFigure()を使って画像として認識させ、show_colorscalse()でカラーで表示させることを指定する。
>>> pic = aplpy.FITSFigure(file)
>>> pic.show_colorscale()
>>> plt.show()
>>> pic.show_colorscale()
>>> plt.show()
show_grayscale()を利用することで白黒で画像を表示させることも可能。
以上!
今回はただ天文データを表示させただけ…
実際に天文データ解析は、本やらネットやらを探して、やっていきたいところ。