Matplotlib を使った経験的累積分布のプロット

Beginner

This tutorial is from open-source community. Access the source code

はじめに

このチュートリアルでは、Matplotlib を使ってサンプルの経験的累積分布関数(ECDF:Empirical Cumulative Distribution Function)と理論的な CDF をプロットする方法を示します。ECDF は、工学において「超えない」曲線としても知られており、与えられた x 値に対する y 値は、サンプルからの観測値がその x 値未満である確率を表します。逆に、経験的な補完累積分布関数(ECCDF:Empirical Complementary Cumulative Distribution Function、または「超過」曲線)は、サンプルからの観測値が値 x を超える確率 y を示します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

必要なライブラリをインポートする

このステップでは、必要なライブラリをインポートします。このチュートリアルでは、NumPy と Matplotlib のライブラリを使用します。

import matplotlib.pyplot as plt
import numpy as np

乱数シードを設定してデータを生成する

このステップでは、乱数シードを設定してデータを生成します。平均 200、標準偏差 25 の正規分布から 100 個のデータポイントを生成します。

np.random.seed(19680801)
mu = 200
sigma = 25
data = np.random.normal(mu, sigma, size=100)

グラフとサブプロットを作成する

このステップでは、累積分布用の 2 つのサブプロット付きのグラフを作成します。また、グラフのサイズを 9x4 に設定します。

fig = plt.figure(figsize=(9, 4), layout="constrained")
axs = fig.subplots(1, 2, sharex=True, sharey=True)

累積分布をプロットする

このステップでは、累積分布をプロットします。ECDF と補完 ECDF をプロットするために.ecdfメソッドを使用します。また、平均 200、標準偏差 25 の正規分布を使って理論的な CDF もプロットします。

## Cumulative distributions
axs[0].ecdf(data, label="CDF")
n, bins, patches = axs[0].hist(data, 25, density=True, histtype="step",
                               cumulative=True, label="Cumulative histogram")
x = np.linspace(data.min(), data.max())
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
     np.exp(-0.5 * (1 / sigma * (x - mu))**2))
y = y.cumsum()
y /= y[-1]
axs[0].plot(x, y, "k--", linewidth=1.5, label="Theory")

## Complementary cumulative distributions
axs[1].ecdf(data, complementary=True, label="CCDF")
axs[1].hist(data, bins=bins, density=True, histtype="step", cumulative=-1,
            label="Reversed cumulative histogram")
axs[1].plot(x, 1 - y, "k--", linewidth=1.5, label="Theory")

グラフにラベルを付ける

このステップでは、グラフにラベルを付けます。タイトル、グリッド線、x 軸と y 軸のラベルを追加します。

fig.suptitle("Cumulative Distributions")
for ax in axs:
    ax.grid(True)
    ax.legend()
    ax.set_xlabel("Annual rainfall (mm)")
    ax.set_ylabel("Probability of occurrence")
    ax.label_outer()

plt.show()

まとめ

このチュートリアルでは、Matplotlib を使って経験的累積分布関数(ECDF)と理論的 CDF をプロットする方法を学びました。また、経験的補完累積分布関数(ECCDF)と逆累積ヒストグラムをプロットする方法も学びました。このチュートリアルで示された手順に従えば、Matplotlib を使って独自の累積分布プロットを作成できるようになったはずです。