若手のための研究補助ツール紹介
python package
プログラム言語という文脈において、pythonは近年急激にその存在感を増して来ています。その理由の一つに、パッケージの導入によって多種多様な演算が容易に行えるようになる点が挙げられます。
このページでは、科学技術計算で頻繁に用いられるnumpyやデータ分析を補助するpandasを筆頭にして、天文分野の研究に頻繁に使用されるpython packageの紹介をします。
Licensed by the Python Software Foundation
パッケージの導入方法
パッケージの導入及びバージョン管理にはAnacondaの使用が便利です。
-
パッケージをインストールする際には、コマンドラインで
と入力することでパッケージnumpyをインストールすることができます。
-
既にインストールされているパッケージを確認するには次のコマンドを入力します。
-
また、パッケージのアンインストールは次のコマンドで行います。
Anacondaのほかにはpipコマンドを使用する方法もあります。ただし、使用しているpythonのバージョンによってコマンドが異なるため注意が必要です。
pipにもAnacondaと同様にインストール済みのパッケージの確認のためのlistコマンドやアンインストールのためのuninstallコマンド、パッケージのアップデートのためのupgradeコマンドなどが用意されています。
パッケージの使用方法
例えばnumpy、pandasというパッケージを使用する場合には、
とすることでこれらのパッケージが使用できるようになります。
Numpyはpythonの配列計算用ライブラリです。
一般にpythonはfor文の計算に大変時間を要することが知られています。この弱点を克服してくれるのがこのnumpyです。
Copyright © 2005 NumPy Developers
例として、5oo万の要素を持った配列a、bの各要素の和を計算する操作を考えましょう。
左に示されている計算のうち、上はfor文を用いています。これに対して、下はnumpy配列を用いて行われています。
for文によって行った計算では2.51(秒)を要しているのに対して、numpy配列で行った計算は0.02(秒)しか要していないことが分かります。
このほかの機能として、numpy配列の統計量を計算するための関数も用意されています。例えば、
-
numpy.sum(): 配列の全要素の合計値
-
numpy.max(): 配列要素の最大値
-
numpy.std(): 配列の標準偏差
などが挙げられます。これに加えて行列の定義や操作も行う事ができます。
以上で見てきたように、pythonにおける数値計算にはnumpyが必須であるといえます。
pythonによるデータ分析において必須となるパッケージがpandasです。
©Michael Droettboom
pandasには、データの読み込み、表示、プロットなどデータ分析を補助する関数が多数用意されています。Pandasにおけるデータ分析は、DataFrameというオブジェクトを使用します。DaraFrameを用いることでデータの削減等の操作も簡単に行うことができます。
例). VLA-COSMOS 3GHz Large project (Smolcic et al. 2017)のカタログデータに対してpandasのdescribe()メソッドを用いて、データの各列の要素数・値の平均・最小値・最大値及び最大値の75%、50%、25%の値を表示させてみます。
これによって、データの質を簡単に捉えることができるようになります。
Scipyは数値計算に特化したパッケージです。
Scipyによって行うことができる計算で代表的なものは
-
scipy.integrate:積分
-
scipy.special:特殊関数
-
scipy.fftpack:高速フーリエ変換
-
scipy.interpolate:補間
-
scipy.stats:確率分布の取り扱い
-
scipy.optimize:フィッティング
が挙げられます。Scipyに用意されている関数は大変に多く、宇宙物理学の研究にも役に立ちます。
Scipyによる微分方程式数値計算の例として、簡単な一次元輻射輸送方程式
を解く問題を考えましょう。この方程式は熱平衡、吸収係数一定のもとで解析解
を持ちます。この式とScipyで数値的に得られた結果との比較を行います。
Scipyに定義されている関数のうち、ここではintegrate.odeint()を使用します。微分方程式の左辺を関数として定義して、初期条件を設定することで微分方程式の解を得ることができます。実効的な計算は一行で行うことができるのも利点です。
黒の実線が解析解、青の点が微分方程式をscipy.integrate.odeintによって得られた数値解です。
Astropyはpythonを用いて宇宙物理学を行う際に必ず必要になるといっても過言ではないパッケージです。
Copyright (c) 2011-2017, Astropy Developers
ここではastropy中の数あるモジュールのうち一部を紹介します。
astropy.io.fits:
天文分野でよく用いられるファイル形式であるfitsファイルの読み込み・書き込み等の操作を行うことができるようになるモジュール。
astropy.units:
単位の定義や変換を行うためのモジュール。そのほかにも太陽質量や光速等の定数も取得することが可能。
astropy.cordinates:
座標系の取り扱いのためのモジュール。銀経・銀緯から赤経・赤緯への変換などが可能。
astropy.cosmology:
宇宙論計算に必要なモジュール。例えば、
-
import (cosmology model)から、Planck13やWMAP7など特定の宇宙論モデルにおける宇宙論パラメータの呼び出しを行うことが可能。
-
import FLRWから共動距離や光度距離、ルックバックタイムなどの量を赤方偏移についての関数として呼び出すことが可能。
seaborn
seabornはmatplotlibと共に、見た目が綺麗な図や複雑な図をプロットすることのできるpythonの描画ツールです。
例として公式のサイトに示されているseabornの機能のうち以下の二つを紹介します。
-
周辺分布+線形回帰 (左図)
-
二変数についての散布図に対して、線形フィット及び各変数についてのヒストグラム
-
-
カーネル密度分布 (右図)
-
複数のクラスターについて、各カーネルについて分離した等高線
-
TensorFlow, the TensorFlow logo and any related marks are trademarks of Google Inc.
The scikit-learn developers
TensorFlow、scikit-learnは、pythonの機械学習用のモジュールです。機械学習は、データの解析からパターンを抽出し、新たな入力に対する予測を与えるアルゴリズムの総称です。
宇宙物理分野においても、近年様々な分野で活発に機械学習を応用した研究がなされるような時代になってきています。
機械学習の手法は、ニューラルネットワーク (NNN)、サポートベクトルマシン (SVM)、決定木学習などが挙げられますがそのほかにも多数の手法が考案されています。これらは扱うデータの性質によって適切な手法が異なるため、これらの使い分けが肝要です。
-
TesorFlow
-
TensorFlowはGoogle社によって開発されている機械学習用のオープンソースライブラリです。
-
Tesorflow中のTensorBoardと呼ばれる機能を用いるとニューラルネットワークにおける入力層・隠し層や出力層などの可視化を行ってくれるため大変に便利です。
-
-
scikit-learn
-
scikit-learnもTensorFlowと同様にオープンソースのライブラリです。
-
クラス分類問題・回帰問題・次元削減など機械学習を用いた問題に対し
-
クラス分類問題:サポートベクトルマシン(SVM)、Nearest Neighbors、random forest
-
回帰問題:線型回帰、LASSO、リッジ回帰
-
次元削減:主成分分析(PCA)
-
-
などの多様なアルゴリズムが用意されています。
pythonにはこれら以外にも機械学習用のパッケージが用意されています。これまでに挙げたものにも通じて言えることなのですが、便利である反面操作がブラックボックスとなってしまいやすいという欠点を持ちます。