(1).やったこと
【2-2】Numpyの基礎
(2).配列操作
⑥.最小、最大、合計、積上の計算
Numpyのarrayデータは、minメソッド等で、最小値や最大値を求められる。
cumsumは、積上(前から足していく)演算。
――――
最大値
print('Max:', data.max())
合計
print('Sum:', data.sum())
積み上げ
print('Cum:', data.cumsum())
積み上げ割合
print('Ratio:', data.sum() / data.sum())
――――
(3).乱数
乱数とは、規則性のないでたらめな数のこと。
データ分析においては、収集したデータをランダムに分離したり、ランダムな
値を加えてばらつきを出したいときに使う。
インポートの時に、下記のように記述すると、「np.random]と記述する代わり
に、「np.」と省略して「random」と略記できる。
――――
#略記のためのインポート
import numpy.random as random
――――
①.乱数のシード
乱数は全くのランダムな数ではなく、疑似乱数と呼ばれるもので、数式によ
ってランダムな値を作り出している。
そのランダムな値の初期値をシードといい、randamu.seedを使って指定でき
る。
――――
#シードの設定
random.seed(0)
――――
同じシードを指定したときは、何度実行しても同じ係数の乱数が得られる。
データ分析では全くのランダムな値が得られてしまうと解析結果が都度変わ
ってしまい、あとから検証できなくなる。
そのため、一貫性を担保するために、シードを設定することが多い。
②.乱数の発生
乱数は実はいろんな種類があり、Numpyでそれらを作成できる。
例えば、平均0、標準偏差1の正規分布の乱数を取得するにはrandom.randn
を使う。
――――
random.seed(0)
正規分布(平均0、分散1)の乱数を10個発生
rnd_data = random.randn(10)
print('乱数10個の配列:', rnd_data)
――――
③.データのランダムな抽出
データサイエンスで、与えられたデータからランダムな値を取り出すのは
よく行われる。
#統計でもよく行われたから、これはよくわかる。
このようなときは、random.choiceを使う。
1つ目の引数は捜査対象の配列、2つ目は取り出す数です。
オプションはreplaceで、Trueにするか、省略したときは取り出すときに
重複を許す。これを『復元抽出』という。
replaseをFalseにしたときは、データの重複を許さずに取り出す。これを
『非復元抽出』という。
――――
抽出対象データ
data = np.array([9, 2, 3, 4, 10, 6, 7, 8, 1, 5])
ランダム抽出(重複あり、復元抽出)
10個を抽出
print(random.choice(data, 10)
10個を抽出(重複なし、非復元抽出)
print(random.choice(data, 10, riplace = False)
――――
(4).行列
⓪.行列計算の方法。
まずは、行列の作成方法について。
arange関数は、指定した連続した整数を発生させる機能。
reshape関数は行列にする関数。
この2つの関数を使い、まずarange(9)として0~8の整数を発生させた後、
reshapeで3×3の行列に分割する。
――――
np.arange(9)
――――
array1 = np.arange(9).reshape(3,3)
print(array1)
――――
行列から行や列のみを抜き出したいときは「[行範囲:列範囲]」のように表記
する。
それぞれの範囲は「開始インデックス,終了インデックス」のようにカンマで区
切って指定する。
これらを省略したときは、「最初から」「最後まで」という意味になる。
例えば、次のように「[0,:]を指定すると、「行は1列目」「列は全て」という
意味になり、1行目のすべてを取り出せる。
なお、インデックスは0から始まるが、対象の行列は1から始まる点に注意。
――――
1行目かつ列は全て取り出し
array1[0,:]
――――
1列目だけが取り出されてるのがわかる。
――――
1列目かつ行は全て取り出し
array1[:,0]
――――
1行目だけが取り出されてるのがわかる。
①.行列の演算
まずは行列の掛け算について
array1とは別にarray2を設定して、この2つのarrayの行列の積を出す。
――――
array2 = np.arange[9,18).reshape(3,3)
print(array2)
――――
行列の積
np.dot(array1, array2)
――――
この時、dot関数を使うこと。
*を使うと、要素同士の掛け算になってしまう。
――――
要素同士の掛け算
array1 * array2
――――
②.要素が0や1の行列を作る。
データ分析では、要素がすべて0だったり1だったりの行列を作りたい時がある。
直接タイプしたり、for文で作るのは大変なので、それ用の構文がある。
「np.zeros」を指定するとすべての要素が0の行列が作れる。
オプションとしてdtypeがあり、これはデータ型を指定する(int64とか)
次のコードは、要素がすべて0(int649の2行3列の行列などをそれぞれ作成して
いる。
――――
全ての要素が0で、2行3列、データ型がint64の行列を作成
print(np.zeros((2,3), dtype = np.int64))
全ての要素が0で、2行3列、データ型がint64の行列を作成
print(np.ones((2,3), dtype = np.float64))
――――
【2-3】Scipyの基礎
Scipyは科学技術計算をするためのライブラリで、多様な数学処理ができる。
(線形代数の計算とか、フーリエ変換とか)
(1).Scipyのライブラリのインポート
Scipyにおける線形代数用のライブラリをインポートする。
すでにSipyをインポートしてるが、ここでは「as sp」としているので、
「sp.機能名」でScipyライブラリを使えるようになってる。
下記ではさらに、線形代数用のライブラリをlinalg、最適化計算(最小値)用の関数
をminimize_scalarのように、より短い名前で使えるようにします。
――――
線形代数用のライブラリ
import scipy.linalg as linalg
最適化計算(最小値)用の関数
from scipy.optimize import minimize_scalar
――――
①.行列計算
行列式を計算するにはdet関数を使う。
――――
matrix = np.array([[1,-1,-1], [-1,1,-1],[-1,-1,1]])
行列式
print('行列式')
print(linalg.det(matrix))
――――
(2).気づいたこと・学んだこと・疑問
・行列計算について
線形代数の1分野。
ざっくばらんにメモをしておくと、縦と横の列をすべて計算し足し合わせた数。
それを一つずつずらしてやり、その答えをはめ込んでる。
その行列の重みについてを語っている。