Python 天文データ処理 - Astropy

序文

Astropy は、天文データ処理用の Python パッケージです。これには、さまざまな種類の天文データの処理、分析、視覚化に使用できる、一般的に使用される天文関数とツールが多数含まれています。Astropy の最新バージョンは v4.3 で、公式 Web サイトのアドレスは https://www.astropy.org/ です。

アストロピー

データセットをダウンロードする

Astropy を使用して実際のリンク データセットをダウンロードします。たとえば、次のコードを使用して、Sloan Digital Sky Survey (SDSS) から銀河データをダウンロードできます。

from astropy.utils.data import download_file
url = 'https://data.sdss.org/sas/dr16/sdss/spectro/redux/specObj-dr16.fits'
filename = download_file(url, cache=True,timeout=None)

これにより、specObj-dr16.fits というファイルがダウンロードされ、ローカル キャッシュ ディレクトリに配置されます。

一般的な方法

Astropy の一般的なメソッドとプロパティをいくつか紹介します。

  • astropy.coordinates: 天体座標の処理と変換に使用されます。

  • astropy.units:単位換算や物理量の計算に使用します。

  • astropy.io: さまざまな天文データ形式を読み書きするためのツール。

  • astropy.constants: さまざまな天文定数が含まれるモジュールです。

  • astropy.table: 表形式のデータを操作するためのツール。

  • astropy.visualization: 視覚化およびプロットのためのツール。

異なる天体座標系を変換する

たとえば、astropy.coowned モジュールを使用して、異なる天体座標系間で変換できます。以下は、赤道座標系を銀河座標系に変換する例です。

from astropy.coordinates import SkyCoord, Galactic
import astropy.units as u

# 定义一个赤道坐标系
ra = 10.68458 * u.deg
dec = 41.26917 * u.deg
c = SkyCoord(ra, dec, frame='icrs')

# 将赤道坐标系转换为银道坐标系
galactic = c.transform_to(Galactic)
print(galactic)

出力は次のとおりです。

<SkyCoord (Galactic): (l,b) in deg
    (134.42476787, -59.18030131)>

単位の変換と計算

astropy.units モジュールを単位の変換と計算に使用することもできます。光年をキロメートルに変換する例を次に示します。

from astropy import units as u

ly = 100 * u.lightyear
km = ly.to(u.km)
print(km)

出力は次のとおりです。

9.46073047e+14 km

上記は Astropy の基本的な使い方のほんの一部ですが、天体運動シミュレーション、スペクトル解析、データ可視化などの高度な機能も数多く備えています。天文学のデータ処理に興味がある場合、Astropy は非常に良い選択です。

Astropy は、天文データのより適切な処理と分析に役立ついくつかの非常に便利な機能とツールも提供します。よく使用される機能とツールをいくつか示します。

  • astropy.io.fits: FITS 形式の天文データ ファイルの読み書きに使用されます。
  • astropy.coordinates.match_coordinates_sky: 空のさまざまなオブジェクトを一致させるために使用されます。
  • astropy.cosmology: 宇宙の膨張率や暗黒エネルギーの密度などの宇宙論的パラメータの計算に使用されます。
  • astropy.convolution: 画像の畳み込みとフィルタリング操作に使用されます。
  • astropy.stats: 平均、中央値、標準偏差などの統計パラメータを計算するために使用されます。
  • astropy.time: 天文学的な時間と時間システムを扱う場合。

FITS形式で天文データを読み取る

たとえば、astropy.io.fits モジュールを使用して、FITS 形式の天文データ ファイルを読み取り、その中のデータとメタデータを取得できます。以下は、SDSS から銀河データを読み取る例です。

from astropy.io import fits

filename = 'specObj-dr16.fits'
hdulist = fits.open(filename)
data = hdulist[1].data
header = hdulist[1].header
hdulist.close()

print(data)
print(header)

これにより、データとメタデータ情報が出力されます。astropy.coowned.match_coowned_sky 関数を使用して、空のさまざまなオブジェクトを照合することもできます。以下は、2 つの天体のリストに一致する例です。

from astropy.coordinates import SkyCoord, match_coordinates_sky
import astropy.units as u

# 定义两个天体列表
ra1 = [10.68458, 11.23125, 13.03125] * u.deg
dec1 = [41.26917, 42.12347, 43.45678] * u.deg
c1 = SkyCoord(ra1, dec1)

ra2 = [12.54321, 10.12345, 14.98765] * u.deg
dec2 = [41.13579, 42.24680, 43.35791] * u.deg
c2 = SkyCoord(ra2, dec2)

# 在天空中匹配两个天体列表
idx, d2d, d3d = match_coordinates_sky(c1, c2)

print(idx)  # 匹配的索引
print(d2d)  # 天体之间的角距离
print(d3d)  # 天体之间的三维距离

出力は次のとおりです。

[1 0 2]
[1.82466754 deg, 0.18524718 deg, 2.27865541 deg]
[2.10955463 deg, 0.48536946 deg, 2.75010505 deg]

