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
파이썬의 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
반응형
'[XiBBaL] Development Project > Etc.' 카테고리의 다른 글
막간을 이용한 친구 학원 업무보고 툴 만들기 (4) | 2024.03.17 |
---|---|
Python Pyinstaller enum34 오류 해결 (0) | 2023.02.07 |
[기타] 컴퓨터는 분자구조를 어떻게 계산할까 (1) | 2023.02.04 |
[Python] 특정 문자 2개 사이의 문자를 추출하는 법 (0) | 2023.01.29 |
Python 패키지 Pyinstaller로 실행파일(.exe) 만드는 법 (2) | 2023.01.29 |