AiPE

[학교 과제] 파이썬 Matplotlib으로 정규분포 곡선 (PDF, CDF) 그리기 본문

[XiBBaL] Development Project/Etc.

[학교 과제] 파이썬 Matplotlib으로 정규분포 곡선 (PDF, CDF) 그리기

Oshimaker XiBBaL 2023. 2. 6. 10:30
반응형

학교 확률과통계 교과시간에 쓰려고 짠 코드인 것 같다. 컴퓨터 정리하다가 나왔다.


정규분포는 모수 값을 통해 값들의 분포를 나타내는 데 사용한다.
모수에는 평균(μ, mu)와 표준편차(σ, sigma) 두 가지가 존재한다.
정규분포를 그래프로 시각화해놓은 것이 정규분포 곡선이다.


자세한 정의를 알고싶다면 아래 링크를 참고.
https://namu.wiki/w/%EC%A0%95%EA%B7%9C%EB%B6%84%ED%8F%AC

정규분포 - 나무위키

중학교의 내신 성적표에는 등급만 표기되어 있을 뿐 석차는 교육정책에 의해 표기되어 있지 않다. 하지만 원점수의 전체평균과 표준편차가 알려져 있고, 원점수의 분포가 정규 분포와 비슷하다

namu.wiki



파이썬의 matplotlib을 이용해 평균과 표준편차를 입력하면 그래프를 알아서 그려주는 코드를 짤 수 있다.
코드블럭 안의 글자가 잘 안 보이면 블로그 우측 하단의 다크모드 버튼을 눌러서 다크모드를 끄면 된다.

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import erf

np.random.seed(0)


# 출력될 Graph의 스킨/폰트 변경
plt.style.use('default')
plt.rcParams['figure.figsize'] = (6, 3)
plt.rcParams['font.size'] = 10
plt.rcParams['lines.linewidth'] = 5


# 모수 값 지정 = 평균은 그래프의 x축방향 (좌우) 이동을, 표준편차는 그래프가 양옆으로 퍼진 정도를 의미함
mu = 2.0 # mu = 평균
sigma = 1.0 # sigma = 표준편차 , sigma^2 = 분산


#연산부
x = np.linspace(-8, 8, 1000)
y = (1 / np.sqrt(2 * np.pi * sigma**2)) * np.exp(-(x-mu)**2 / (2 * sigma**2))
y_final = 0.5 * (1 + erf((x - mu)/(np.sqrt(2 * sigma**2))))


#출력될 Graph의 글자 변경
plt.plot(x, y, alpha=0.7, label='PDF') # PDF = Probability Density Function = 확률밀도함수
plt.plot(x, y_final, alpha=0.7, label='CDF') # CDF = Cumulative Distribution Function = 누적분포함수
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend(loc='upper left')

plt.show()

  • numpy, matplotlib, scipy 세 개의 모듈을 이용한다.
  • Grpah의 폰트, 색상, 선 두께 모두 조절 가능하다.
  • PDF와 CDF 둘 중 하나만 출력하기도 가능하다.
  • 그려진 그래프를 PNG형식으로 저장할 수 있다.

  • PDF는 Probability Density Fuction으로, 확률밀도함수를 말한다. 우리가 일반적으로 정규분포 곡선이라고 부르는 것이 PDF.
  • CDF는 Cumulative Distribution Function으로, 누적분포함수를 말한다. \(x\)가 증가하면서, 현재의 \(x\)값까지의 누적치를 보여준다.
  • 평균은 정규분포 그래프의 대칭축을 \(x\)방향으로 움직이는 역할을, 표준편차는 그래프가 \(x\)방향으로 퍼진 정도를 조절하는 역할을 한다. 표준편차 값이 클수록 그래프가 \(x\)방향으로 더 퍼지게 된다.

  • 정규분포 곡선의 식은 아래와 같으며 이 식을 바탕으로 연산부를 작성했다.

$$N(x|\mu ,\sigma^2) = \frac{1}{\sigma \sqrt{2\pi}}exp-\left [ \frac{(x-\mu)^2}{2\sigma^2} \right ]$$

(ex.1) 평균=0, 표준편차=1 일때의 Graph

(ex.2) 평균=2, 표준편차=1 일때의 Graph

(ex.3) 평균2, 표준편차=2 일때의 Graph

반응형