こんにちは!
データサイエンティストのウマたん(@statistics1012)です。
Pythonを使う上で必ず使用する超重要ライブラリ「Pandas,Numpy,Matplotlib」。
個人的に最も使うライブラリはPandasですが、Numpyもシーンによっては使うことがありますねー!
そんなNumpyについて解説していきつつ、どのような場面でどのように使うのか簡単に見ていきます!
Numpyの使いどころをしっかりおさえておきましょう!
Numpyとは

引用元:Numpy公式
PandasとNumpyって何が違うの??という疑問を持たれる方も多いと思いますが・・・実はPandasはNumpyを拡張して使いやすくしたライブラリなんです。
そのため、ほとんどの前処理はPandasで完結することが多く、Pandasの方が扱いやすいです。
Numpyはndarray配列型のみしか扱えず中の要素は数値データでないといけません。
一方でPandasはDataframe型であり、要素は数値でも文字列でもバラバラでよいため実データを扱うのに長けています。
しかしその分演算処理はNumpyの方が速く、煩雑な行列計算に用いられることがあります。
高次元データの逆行列を求める時には大量の要素を持つ行列の演算を行うのでNumpyを使った方が演算が早くなります。
このように、基本的にはPandasを扱うシーンが多いものの、ここぞという場面・演算処理にはNumpyを使うことも少なくありません。
Numpyの使い方

