- 확률분포를 scipy.stats를 통해 그리는데 익숙하지 않아 기본 사용에 대해 알아볼 거임

- 참고: scipy.stats

- 참고: scipy 확률분포

확률분포 클래스

- scipy.stats를 통해 확률분포를 그려보자

- 우선 확률분포에 대한 클래스 객체를 생성해야 함

- 각 확률분포의 파라미터는 scipy.stats.이름을 통해 확인하자

종류 이름 확률분포
이산 bernoulli 베르누이 분포
이산 binom 이항 분포
이산 poisson 포아송 분포
이산 geom 기하 분포
이산 nbinom 음이항 분포
이산 hypergeom 초기하 분포
이산 multinomial 다항 분포
연속 norm 정규 분포
연속 uniform 균일 분포
연속 expon 지수 분포
연속 gamma 감마 분포
연속 t t 분포
연속 chi2 카이제곱 분포
연속 f f 분포
연속 beta 베타 분포

모수 지정

- 확률분포의 모수는 종류별로 다르므로 문서를 참고하자

- 하지만 대부분 확률분포가 공통적으로 가지는 모수가 있음

모수 이름 의미
loc 기댓값
scale 표준편차

확률분포 methods

- 확률분포 클래스 객체가 가지는 method가 있음

- 정규분포를 예로 들어 ppf에 대한 설명을 해보면 norm.ppf(0.5)는 정규분포에서 $50$분위수에 해당하는 $x$값으로 $0$이다

메서드 기능
pmf 확률질량함수
pdf 확률밀도함수
cdf 누적분포함수
ppf 누적분포함수의 역함수(백분위 함수)
sf 생존함수 = 1 $-$ 누적분포함수
isf 생존함수의 역함수
rvs 무작위 표본 생성

확률분포 plot

정규 분포 pdf

- 정규 분포 pdf를 그려보자

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

xx = np.linspace(-5, 5, 1000) 

for scale in (0.5, 1.0, 2.0):
    plt.plot(xx, norm(0, scale).pdf(xx), label = 'μ = 0, σ = ' + str(scale), lw = 2, alpha = 0.8)
    
plt.plot(xx, norm(-2, 0.5).pdf(xx), label = 'μ = -2, σ = 0.5', lw = 2, alpha = 0.8)

plt.xticks(np.arange(-5, 6))
plt.yticks(np.arange(0.0, 1.2, 0.2))
plt.title("normal distribution pdf")
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
plt.grid()
plt.legend()
plt.show()

정규 분포 cdf

- 정규 분포 cdf를 그려보자

- cdf에 대한 내용 정리 예정

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

xx = np.linspace(-5, 5, 1000) 

for scale in (0.5, 1.0, 2.0):
    plt.plot(xx, norm(0, scale).cdf(xx), label = 'μ = 0, σ = ' + str(scale), lw = 2, alpha = 0.8)
    
plt.plot(xx, norm(-2, 0.5).cdf(xx), label = 'μ = -2, σ = 0.5', lw = 2, alpha = 0.8)

plt.xticks(np.arange(-5, 6))
plt.yticks(np.arange(0.0, 1.2, 0.2))
plt.title("normal distribution cdf")
plt.xlabel("$x$")
plt.ylabel("$f(x)$")
plt.grid()
plt.legend()
plt.show()