『Pythonからはじめる数学入門』
2章 データをグラフで可視化する
の解説です。
www.oreilly.co.jp
機械学習で数値データを提示する際には、
グラフを用いることが多いです。
今回は、
Pythonでグラフを使う方法についてご説明します。
2章 データをグラフで可視化する
デカルト座標平面とは、いわゆるx-y平面のことです。
高校数学で出てくるので、用語のみ記載します。
座標coordinates
原点origin
集合set
プロットplot
グラフgraph
2.2 リストとタプルの操作
リスト:可変的な要素のかたまり(あとで変更できる)
タプル:固定された要素のかたまり(あとで変更できない)
2.2.1 リストやタプルで繰り返す
リストやタプルはfor文で繰り返すことができます。
>>> list = [1,2,3]
>>> for item in list:
... print(item)
...
1
2
3
>>> for index, item in enumerate(list):
... print(index, item)
...
(0, 1)
(1, 2)
(2, 3)
2.3 matplotlibでグラフを作る
matplotlibは、Pythonのグラフ描画パッケージです。
インストール方法は、次のコマンドでインストールするか、
別途「matplotlib インストール」などで検索してみてください。
pip install matplotlib
さっそく以下のコードを打ち込んでいきますが、
x = [1,2,3]
y = [2,4,6]
from pylab import plot, show
plot(x, y)
show()
以下は、説明でにグラフ描画を表示するため、
コマンドラインではなく、
Jupyter Notebookを使って実行していきます。
上記の実行結果です。
2.3.1 グラフで点を作る
プロットを明示する場合です。
plot(x, y, marker='o')
実行結果です。
マーカーのみ表示する場合は、以下のように記載します。
plot(x, y, 'o')
2.3.2 ニューヨーク市の年間平均気温をグラフ化する
複数のプロットをしていけば、データの傾向をつかめます。
nyc_temp=[53.9,56.3,56.4,53.4,54.5,55.8,56.8,55.0,55.3,54.0,56.7,56.4,57.3]
plot(nyc_temp, marker='o')
x軸に年など特定の値を設定する方法です。
years = range(2000,2013)
plot(years, nyc_temp, marker='o')
2.3.3 ニューヨーク市の月間気温傾向を比較する
複数のグラフを重ね合わせる方法です。
y2000=[53.9,56.3,56.4,53.4,54.5,55.8,56.8,55.0,55.3,54.0,56.7,56.4]
y2006=[56.9,56.1,46.4,51.4,56.5,65.8,56.8,55.3,59.3,44.0,59.7,56.1]
y2012=[51.9,59.3,51.4,52.4,53.5,59.8,51.8,52.0,57.3,53.0,56.2,66.4]
months = range(1,13)
plot(months, y2000, months, y2006, months, y2012, marker='o')
from pylab import legend
legend([2000,2006,2012])
legend()で、凡例の指定ができます。
細かい引数の指定方法は、以下を参照してください。
legend and legend_handler — Matplotlib 2.1.0 documentation
2.3.4 グラフのカスタマイズ
タイトル、X軸名、Y軸名など、
他にカスタマイズする方法は、以下のとおりです。
y2000=[53.9,56.3,56.4,53.4,54.5,55.8,56.8,55.0,55.3,54.0,56.7,56.4]
y2006=[56.9,56.1,46.4,51.4,56.5,65.8,56.8,55.3,59.3,44.0,59.7,56.1]
y2012=[51.9,59.3,51.4,52.4,53.5,59.8,51.8,52.0,57.3,53.0,56.2,66.4]
months = range(1,13)
plot(months, y2000, months, y2006, months, y2012, marker='o')
from pylab import legend
legend([2000,2006,2012])
from pylab import title, xlabel, ylabel
title('matplotlib title')
xlabel('Month')
ylabel('Temp')
また、
axis()によって、軸の最小値、最大値を指定できます。
Y軸の最小値を0にした場合です。
y2000=[53.9,56.3,56.4,53.4,54.5,55.8,56.8,55.0,55.3,54.0,56.7,56.4]
y2006=[56.9,56.1,46.4,51.4,56.5,65.8,56.8,55.3,59.3,44.0,59.7,56.1]
y2012=[51.9,59.3,51.4,52.4,53.5,59.8,51.8,52.0,57.3,53.0,56.2,66.4]
months = range(1,13)
plot(months, y2000, months, y2006, months, y2012, marker='o')
from pylab import legend
legend([2000,2006,2012])
from pylab import title, xlabel, ylabel
title('matplotlib title')
xlabel('Month')
ylabel('Temp')
from pylab import axis
axis(ymin=0)
また、
X軸の最小値・最大値、Y軸の最小値・最大値を以下の通り指定できます。
y2000=[53.9,56.3,56.4,53.4,54.5,55.8,56.8,55.0,55.3,54.0,56.7,56.4]
y2006=[56.9,56.1,46.4,51.4,56.5,65.8,56.8,55.3,59.3,44.0,59.7,56.1]
y2012=[51.9,59.3,51.4,52.4,53.5,59.8,51.8,52.0,57.3,53.0,56.2,66.4]
months = range(1,13)
plot(months, y2000, months, y2006, months, y2012, marker='o')
from pylab import legend
legend([2000,2006,2012])
from pylab import title, xlabel, ylabel
title('matplotlib title')
xlabel('Month')
ylabel('Temp')
from pylab import axis
axis([0,13,0,100])
最後に、対話シェルではなく、プログラムの一部として、グラフを使う場合は、
pylabではなくpyplotを使います。
import matplotlib.pyplot as plt
def create_graph():
x = [1,2,3]
y = [2,4,6]
plt.plot(x,y)
if __name__ == '__main__':
create_graph()
2.3.5 プロットの保存
グラフを保存するには、savefig()を使います。
from pylab import plot,savefig
x = [1,2,3]
y = [2,4,6]
plot(x,y)
savefig('mygraph.png')
2.4 式をプロットする
今までのご説明は、
すでにプロットするデータがあった場合ですが、
数式からプロットする方法があります。
詳細説明は省略しますが、イメージとして以下のようなグラフを描画できます。
import matplotlib.pyplot as plt
def draw_graph(x,y):
plt.plot(x, y, marker='o')
plt.xlabel('Distance in meters')
plt.ylabel('Gravitational force in newtons')
plt.title('Gravitational force and distance')
plt.show()
def generate_F_r():
r = range(100, 1001, 50)
F = []
G = 6.674*(10**-11)
m1 = 0.5
m2 = 1.5
for dist in r:
force = G*(m1*m2)/(dist**2)
F.append(force)
draw_graph(r, F)
if __name__=='__main__':
generate_F_r()
2.4.2 投射運動
略
以上、
『Pythonからはじめる数学入門』2章 データをグラフで可視化する
の解説でした。