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

PythonPythonBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、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を使って独自の累積分布プロットを作成できるようになったはずです。