Pythonによるデータ分析の教科書(その4)
4.ライブラリによる分析の実践
4.1 NumPy:科学技術計算に特化したパッケージ、多次元入れるのデータを効率よく処理
・配列:ndarray
array関数にPythonのリストを和ASUとndarrayオブジェクトが作られる
1次元配列:
ex.
import numpy as np
a = np.array([1, 2, 3])
type(a) → numpy.ndarray
a.shape → (3,)
2次元配列:
b = np.array([[1, 2, 3],[4, 5, 6]])
b.ahape → (2、3)
変形(reshape):
c1 = np.array([0, 1, 2, 3, 4, 5])
c2 = reshape((2,3))
c2
↓
array([[0, 1, 2],
[3,4, 5]])
c3 = c2.ravel() #2次元配列を1次元に変換
c3
↓
array([0, 1, 2, 3, 4, 5]) #参照(浅いコピー:ShallowCppy)
c4 = c2.flatten() # copy を返す(深いコピー:Deep Copy)
c4
↓
array([0, 1, 2, 3, 4, 5])
データ型:dtype()関数で確認
タイプ変換:
d= np.array([1, 2], dtype=np.int16)
d.astype(np.float16)
↓
array([ 1., 2.], dtype=float16)
インデックスとスライス:基本的には、リストと同様
b[:, 2] #3列目の列を取得
データ再代入:リストと同様再代入可能
浅いコピー(copy)
a = ([1, 2, 4])
a1 – a
a1
↓
array([1, 2, 4])
a1[1] = 5
a1
↓
array([1, 5, 4])
a
↓
array([1, 5, 4])
a2 = a,copy
a2
↓
array([1, 5, 4])
a2[0] = 6
a2
↓
array([6, 5, 4])
a
↓
array([1, 5, 4])
数列を返す:arrange
np.arrange(1, 11, 2)
↓
array([1, 3, 5, 7, 9])
乱数:
f = np.random.random((3, 2)) #行と列のタプルを渡す、0-1の範囲の乱数
f
↓
array([[ 0.81443564, 0.71894488],
[ 0.13377108, 0.94379981],
[ 0.20447256, 0.6701666 ]])
np.random.seed(123) #毎回同じ結果が出力される
np.random.rand(4, 2) #形状を渡す、0-1の範囲の乱数
np.random.randint(1, 10, 1(3, 3)) #1以上10未満の一つの整数
np.random.uniform(0.0, 5.0, size=(2, 3)) #第一引数以上かつ第二引数未満のランダムな小数値を、第三引数としてタプルで渡した行と列の2次元配列で生成(第一引数のデフォルトは0.0、第二引数のデフォルトは1.0、戻り値は小数値)
同じ要素の数列:要素数0.0 ⇒ np.zeros関数
要素数1.0 ⇒ np.ones関数
単位行列: np.eye関数
指定値で埋める: np.full関数
数値でない値で埋める:np.nan
ex. np.array([1, 2, np.nan]) → array([1, 2, nan])
均等割りデータ: np.linspace関数
要素間の差分: np.diff ⇒ 要素間の前後の差分を酉出力
連結:concatenate関数
ex. np. concatenate( [a, a1])
np. concatenate( [b, b1], axis=1) #列方向に連結
np.hstack([b, b1]) #上記と同様の効果
np.vstack([b, b1]) #行を増やす方向に連結
・分割
first, second = np.hsplit(b3, [2]) #列方向に分割、1つ目が2列、2つ目が残りの1列に分割
first1, second1 = np.vsplit(b3, [2]) #行方向に分割、1つ目が2行、2つ目が残りの1行に分割
・転置:行と列を入れ替える
b.T #行列bの行と列を入れ替え
・次元追加:
a[np.newais, :] #行方向を指定するスライシングにnp.newaisを指定し次元を1つ増やす
a[:, np.newais] #列方向を指定するスライシングにnp.newaisを指定し次元を1つ増やす
・グリッドデータの生成:meshgrid関数
xx, yy =np.meshgrid(m, n) #mとnを行方向と列方向に方眼上(グリッド)のデータを生成
第一戻り値であるxxに、第一引数のmを行方向に、第二引数nの配列の長さ分コピーされる。第二引数であるyyに、第二引数のnを烈方向に、第一引数mの長さ分コピーされる。
・NumPyno各機能
ユニバーサルファンクション:配列要素内のでーあを一括して変換
np.abs(b) #絶対値
np.sin(e) #sin関数
np.cos(e) #cos関数
np.log(a) #log関数(自然対数)
np.log10(a) #log関数(常用対数)
np.ep(a) #exp関数
・ブロードキャスト:配列の内部データに直接演算を実施
a + 10 #配列aに10を足し算
b * 2 #配列bに2を掛け算
ドット積:配列のドット積
np.(b, a)
b @ a #Python3.5以降で利用可能
判定・論理値
a > 1
np.count?nonzero(b > 0) #0でない要素数を出力(False は0)
np.sum #要素の値をすべて足し算する(Trueを1と扱う)
np.any(b > 0) #Trueが含まれているか銅貨を判定
np.all(b > 0) #すべてがTrueかどうかを判定
b == c #配列同士の比較
np.allclose(b, c, atol=10) #すべての要素が絶対誤差(atolキーワード引数で指定)の範囲かどうかを判定
参考にした書籍
タイトル:Pythontによるデータ分析の教科書
著者:寺田学、辻真吾、鈴木たかのり、福島真太朗
発行所:株式会社 翔泳社
以上