Matplotlib 을 이용한 경험적 누적 분포 플롯

Beginner

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

소개

이 튜토리얼은 Matplotlib 을 사용하여 표본의 경험적 누적 분포 함수 (ECDF) 와 이론적 CDF 를 플롯하는 방법을 보여줍니다. ECDF 는 공학 분야에서 "비초과 (non-exceedance)" 곡선으로도 알려져 있으며, 주어진 x 값에 대한 y 값은 표본에서 관측치가 해당 x 값보다 작을 확률을 나타냅니다. 반대로, 경험적 보완 누적 분포 함수 (ECCDF, 또는 "초과 (exceedance)" 곡선) 는 표본에서 관측치가 x 값보다 클 확률 y 를 보여줍니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 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)

Figure 및 서브플롯 생성

이 단계에서는 누적 분포를 위한 두 개의 서브플롯이 있는 figure 를 생성합니다. 또한 figure 크기를 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")

Figure 레이블 지정

이 단계에서는 figure 에 레이블을 지정합니다. 제목, 그리드 선, 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 을 사용하여 자신만의 누적 분포 플롯을 만들 수 있습니다.