Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

AIを学ぶ1 〜Numpy & Matplotlib (Python) 編〜

こんにちは、鯨井貴博@opensourcetechです。

 

新聞等を見ると、最近はあらゆる分野で「AI」を利用・導入と目にするようになりました。

 

AI(Artificial Inteligence)= 人工知能 とまでは分かっていても、

実際にどんなことが行われているのか分からないのが現状です。

 

なので、その理解の為、AIを構成する要素を見てみようということで、

その第1弾です。

 

第1弾は、AIではよくPythonが使われますが、

その中でもよく登場する NumpyMatplotlib について見ていきます。

 

なお、使用するPython3については、以下の記事などを参考にインストールします。

opensourcetech.hatenablog.jp

 

Numpy

Numpy とは、Python で科学計算をするためのパッケージです。

単純な四則演算から、ベクトル・行列・関数などを処理することが出来ます。

 

ドキュメント等については、以下のURLから確認出来ます。

http://www.numpy.org/

Numpy and Scipy Documentation — Numpy and Scipy documentation

NumPy Reference — NumPy v1.14 Manual

 

  

Matplotlib

Matyplotlib とは、以下のようなグラフなどを描くために

データを処理したり グラフを表示させたりするライブラリです。

f:id:opensourcetech:20180703152451p:plain

f:id:opensourcetech:20180703152505p:plain

ドキュメンテーション等は、以下のURLで確認出来ます。

Matplotlib: Python plotting — Matplotlib 2.2.2 documentation

https://matplotlib.org/gallery/index.html

 

 

 Numpyのインストール

 pip3を使ってインストールします。

bash-3.2$ pip3 install numpy・・・インストール
Collecting numpy
Downloading https://files.pythonhosted.org/packages/f6/cd/b2c50b5190b66c711c23ef23c41d450297eb5a54d2033f8dcb3b8b13ac85/numpy-1.14.5-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.7MB)
100% |████████████████████████████████| 4.7MB 6.2MB/s
Installing collected packages: numpy
Successfully installed numpy-1.14.5
bash-3.2$ pip3 list・・・インストールされているパッケージ一覧表示
Package Version
--------------- -------
cycler 0.10.0
kiwisolver 1.0.1
matplotlib 2.2.2
neo4j-driver 1.5.3
numpy 1.14.5 <------ここ
pip 10.0.1
pyparsing 2.2.0
python-dateutil 2.7.3
pytz 2018.5
setuptools 39.0.1
six 1.11.0
wheel 0.31.0

 

 

Numpyを使ってみる

 まずは、四則演算から。

bash-3.2$ python3
Python 3.6.5 (default, Apr 25 2018, 14:23:58)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np・・・・numpyをnpという名でインポート
>>> a1 = np.array([1,2,3])・・・・変数a1を定義 ※ベクトル(1次元配列)
>>> print(a1)・・・・変数a1を表示
[1 2 3]
>>> a2 = np.array([[1,2,3],[4,5,6]])・・・・変数a2を定義 ※ベクトル(2次元配列)
>>> print(a2)・・・・変数a2を表示
[[1 2 3]
[4 5 6]]
>>> print(a1*a2)・・・・変数同士の掛け算(乗算)
[[ 1 4 9]
[ 4 10 18]]
>>> print(a1+a2)・・・・変数同士の足し算(加算)
[[2 4 6]
[5 7 9]]
>>> print(a1-a2)・・・・変数同士の引き算(減算)
[[ 0 0 0]
[-3 -3 -3]]
>>> print(a1/a2)・・・・変数同士の割り算(除算)
[[1. 1. 1. ]
[0.25 0.4 0.5 ]]
>>> print(a1%a2)・・・・変数同士の剰余を求める
[[0 0 0]
[1 2 3]]

 

続いて、Matrixライブラリの使用。

Matrix library (numpy.matlib) — NumPy v1.14 Manual

