はじめに
ケモインフォマティクスで学ぶPythonのクラスに続き、リピドミクス(脂質の網羅解析)を題材として、Pythonの代表的なライブラリの一つである「NumPy」について解説していきます。
ケモインフォマティクスの実践例を中心に説明していきますので、基本を確認したいという人は以下の記事を読んでからこの記事を読んでみてください。
NumPyを用いた基本的な演算
NumPyを使うことで、ベクトルや行列演算を高速で行うことができます。
まず、import ライブラリ名
でライブラリを読み込むことができます。
さらに、as 略号
をつけることで、以降はここで書いた略号でライブラリを呼び出す(指し示す)ことができます。
NumPyの場合は、慣習的にnp
とすることが多いです。
import numpy as np
masses = np.array([12, 1.00783, 15.99491]) # 炭素、水素、酸素原子の精密質量を格納したndarray
numbers = np.array([16, 32, 2]) # パルミチン酸の炭素、水素、酸素原子の数
print(masses * numbers) # 元素ごとに精密質量を計算
print(sum((masses * numbers))) # パルミチン酸の精密質量
上のように、np.array(リスト)
とすることで、複数の要素を持つベクトルを作成することができます。
四則演算をすると、要素ごとに演算が行われます。
また、sum
を使うことで、全ての要素の合計値を求めることができます。
リストとの違い
np.array(リスト)
で作成されるベクトルは、リストによく似ていますが、データ型はlist
ではなく、numpy.ndarray
になります。
numpy.ndarray
どうしを掛け算すると、各要素を掛けたnumpy.ndarray
が返されますが、list
どうしを掛け算すると、TypeError
となり演算ができません。
import numpy as np
masses_ndarray = np.array([12, 1.00783, 15.99491])
print(type(masses_ndarray)) # numpy.ndarray
masses_list = [12, 1.00783, 15.99491]
print(type(masses_list)) # list
print(list(masses_ndarray)) # [12, 1.00783, 15.99491]
numbers_list = [16, 32, 2]
# print(masses_list * numbers_list) # TypeError
応用:原子量の計算
次に、原子およびその同位体の精密質量と天然同位体存在比をもとに、原子量を求めることを考えます。
import numpy as np
exact_mass_H = np.array([1.00783, 2.01410]) # 同位体の精密質量
isotope_ratio_H = np.array([0.99989, 0.00011]) # 同位体の天然存在比
molecular_weight_H = sum(exact_mass_H * isotope_ratio_H) # 原子量を計算
print(molecular_weight_H) # 水素の原子量
応用:複数の化合物の精密質量の計算
最後に、複数の脂肪酸分子種の精密質量を求めてみます。
import numpy as np
numbers = np.array([[16, 32, 2], [18, 36, 2], [18, 34, 2]]) # パルミチン酸、ステアリン酸、オレイン酸の元素組成
print(masses * numbers) # 各分子種の各元素の精密質量を計算
print(np.sum(masses * numbers, axis=1)) # 各分子種の精密質量を計算
まとめ
ここでは、NumPyについて、ケモインフォマティクスで使える実践的な知識を中心に解説しました。
もう一度要点をおさらいしておきましょう。
- NumPyを使うことで、ベクトルの要素どうしの演算が簡単に行えます。
- 原子量や分子量、精密質量の計算に使えます。
続いて、Pandasについて以下の記事で解説しています。