[便利ライブラリ]numpyをチャチャっと紹介

##はじめに

こんにちは！
そろそろデータ解析に必要な知識を一旦整理しようと思いまして、この記事を書いています。
データサイエンティストになりたい人は避けて通れないライブラリたちを、僕自身の復習も兼ねて紹介していきたいと思います。
numpy,pandas,scikit-learnなど色々とありますが、第一弾は**numpy**です！
この記事が少しでもお役に立てば、ぜひいいね！の方よろしくお願いいたします！

##numpyってなんだ？
「そもそもnumpyってなんやねん」という声がどこからともなく聞こえてきそうなので説明します。
numpyとはPythonで学術計算をするためのライブラリです。
簡単な計算ならPythonでもゴリ押しでいけますが、いつか限界がきてしまいます。
そこで威力を発揮するのがnumpyです。
計算を楽にしてくれたり、高速化してくれるのがnumpyなので、これから機械学習を始めたいという方は特に必須となっています。

##筆者の開発環境
・macOS Mojave バージョン10.14.3
・MacBook Air(11-inch, Early 2015)
・プロセッサ 1.6 GHz Intel Core i5
・Python 3.7.1
これで問題なく動きました！
##numpyの前に。。。
まずnumpyを勉強し始める前に知っておくべきことがあります。それはPythonの**リストや配列**に関する簡単な知識& **行列に関する知識**です。

ある程度でいいのでリストや配列について知っておかないとnumpyの内容が全く理解できないと思われます（涙）
[ ]でくくるとリストが作れる、リストの中身は0番目から数えるなどそのくらいでいいので、忘れた人もしくは全く知らない人はザっとおさらいしておきましょう。

数学の分野である行列も少し勉強しておきましょう。
「この行列はA行B列である」くらいのほんとのほんとに基礎の部分でいいので、ネットなり参考書なりで勉強しておくと理解が深まります。

##numpyの使い方
jupiter notebookでもなんでもいいのでまずはコードを入力しましょう。

```python

import numpy as np
```
これでnumpyがインポートでき、計算が可能になりました。

ではnumpyのアレイ（配列のこと）を作ってみましょう。

```python
array1 = np.array([[1,2,3],[4,5,6]])
```
これでnumpyのアレイが出来上がりました。表示してみましょう。

```python
array1
>>>array([[1, 2, 3],
        [4, 5, 6]])
```
こんな感じでちゃんと出来上がっていますね。
ではarray.shapeとarray.dtypeでアレイの形状&タイプを確認してみます。

```python
array.shape
>>>（2,3)
array.dtype
>>>dtype('int64')
```
これで2行3列の整数型のアレイであることがわかりました。
このように自分が選んだ数字を入れてアレイを作れますが、他にも様々なアレイの作り方があります。

```python

np.zeros()
#0だけのアレイが作れる。引数には0の個数を入力orもし引数にタプル型で（X,Y)と入れたらX行Y列の0だけでできた配列が作れる。
np.ones()
#1だけのアレイが作れる。np.zerosと使い方は同じ。
np.empty()
#中身が空のアレイが作れる。
np.eye(X)
#X行X列の単位行列が作れる。
np.arange(X)
#0からXの一つ前の数字までのアレイが作れる。Xが5なら0から4までのアレイ。
np.arange(5,50,2)
#引数をこのようにしたら5から49まで2つ飛ばしのアレイが作れる。
np.arange(9).reshape(3,3)
#0から8までのアレイを3行3列で作れる。
```
簡単なアレイの作り方としてはこんな感じでしょうか。
では、このようにして作ったアレイを用いて計算する方法に移ります。

まず、アレイを二つ用意しましょう。

```python

array1 = np.array([[0,1,2],[3,4,5]])
array2 = np.array([[6,7,8],[9,10,11]])
```
具体的な計算方法は以下のようになります。

```python
#加減乗除全てアレイの各要素に対応して行われる。
array1 + array2
>>>array([[ 6,  8, 10],
       [12, 14, 16]])

array1 - array2
>>>array([[-6, -6, -6],
       [-6, -6, -6]])

array1 * array2
>>>array([[ 0,  7, 16],
       [27, 40, 55]])

array1 / array2
>>>array([[0.        , 0.14285714, 0.25      ],
       [0.33333333, 0.4       , 0.45454545]])
```



続いてはアレイの添え字についてです。
アレイの特定の位置の数字を取り出したい時などに使えます。

```python

array = np.arange(0,5)
array
>>>array([0,1,2,3,4])

array[2] 
#アレイの要素の数え方は左から0番目、1番目、、、[2]は2番目という意味
>>>2

array[1:4]  #アレイの1番目から4番目の手前（つまり3)まで抜き出すという意味
>>>array([1,2,3])

array[:] #全ての要素を抜き出す
>>>array([0,1,2,3,4])
```
１次元のアレイに対してはこのような操作をします。
では、続いて2次元のアレイではどのようになるかみていきましょう。

```python
array2d = np.array([[1,2,3],
                    [4,5,6],
                    [7,8,9]])
#3行3列の2次元アレイに対して次のような操作を行う。

array2d[1] #一番目のリストが取り出される
>>>[4,5,6]

array2d[1][2] #1番目のリストの2番目の要素が取り出される
>>>6
#array2d[1,2]と書いても同じ

array2d[:2,1:] #1番目までのリストの1番目以降の中身が取り出される
>>>array([[2,3],[5,6]])
```

##終わりに
いかがだったでしょうか？
これらはnumpyの本当に本当の基礎部分にすぎません。
これ以外にも便利な要素がたくさんあります。
そのためにみなさんにぜひググってほしいキーワードを上げておきます。
・array.transpose
・array.swapaxes
・array.sort()
・np.dot()
・np.sqrt()
・np.exp()
・np.add()
・np.maximum()
・np.sum()
・np.mean()
・np.std()
・np.var()
・np.unique()

ザっと以上です。データ解析をする上で必要なものばかりだと思うのでぜひ調べてみてください！自学自習がやっぱり1番成長できます。

最後に、僕が所属している**ツカザキ病院眼科AIチーム(Deep Oculus)**のページも見ていただけると嬉しいです！
[ツカザキ病院眼科AIチーム Deep Oculus](https://qiita.com/organizations/deepoculus)

**ご一読ありがとうございました！**