1.6. データの可視化¶
データの可視化に便利なmoduleはたくさん存在するが、入門者向けにはmatplotlib
が簡単で覚えやすいだろう。まずmoduleを読み込んで簡単なプロットをしてみる。
import matplotlib.pyplot as plt
import numpy as np
plt.plot(np.arange(0, 10))
ただし、一回目に実行したときや、Kernelをrestartした場合は、図が表示されない。これが気持ち悪い場合は、次の%
で始まるmagic commandを追加する。
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(np.arange(0, 10))
2回め以降に実行したときには、このcommandを書かなくても表示されるので、今後のコードではこのMagic commandは省略することにする。
実行したとき、セル番号のあとに、[<matplotlib.lines.Line2D at 0x172a4a79400>]
のようなよく分からない出力を出さないようにするには、作図の行の最後に;
を追加するとよい。
plt.plot(np.arange(0, 10));
それでは例題を使って、plt.plot
をいろいろ試してみよう。
(例題) $y=\sin 2 \pi x$ を $0 \le x \le 5$で図示せよ。
import numpy as np
x = np.arange(0, 5, 0.05) #刻みは適当に0.05とした
y = np.sin(2*np.pi*x)
plt.plot(x,y);
こんな図が表示される。np.sin
のargument(引数)はスカラーだけでなく、上の例のように一次元配列や今後勉強する二次元配列、行列を入れることもできる。
軸にラベルやタイトルをつけたいときは、plt.xlabel
などが使える。ラベル内ではTeXのコマンドも使える。範囲を指定したいときは、plt.xlim([最小値, 最大値])
などと書く。
plt.plot(x,y)
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.title('sin wave')
plt.xlim([0, 2])
plt.ylim([-1.5, 1.5]);
plot
の色を変えたいときや、ラインではなく点でプロットしたいときなど、いろいろオプションがあるので、必要に応じてMatplotlibの公式(https://matplotlib.org/) を参考にするとよい。
plt.plot(x,y, 'r')
plt.xlabel('x')
plt.ylabel('y')
plt.title('test')
plt.xlim([0, 2])
plt.ylim([-1.5, 1.5]);
C/C++やJavaのような言語は、データを図示するのに他のグラフアプリを使う必要があり、数値計算の結果をすぐに解析するときに非常に面倒であるが、pythonではこのmatplotlibが使えるために、シームレスに図示することができる。さらにJupyter Notebookでは、図を張り付けたり、Markdownを使ってリンクを張ったり、数式もTeXのように書くことができるので、python + Jupyter Notebookの組み合わせは、まさに研究ノートを書いていく要領でまとめられるので、データをさまざまな角度から解析、分析してまとめる必要のあるデータサイエンティストたちに支持されている。
練習問題¶
(1.6.1.) 中心を$(x_0,y_0)=(1,2)$とし、半径$r=3$の円をグラフで表示せよ。
(1.6.2.) 以下のような関数をsinc関数という。
$-20 \leq x \leq +20$の範囲で、$\mathrm{sinc}(x)$を図示せよ。
解答例¶
(1.6.1.) $0 \leq \theta \leq 2\pi$となるtheta
を定義して、theta
をパラメータとした配列x
とy
を計算して図示する。
import numpy as np
import matplotlib.pyplot as plt
x0, y0, r = 1, 2, 3
theta = np.arange(0, 2*np.pi, 0.01)
x = r * np.cos(theta) + x0
y = r * np.sin(theta) + y0
plt.figure(figsize=(5,5))
plt.plot(x,y)
plt.axis([-5, 5, -5, 5])
plt.xlabel('x')
plt.ylabel('y');
(1.6.2.) この$\mathrm{sinc}$関数は物理、数学、情報処理など多方面で頻出の関数なので記憶にとどめておくことをお勧めする。プロット自体は特に難しいこともないだろう。
x = np.arange(-20, 20.1, 0.1)
y = np.sin(np.pi * x)/(np.pi * x)
y = np.sinc(x)
plt.plot(x,y);
NumPyには$\mathrm{sinc}$関数も用意されているので、そのままy = np.sinc(x)
としても同じ結果となる。なおNumPyの$\mathrm{sinc}$関数は正規化$\mathrm{sinc}$関数なので、np.sinc
の中にnp.pi
を書く必要はない。
当サイトのテキスト・画像の無断転載・複製を固く禁じます。
Unauthorized copying and replication of the contents of this site, text and images are strictly prohibited.
© 2019 Go Yusa