はじめに
これから、Pythonを使ったデータ分析の基礎についてまとめていきます。
まず初めは、Pythonの代表的な数値計算ライブラリであるNumpyです。
多次元配列や行列を簡単に操作できるため、機械学習だけでなく様々な分野で活用されています。
Numpyのインポート
下記でNumpyのライブラリをnpとしてインポートします。
以降はnumpyの代わりにnpと記述することで、numpyのメソッドを使用できるようになります。
import numpy as np
基本的な配列の生成
numpyを用いた配列の作成にはnp.arrayメソッドを用います。()の中には配列の要素を引数として記述します。
np.array(1)
# array(1)
np.array([1, 2, 3])
# array([1, 2, 3])
np.array([[1, 2], [3, 4], [5, 6]])
# array([[1, 2],
# [3, 4],
# [5, 6]])
リスト・配列・numpy.ndarrayの違い
Pythonにおける配列の使い分けに関しては、こちらが参考になります。
numpy.ndarrayは、同じ型のみを要素に格納する必要がありますが、様々な数値計算が可能なメソッドを使用することができます。
list_A = ['apple', 2, 'lemon', 3.5]
ndarray = np.array([2, 3, 4, 5])
print(type(list_A))
print(type(ndarray))
# <class 'list'>
# <class 'numpy.ndarray'>
形状の確認
shape属性を参照することで、配列の形状を確認できます。
array_A = np.array([1, 2, 3])
array_A.shape
# (3,)
array_B = np.array([[1, 2], [3, 4], [5, 6]])
array_B.shape
# (3, 2)
次元数・データ型・要素数の確認
ndarrayの次元数、データ型、要素数は下記のメソッドで確認することが可能です。
array_B.ndim
# 2
array_B.dtype
# dtype('int32')
array_B.size
# 6
形状の変換
形状の変換にはreshapeメソッドを使います。
特に列ベクトルへの変換は、重要です。下記における-1は、配列の要素数である6と同じ意味となります。
array = np.array([[1, 2], [3, 4], [5, 6]])
array
# array([[1, 2],
# [3, 4],
# [5, 6]])
array.reshape(2, 3)
# array([[1, 2, 3],
# [4, 5, 6]])
array.reshape(-1, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5],
# [6]])
配列の一部選択と抽出
配列の中から一部を選択する場面は多く存在します。特にスライス” : “の用法に関する理解が重要です。
array = np.array([[1, 2],
[3, 4],
[5, 6]])
array
# array([[1, 2],
# [3, 4],
# [5, 6]])
# 1行目を抽出
array[0]
# array([1, 2])
# 2行目以降を抽出
array[1:]
# array([[3, 4],
# [5, 6]])
列ごとの要素を抜き出す
# 2列目を抽出
array[:, 1]
# array([2, 4, 6])
三角関数
numpyでは、三角関数の計算も容易に行うことが可能です。
np.pi
# 3.141592653589793
array = np.array([[0, np.pi/2], [-np.pi/2, np.pi]])
array
# array([[ 0. , 1.57079633],
# [-1.57079633, 3.14159265]])
np.sin(array)
# array([[ 0.0000000e+00, 1.0000000e+00],
# [-1.0000000e+00, 1.2246468e-16]])
np.cos(array)
# array([[ 1.000000e+00, 6.123234e-17],
# [ 6.123234e-17, -1.000000e+00]])
# ラジアンから角度に変換
array_deg = np.rad2deg(array)
array_deg
# array([[ 0., 90.],
# [-90., 180.]])
# 角度からラジアンに変換
array_rad = np.deg2rad(array_deg)
array_rad
# array([[ 0. , 1.57079633],
# [-1.57079633, 3.14159265]])
条件による選択
下記のように、条件式を記述することで、TrueかFalseで表されるBool型の結果を得ることができます。
これによって、条件にあった値を選択することも可能です。
array = np.array([[1, 2], [3, 4], [5, 6]])
array
# array([[1, 2],
# [3, 4],
# [5, 6]])
array > 4
# array([[False, False],
# [False, False],
# [ True, True]])
array[array > 4]
# array([5, 6])
ある条件を満たす要素を置き換えるときは、whereメソッドを使うと便利です。
引数の内容は( 条件、 置き換える値、 条件を満たさない要素の値 )です。
# 0.0以上、1.0未満の乱数を乱数を20個生成
test = np.random.rand(20)
test
# array([0.86340343, 0.24434387, 0.04961183, 0.68203389, 0.56948935,
# 0.1174531 , 0.00220156, 0.24731936, 0.92980599, 0.61403651,
# 0.42284744, 0.18860281, 0.38268615, 0.85486854, 0.74753164,
# 0.29520657, 0.57888868, 0.45987332, 0.87003017, 0.28654137])
test = np.where(test < 0.5, 0, 1)
test
# array([1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0])
# 条件y<0.5を満たす要素を0に、満たさない要素を1に置き換え
X = np.arange(20).reshape(-1, 1)
y = np.random.rand(20)
y = np.where(y < 0.5, 0, 1).reshape(-1, 1)
X[:][y==1]
# array([ 2, 3, 6, 7, 10, 11, 13, 14, 15, 16, 17, 18])
次回以降も、Pythonの基礎知識についてまとめていきます。