>>> np.zeros*1・・・・全て0(ゼロ)で3×3の配列を作成
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
>>> np.ones*2・・・・全て1で 3×3の配列を作成
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> np.mean(a1)・・・・変数a1 の要素の平均を求める
2.0
>>> np.mean(a2)・・・・変数a2 の要素の平均を求める
3.5
>>> np.sum(a1)・・・・変数a1 の要素の合計を求める
6
>>> np.sum(a2)・・・・変数a2 の要素の合計を求める
21
>>> np.std(a1)・・・・変数a1 の要素の標準偏差を求める
0.816496580927726
>>> np.std(a2)・・・・変数a2 の要素の標準偏差を求める
1.707825127659933

 

数学機能の使用。

Mathematical functions — NumPy v1.14 Manual

>>> np.add(7,8)・・・・2つの数を足す
15
>>> np.subtract(7,8)・・・・2つの数を引く
-1
>>> np.subtract(8,7)・・・・2つの数を引く
1
>>> np.multiply(8,7)・・・・2つの数を掛ける
56
>>> np.multiply(7,8)・・・・2つの数を掛ける
56
>>> np.divide(10,2)・・・・2つの数を割る
5.0
>>> np.power(2,2)・・・・2の2乗
4
>>> np.power(2,32)・・・・2の32乗
4294967296
>>> np.power(2,8)・・・・2の8乗
256
>>> np.power(2,16)・・・・2の16乗
65536
>>> np.power(2,24)・・・・2の24乗
16777216
>>> np.sqrt(9)・・・・9の平方根
3.0
>>> np.sqrt(4)・・・・4の平方根
2.0
>>> np.sqrt(3)・・・・3の平方根(人並みに奢れよ) ※懐かしいなぁw
1.7320508075688772
>>> np.sqrt(2)・・・・2の平方根(一夜一夜に人見頃) ※懐かしいなぁw
1.4142135623730951

 

ベクトルや要素の情報確認。

>>> a1・・・・変数a1 の情報確認
array([1, 2, 3])
>>> a2・・・・変数a2 の情報確認
array([[1, 2, 3],
[4, 5, 6]])
>>> a1.ndim・・・・変数a1 の次元数
1
>>> a1.size・・・・変数a1 の要素数
3
>>> a1.shape・・・・変数a1 の要素数
(3,)
>>> a1.itemsize・・・・変数a1 の1要素のバイト数
8
>>> a1.strides・・・・変数a1 で次の要素に移動するのに必要なバイト数
(8,)
>>> a1.nbytes・・・・変数a1 の配列全体のバイト数
24
>>> a1.dtype・・・・変数a1 の配列要素のデータ型参照
dtype('int64')
>>> np.max(a2)・・・・変数a2 の要素のうち、最大のもの
6
>>> np.min(a2)・・・・変数a2 の要素のうち、最小のもの
1
>>> np.var(a2)・・・・変数a2 の要素の分散、
2.9166666666666665
>>> np.argmax(a2)・・・・変数a2 の要素のうち、最大のもののインデックス
5
>>> np.argmin(a2)・・・・変数a2 の要素のうち、最小のもののインデックス
0
 

 

 

Matplotlibのインストール

 pip3を使ってインストールします。