Astropy の利点は、天文データ処理用に特別に設計された Python パッケージであるため、天文学で一般的に使用される多くの関数とツールを提供し、さまざまな種類の天文データをより迅速かつ便利に処理および分析できることです。Astropy の利点は次のとおりです。

  • 天文定数: Astropy には、光速度、重力定数、太陽質量など、プログラムで簡単に使用できるさまざまな天文定数が含まれています。

  • 天体座標系変換: Astropy は、異なる天体座標系間で簡単に変換できる一連の機能とツールを提供し、赤道座標系、銀河座標系、地平線座標系などのさまざまな天体座標系をサポートします。 。

  • 単位変換と計算: Astropy は、物理量の便利な単位変換と計算のための一連の機能とツールを提供し、長さ、質量、時間、速度、角度などの複数の単位をサポートします。

  • データの読み取りと書き込み: Astropy は、FITS、VOTable、ASCII などのさまざまな天文データ形式の読み取りと書き込みをサポートしており、さまざまな種類の天文データを簡単に読み取り、処理できます。

  • データ視覚化: Astropy は、天体座標系、星図、スペクトログラムなどの投影など、天文データを簡単に視覚化し描画するための一連の機能とツールを提供します。

  • 天文学シミュレーション: Astropy は、天文学のさまざまな現象をより深く理解するのに役立つ、天体の動きや銀河の進化などをシミュレートできるいくつかの天文学シミュレーション ツールを提供します。

  • 天文学の統計分析: Astropy は、天文学のさまざまなデータをより深く理解するのに役立つ、平均、中央値、標準偏差などのさまざまな統計パラメーターを簡単に計算できるいくつかの統計分析ツールを提供します。

  • オープン ソース コード: Astropy はオープン ソースの Python パッケージです。誰でもコードを表示および変更でき、また独自のコードやツールを提供することもできるため、天文データ処理の開発に大きな助けとなります。

要約すると、Astropy は天文データ処理用の非常に優れた Python パッケージであり、さまざまな天文データを簡単に処理し、さまざまな天文解析やシミュレーションを実行できる豊富な機能とツールを提供します。天文学のデータ処理に興味がある場合、Astropy は非常に良い選択です。



Astropy で描かれた天体画像

天球座標系の投影図

import matplotlib.pyplot as plt
from astropy.coordinates import SkyCoord
import astropy.units as u

# ra = [10.68458, 11.23125, 13.03125, 12.54321, 10.12345, 14.98765] * u.deg
# dec = [41.26917, 42.12347, 43.45678, 41.13579, 42.24680, 43.35791] * u.deg
dec = data['PLUG_DEC']* u.deg
ra = data['PLUG_RA']* u.deg
c = SkyCoord(ra, dec)

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='mollweide')
ax.scatter(c.ra.wrap_at(180 * u.deg).radian, c.dec.radian, s=20, alpha=0.5)
plt.grid()
plt.show()

出力は次のとおりです。

ここに画像の説明を挿入

オリジナルの絵を描きます

Astropy の公式 Web サイトから馬頭星雲の FITS 画像をダウンロードする

from astropy.visualization import LogStretch
import matplotlib.pyplot as plt
from astropy.visualization import ImageNormalize, ZScaleInterval,AsinhStretch

url = r'http://data.astropy.org/tutorials/FITS-images/HorseHead.fits'
hdulist = fits.open(url)
data = hdulist[0].data
header = hdulist[0].header
plt.imshow(data, cmap='gray', origin='lower')
plt.colorbar()
plt.show()

出力は次のとおりです。
ここに画像の説明を挿入

astropy.visualization の ImageNormalize クラスを使用して画像を正規化します

norm = ImageNormalize(data, interval=ZScaleInterval(), stretch=AsinhStretch())
plt.imshow(data, cmap='gray', origin='lower', norm=norm)
plt.colorbar()
plt.show()

出力は次のとおりです。
ここに画像の説明を挿入

このコードは、ZScaleInterval() メソッドを使用して画像内の明るさの範囲を選択し、AsinhStretch() メソッドを使用して明るさを拡張します。最終的に描画されたイメージを以下に示します。

LogStretch() メソッドを使用して、画像を対数的に引き伸ばします。

from astropy.visualization import LogStretch

norm = ImageNormalize(data, interval=ZScaleInterval(), stretch=LogStretch())
plt.imshow(data, cmap='gray', origin='lower', norm=norm)
plt.colorbar()
plt.show()

出力結果:
ここに画像の説明を挿入

上記は、いくつかの一般的な天文画像の種類と、Astropy を使用して描画された例であり、天文データの視覚化における Astropy の機能を示しています。天文学のデータ処理と視覚化に興味がある場合、Astropy は非常に良い選択です。

参考文献

  1. Astropy公式サイト:https://www.astropy.org/
  2. Astropy ドキュメント:https://docs.astropy.org/en/stable/
  3. Morsset, C., & Flores-Fajardo, N. 2019、A&A、627、A23. (アストロピーを使用したスペクトル分析のケーススタディ)
  4. Robitaille, TP, et al. 2013, A&A, 558, A33. (Astropy を使用した天体座標系変換の例)

おすすめ

転載: blog.csdn.net/qq_20163065/article/details/129625463