それでは、Numpyの使い方について簡単に見ていきましょう!
まずは、Numpyをインポートします。
1 | import numpy as np |
これでNumpyが使えるようになります。
配列を作成する
Numpyを使って配列を作っていきましょう!
配列と似た型にリスト型があります。
リスト型はPythonに標準で組み込まれているもので要素は文字列でも数値でもバラバラで問題ありません。
一方Numpyで扱う配列型は1次元の配列から多次元配列(行列)型まで扱うことができ、中の要素は数値型で一致していないといけません。
実際に色々と触ってみて理解する方が早いので、配列を作って計算などをしてみましょう!
Numpyの配列型は以下のように生成することができます。
1 | np.array([1,2,3]) |
array([1, 2, 3])
これが配列型!
Rangeで指定することもできます。
1 | np.array(range(1,4)) |
array([1, 2, 3])
2次元の配列(行列の形)にしたい場合は以下のようにすれば大丈夫!
1 | np.array([[1,2,3],[4,5,6]]) |
array([[1, 2, 3],
[4, 5, 6]])
これで2行×3列の2次元配列が出来上がりました。
行×列を確認するにはshapeを使ってみましょう!
1 2 | A = np.array([[1,2,3],[4,5,6]]) A.shape |
(2, 3)
以下のようにすると3行×2列の2次元配列が出来上がります。
1 | np.array([[1,2],[3,4],[5,6]]) |
array([[1, 2],
[3, 4],
[5, 6]])
簡単ですね!
配列の操作
続いて出来上がった配列の操作方法についていくつか見ていきましょう!
2行×3列の配列を3行×2列に変換してみましょう!
reshapeを使うことで行数列数を変換することができます。
1 2 | A = np.array([[1,2,3],[4,5,6]]) A.reshape(3,2) |
array([[1, 2],
[3, 4],
[5, 6]])
この時、明示的に行と列を指定しなくても片方だけ指定して残りを-1にすることで適切な形に変換してくれます。
1 | A.reshape(-1,2) |
array([[1, 2],
[3, 4],
[5, 6]])
続いて、要素を追加してみましょう!
1 2 | B = A.reshape(-1,2) np.append(B,[[7,8]],axis=0) |
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
行が追加されました!
列方向へ追加する時は以下のように記述します。
1 | np.append(B,[[7],[8],[9]],axis=1) |
array([[1, 2, 7],
[3, 4, 8],
[5, 6, 9]])
できましたね。
続いて配列の特定要素を抽出してみましょう!
1 | B = np.array([[1,2],[3,4],[5,6]]) |
array([[1, 2],
[3, 4],
[5, 6]])
この2次元配列の要素を抽出してみましょう。
1 | B[0] |
array([1, 2])
1行目の要素を抽出できました。
1 | B[0][1] |
2
1行目2列目の要素を抽出できました。
配列演算
配列演算について見ていきましょう!
シンプルに各要素に対して数値(スカラー値)を足し合わせることが可能。
1 2 | B = np.array([[1,2],[3,4],[5,6]]) B+2 |
array([[3, 4],
[5, 6],
[7, 8]])
スカラーをかけることも可能。
1 2 | B = np.array([[1,2],[3,4],[5,6]]) B*3 |
array([[ 3, 6],
[ 9, 12],
[15, 18]])
多次元配列同士の足し算も形が一緒であれば可能です。
1 2 | B = np.array([[1,2],[3,4],[5,6]]) B+B*3 |
array([[ 4, 8],
[12, 16],
[20, 24]])
また2次元配列の行列積は以下のように求めることができます。
1 2 3 4 | A = np.array([[1,2,3],[4,5,6]]) B = np.array([[1,2],[3,4],[5,6]]) np.dot(A,B) |
array([[22, 28],
[49, 64]])
この場合、A(2行×3列)の行列とB(3行×2列)の行列の積で2行×2列の新たな行列が出来上がっていることが分かります。
Numpyを使えば、要素数の多い行列計算も高速で行うことができるんです!
乱数作成
続いてNumpyを使って乱数を作成してみましょう!
1 | np.random.rand(3,2) |
array([[0.20511798, 0.83910969],
[0.51645229, 0.56680067],
[0.95699065, 0.02719675]])
np.random.randでは0以上1未満の一様乱数を返します。
この時引数に要素数を指定することができます。今回は3,2と指定したので、3行2列の2次元配列が返されました。
1 | np.random.randn(3,2) |
array([[ 0.18444559, 0.92656196],
[-2.17690245, 1.26435454],
[ 0.06724962, 0.63178107]])
randnとすることで、標準正規分布に従う乱数が返されます。
np.randomを使えば、他にも二項分布やベータ分布に従う乱数を生成することができます。
統計量算出
最後に統計量の算出について見ていきましょう!
総和や平均など統計量を算出することができます。
1 2 | A = np.array([1,2,3,4,5]) np.sum(A) |
15
配列の総和が返ってきます。
1 | np.mean(A) |
3.0
配列の平均が返ってきます。
1 | np.max(A) |
5
配列の最大値が返ってきます。
1 | np.std(A) |
1.4142135623730951
標準偏差が返ってきます。
デフォルトでは、標本分散を基にした標準偏差になっています。
不偏分散を基にした標準偏差を算出したい場合は以下のように引数を追加します。
1 | np.std(A,ddof=1) |
1.5811388300841898
2次元配列の場合も計算可能であり、行レベルで算出するか列レベルで算出するか指定して計算します。
1 2 | B = np.array([[1,2],[3,4],[5,6]]) np.mean(B,axis=0) |
array([3., 4.])
この場合、列レベルで平均を出します。
1 2 | B = np.array([[1,2],[3,4],[5,6]]) np.mean(B,axis=1) |
array([1.5, 3.5, 5.5])
こうすると行レベルでの算出になります。
以上、Numpyの使い方あれこれでした!
Numpy まとめ

何気なく使っているNumpyはどんなライブラリなのか、どのような場面で使うのかについて見てきました!
Pythonにおけるデータ分析には非常に重要なNumpy!
Numpy含めPythonの勉強は、実際にデータ分析を行う上で非常に重要です。
ただ目的のないNumpy勉強は正直意味がないしモチベーションは続きません。
自分で進められる自信のある人はUdemyの教材を視聴もしくはPyQを自力で進めた後Kaggleに挑戦してみることをオススメします。
Udemyは世界最大のオンライン学習プラットフォームで非常に分かりやすく色んなコースがあるので自分のやりたいことが明確にきまっている人にオススメ!

PyQはPython特化のオンライン学習サービスで、ひたすらPythonコーディングを行うのにオススメです。
データサイエンスの理論まわりはあまり深く扱っていません。

そしてある程度Pythonの素地が出来上がった後は、データ分析コンペティションのKaggleに挑戦してみることをオススメします!
Kaggleでは企業から提供されるデータを基にお題に沿って精度の高いモデルを構築していきます。

ぜひNumpyをマスターしましょう!
Python勉強法については以下の記事でもまとめていますよ!

イラスト出典:Illustration by Stories by Freepik