Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 Matplotlib에서 CDF(누적 분포 함수) 그리는 방법

CDF(Cumulative Distribution Function, 누적 분포 함수)는 확률 변수가 특정 값 이하일 확률을 누적으로 나타내는 함수입니다. 데이터가 어떻게 분포되어 있는지 직관적으로 파악할 수 있어 통계 분석에서 자주 활용됩니다. 이 글에서는 NumPy와 Matplotlib을 사용해 파이썬에서 CDF를 그리는 방법을 단계별로 살펴보겠습니다.

CDF 플롯 단계

  • 그림 크기를 설정하고 서브플롯 주변 및 사이의 패딩을 조정합니다.
  • 샘플 데이터 개수를 담을 변수 N을 초기화합니다.
  • NumPy를 사용해 난수 데이터를 생성합니다.
  • databins=10 옵션으로 데이터 집합의 히스토그램을 계산합니다.
  • 확률 밀도 함수(PDF)를 구합니다.
  • 5번 단계에서 얻은 pdf 값을 이용해 cdf를 계산합니다.
  • plot() 메서드에 라벨 "CDF"를 지정하여 cdf를 그립니다.
  • 그래프에 범례(legend)를 배치합니다.
  • show() 메서드로 그림을 화면에 표시합니다.

전체 예제 코드

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

N = 500
data = np.random.randn(N)
count, bins_count = np.histogram(data, bins=10)
pdf = count / sum(count)
cdf = np.cumsum(pdf)
plt.plot(bins_count[1:], cdf, label="CDF")
plt.legend()
plt.show()

코드 설명

np.random.randn(N)은 표준 정규분포를 따르는 500개의 난수를 생성합니다. np.histogram(data, bins=10)은 데이터를 10개의 구간(bin)으로 나누어 각 구간에 속하는 데이터의 개수(count)와 구간 경계값(bins_count)을 반환합니다.

pdf = count / sum(count)는 각 구간의 데이터 개수를 전체 개수로 나누어 상대 빈도, 즉 확률 밀도를 계산합니다. 이어서 np.cumsum(pdf)로 pdf 값들의 누적합을 구하면 바로 CDF가 됩니다.

x축에는 bins_count[1:], 즉 각 구간의 오른쪽 경계값을 사용하고, y축에는 계산된 cdf 값을 대입하여 plot() 메서드로 곡선을 그립니다. 마지막으로 legend()로 "CDF" 라벨의 범례를 추가하고 show()로 결과를 출력합니다.

실행 결과

파이썬 Matplotlib에서 CDF(누적 분포 함수) 그리는 방법

실행하면 0에서 시작해 1에 수렴하는 S자 형태의 누적 분포 곡선이 그려집니다. 정규분포 데이터를 사용했기 때문에 중앙 부근에서 기울기가 가장 가파른 형태의 전형적인 CDF 곡선을 확인할 수 있습니다.