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によるデータ分析の教科書
著者:寺田学、辻真吾、鈴木たかのり、福島真太朗
発行所:株式会社 翔泳社

以上

 

 

 

 

 

 

 

 

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください