プログラミング
記事内に商品プロモーションを含む場合があります

Pythonで正規分布のグラフを描く

確率・統計関連記事
tadanori

Pythonで正規分布のグラフを描く必要があったので記事にしてみました。描きたいのは以下のような$\mu=0.0, \sigma=1.0$のベルカーブのグラフです。

正規分布のグラフ(ベルカーブ)

どこにでも転がっているのですが、著作権などを考えると自分の資料にコピペするのは気になります。ということで自作するコードを作成してみました。

なお、上記グラフは自由にコピペしてもらってOKです

こんなの需要あるかわかりませんが、とりあえず

正規分布とは

確率・統計を学習している方には、お馴染みの正規分布の確率密度関数です。

$
f(x) = \frac{1}{\sqrt{2\pi \sigma^2}}\exp\biggl(-\frac{(x-\mu)^2}{2\sigma^2}\biggr)
$

これをグラフ化したいというのが今回の内容です。

資料とか書くときに結構必要になるのですが、PowerPointの曲線などで書くのは面倒、できれば本物を使いたいなといつも思い、Pythonでグラフを作成してみることにしました。

今回は、$1\sigma$, $2\sigma$に入る確率とかを説明する資料で欲しくなり作成に踏み切りました。自分で作れば、著作権とかを気にしなくてよくなるので。

グラフを書く

GitHubにGoogle Colabのコードを用意していますのでそちらも参考にしてください

なお、numpy, scipy, matplotlibは既にインストール済みという前提になります。インストールしていない場合は、以下のコードを実行してインストールしてください。

pip install numpy matplotlib scipy

必要なパッケージをインポート

まず、必要なパッケージをインポートします

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats

グラフデータの準備

正規分布のグラフデータを作成しています。具体的には、平均値mu、偏差sdのグラフを作成しています。$3\sigma$まで入れたいのでXの範囲は-4~4としています。scipy.stats.norm.pdfは確率密度関数を返してくれる関数です。

これで、X,Yが生成されます

mu = 0
sd  = 1

X = np.arange(-4,4,0.1)
Y = scipy.stats.norm.pdf(X, loc=mu, scale=sd)

グラフの描画

データが準備できたので、グラフ描画になります。サイズ等はfigsizeで調整しています。tickで横軸のメモリを調整して、あとはmatplotlibで描画です。

fig = plt.figure(figsize=(10, 4), facecolor="white")

tick = [i for i in range(-4, 4, 1)]

ax = plt.subplot()
ax.set_xticks(tick)

ax.plot(X, Y, c=colors)
ax.grid(axis='x', c='lightgray')
ax.grid(axis='y', c='lightgray')
[ax.spines[side].set_visible(False) for side in ['right','top']]

plt.show()

グラフは以下のようになります

正規分布のグラフ(ベルカーブ)

まとめ

正規分布のグラフは、資料作成などでたまに使います。Webに結構転がってはいるのですが、著作権などを気にすると自作した方が良いという結論になります。

今回は、Pythonを使って簡単に作成する方法を説明しました。

###

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました