NumPyは高速多次元オブジェクト、で機械学習をする際にはさけて通れません。Pandasとの違いが判らないと言われますが、多次元的にできるのがNumpyと覚えておいてもらえればいいと思います。いずれにしても始めて行きましょう。
目次
Numpyを覚えたい(定義する配列について)
Numpyには便利な機能がいろいろそろっていますが、Pythonの中のライブラリとしてNumpyが存在します。下記がPythonを含めたライブラリの構成となっています。
リスト | list | 基本の構造、異なるデータ種類も入れられる |
タプル | tuple | listと同種類だが変更が付加 |
辞書 | dic | keyとvalueが組み合わさったデータの集合 順序は持たない |
配列 | ndarray | Numpyが扱うデータ構造、数値のみを要素に持つことが多い 数値以外も混ぜる場合はPandasを使用したほうがよい |
Numpy配列をつくりたい
配列(array)を作る関数の紹介
リストから配列を作る np.array([1,2,3,4])
数値の範囲を指定して配列を作る np.arrange([1,5])
作成した配列は1次関数となります。
import numpy as np
array1 = np.array([1,2,3,4,5,6,7,8])
array2 = np.arrange([1,9])
結果は一緒になるはずです。
Pythonあるあるですがarrangeは最初の数字は入りますが、最後の数字は入りません。
2次関数に変える場合はresyapeメソッドを使用します。
※メソッドは別途この章で詳細は紹介します
array_change = array1.reshape(4,2)で2行4列の配列に変わります。
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
となると思います。
ちなみに、この時のデータ型はtype関数を使って調べることができます。
type(array1)で調べてみてください。変数のデータ型ははarray1.dtypeで調べます。
ndarrayプロパティを取り出したい
プロパティ(基本)を知りたい
ndarrayのプロパティは
array1.ndim のように「オブジェクト.プロパティ名」で取り出すことができます。
プロパティ | 説明 |
ndim | 次元数 |
shape | 行列数 |
dtype | データ型 |
また、転置行列はTで取り出すことができます。
下記でarray_change1とarray_change2は同じになります。
これは知っておくと便利ですよ。
import numpy as np
array1 = np.array([1,2,3,4,5,6,7,8])
array_change = array1.shape([4,2])
array_change1 = array_change.shape([2,4])
array_change2 = array_change.T
プロパティ(応用)を知りたい
これはめったに使用しないかと思いますが紹介しておきますね。
data | メモリビューオブジェクト |
flags | メモリレイアウトに関する情報 |
size | 全要素数 |
itemsize | 要素のデータサイズ |
nbytes | 全データのサイズ |
ndarrayメソッド一覧
メソッド(基本)を知りたい
ndarrayの関数は
array1.mean のように「オブジェクト.関数()」で実行することができます。
メソッド(関数) | 説明 |
sum() | 配列の和を指定された軸方向に計算し結果の配列を返します |
mean() | 配列全要素の平均 |
std() | 配列全要素の標準偏差 |
var() | 配列全要素の分散 |
min() | 配列全要素の最小値 |
max() | 配列全要素の最大値 |
argmin() | 最小の要素のインデックス |
argmax() | 最大の要素のインデックス |
このようになっているので活用していきましょう。
メソッド(応用)を知りたい
上記のメソッドを応用的に使用する方法を紹介しておきます。
メソッドを行,列に指定することができます。
import numpy as np
array1 = np.array([1,2,3,4,5,6,7,8])
array_change = array1.shape([4,2])
sum1 = array_change.sum
sum2 = array_change.sum(axis=0) #計算軸を行方向に指定(axis=0)
sum3 = array_change.sum(axis=1) #計算軸を列方向に指定(axis=1)
ndarrayの構造変更をしたい
ndarrayは多次元を配列であるため次元配列を変更する、もしくは連結方法をご紹介します。
行方向への連結 | np.vstack([配列1,配列2]) |
列方向への連結 | np.hctack([配列1,配列2]) |
次元の追加 | np.array([配列1,配列2]) |
次元の変更 | np.reshape(行数,列数) |
次元の変更(1次元への変更) | np.flat |
csvからの読み書きをしたい
さあそれではcsvの読み書きをしていきましょう。
今回は政府の各県の人口推移データから持ってきましょう。
都道府県名、各年のインデックスは消してあります。
「jinkou_numpy1.csv」
上記をダウンロードして好きな名前に変更してもらって下記を実行してみてください。
使い方の例を一つ下記に示しておきます。
import numpy as np
data = np.loadtxt("jinkou_numpy1.csv",delimiter = ",",dtype='int64')
ここではファイル名を jinkou_numpy2 にしています。
よく出るエラーとしてcsvファイルの文字型がおかしいことや、
数値に””(ダブルクォーテーション)がついているために読み込めない場合があります。
注意しましょう
書き出しは下記となります。
黄色アンダーラインの部分は好きな名称にしてくださいね。
import numpy as np
data = np.savetxt(“jinkou_numpy2.csv”,delimiter = “)
データ型
Numpyを使う上でデータ型は避けて通れないので紹介しておきます
Numpyデータ型の種類をしりたい
bool | 真偽型 |
int○ | ○ビット符号付整数(○:8,16,32,64) |
unit○ | ○ビット符号なし整数(○:8,16,32,64) |
float○ | ○ビット浮動小数点(○:16,32,64) |
complex○ | ○ビット複素数(○:64,128) |
データ型は配列生成時に指定することができます
array_data_int64
= np.array([[1,2,3,4,5],[6,7,8,9,10]], dtype = 'int64')
Numpyデータ型の取り出し、変更をしたい
データ型の確認 | dtype |
データ型の指定 | dtype |
データ型の変更 | astype |