bash-3.2$ pip3 install matplotlib
Collecting matplotlib
Downloading https://files.pythonhosted.org/packages/8a/d5/5337662b714c65100f3545ed3909e9478614d1ebf1f692a52981f3f5167b/matplotlib-2.2.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (13.7MB)
100% |████████████████████████████████| 13.7MB 1.7MB/s
Collecting cycler>=0.10 (from matplotlib)
Downloading https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl
Collecting pytz (from matplotlib)
Downloading https://files.pythonhosted.org/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB)
100% |████████████████████████████████| 512kB 4.6MB/s
Collecting kiwisolver>=1.0.1 (from matplotlib)
Downloading https://files.pythonhosted.org/packages/fb/96/619db9bf08f652790fa9f3c3884a67dc43da4bdaa185a5aa2117eb4651e1/kiwisolver-1.0.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (108kB)
100% |████████████████████████████████| 112kB 4.6MB/s
Collecting six>=1.10 (from matplotlib)
Downloading https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting python-dateutil>=2.1 (from matplotlib)
Downloading https://files.pythonhosted.org/packages/cf/f5/af2b09c957ace60dcfac112b669c45c8c97e32f94aa8b56da4c6d1682825/python_dateutil-2.7.3-py2.py3-none-any.whl (211kB)
100% |████████████████████████████████| 215kB 7.3MB/s
Requirement already satisfied: numpy>=1.7.1 in /usr/local/lib/python3.6/site-packages (from matplotlib) (1.14.5)
Collecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 (from matplotlib)
Downloading https://files.pythonhosted.org/packages/6a/8a/718fd7d3458f9fab8e67186b00abdd345b639976bc7fb3ae722e1b026a50/pyparsing-2.2.0-py2.py3-none-any.whl (56kB)
100% |████████████████████████████████| 61kB 4.8MB/s
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/site-packages (from kiwisolver>=1.0.1->matplotlib) (39.0.1)
Installing collected packages: six, cycler, pytz, kiwisolver, python-dateutil, pyparsing, matplotlib
Successfully installed cycler-0.10.0 kiwisolver-1.0.1 matplotlib-2.2.2 pyparsing-2.2.0 python-dateutil-2.7.3 pytz-2018.5 six-1.11.0

bash-3.2$ pip3 list
Package Version
--------------- -------
cycler 0.10.0
kiwisolver 1.0.1
matplotlib 2.2.2 <-------ここ
neo4j-driver 1.5.3
numpy 1.14.5
pip 10.0.1
pyparsing 2.2.0
python-dateutil 2.7.3
pytz 2018.5
setuptools 39.0.1
six 1.11.0
wheel 0.31.0

 

  

Matplotlibを使ってみる

Matplotlibは、以下のように操作します。

bash-3.2$ python3
Python 3.6.5 (default, Apr 25 2018, 14:23:58)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import matplotlib.pyplot as plt・・・・mathplotlib をpltという名でインポート
>>> x = np.linspace(-7, 7, 100)・・・・-7から7 を100等分したデータを生成
>>> y1 = 2**x・・・・変数y1の定義
>>> y2 = 3**x・・・・変数y2の定義
>>> y3 = 0.5**x・・・・変数y3の定義
>>> plt.plot(x, y1, 'black', label='$y=2^x$')・・・・y1に関するプロットを黒 + 凡例文字
[<matplotlib.lines.Line2D object at 0x1150f4908>]
>>> plt.plot(x, y2, 'blue', label='$y=3^x$')・・・・y2に関するプロットを青 + 凡例文字
[<matplotlib.lines.Line2D object at 0x1150f4a58>]
>>> plt.plot(x, y3, 'gray', label='$y=0.5^x$')・・・・y3に関するプロットを灰色 + 凡例文字
[<matplotlib.lines.Line2D object at 0x1150f4da0>]
>>> plt.ylim(-3, 7)・・・・グラフのY軸の範囲指定
(-3, 7)
>>> plt.xlim(-5, 5)・・・・グラフのX軸の範囲指定
(-5, 5)
>>> plt.grid(True)・・・・グリッド線の有効化
>>> plt.legend(loc='lower right')・・・・凡例を右下に表示
<matplotlib.legend.Legend object at 0x115106320>
>>> plt.show()・・・・グラフ表示

 

plt.show()とすると、以下のようなグラフが表示されます。

 ※×をクリックして、閉じれます。

f:id:opensourcetech:20180703153328p:plain

 

 

まとめ

このように Numpy では科学計算、Matplotlib ではデータのプロットが可能となります。

最後のデータプロットが出来ると、結構満足感がありますねw

 

 

 

www.slideshare.net

github.com

www.facebook.com

twitter.com

www.instagram.com

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

 

*1:3,3

*2:3,3

Opensourcetech by Takahiro Kujirai