Scipy
Scipy
본글은 데이터 사이언스 스쿨에서 Scipy에 대한 글을 그대로 옮기고 실습한 과정입니다.
Scipy는 수치해석기능을 제공하는 파이썬 패키지이다.
여러 서브패키지로 구성되어 있는데 그중 stats 서브 패키지는 확률분포 분석을 위한 다양한 기능을 제공한다.
Scipy, Scipy.stats는 아래와 같은 code로서 import하여 사용할 수 있다.
1
2
import scipy as sp
import scipy.stats as stats
확률분포 클래스
SciPy에서 확률분포 기능을 사용하려면 확률분포 클래스 객체를 생성한 수 이 객체의 메서드를 호출하여야 한다.
확률분포 객체를 생성하는 명령에는 다음과 같은 것들이 있다.
종류 | 이름 | 확률분포 |
---|---|---|
이산 | bernoulli |
베르누이분포 |
이산 | binom |
이항분포 |
이산 | multinomial |
다항분포 |
연속 | uniform |
균일분포 |
연속 | norm |
정규분포 |
연속 | beta |
베타분포 |
연속 | gamma |
감마분포 |
연속 | t |
스튜던트 t분포 |
연속 | chi2 |
카이 제곱분포 |
연속 | f |
F분포 |
연속 | dirichlet |
디리클리분포 |
연속 | multivariate_normal |
다변수 정규분포 |
모수지정
확률 분포 객체를 생성할 때는 분포의 형상을 구체적으로 지정하는 모수를 인수로 지정해야 한다.
모수적인 공통은 아래와 같다.
인수 | 의미 |
---|---|
loc |
일반적으로 분포의 기댓값 |
scale |
일반적으로 분포의 표준편차 |
확률분포 메서드
확률분포 객체가 가지는 메서드는 다음과 같다.
메서드 | 기능 |
---|---|
pmf |
확률질량함수(probability mass function) |
pdf |
확률밀도함수(probability density function) |
cdf |
누적분포함수(cumulative distribution function) |
ppf |
누적분포함수의 역함수(inverse cumulative distribution function) |
sf |
생존함수(survival function) = 1 - 누적분포함수 |
isf |
생존함수의 역함수(inverse survival function) |
rvs |
랜덤 표본 생성(random variable sampling) |
확률 밀도 함수
1
2
3
4
5
6
7
8
#확률밀도 함수
xx = np.linspace(-8, 8, 100)
pdf = rv.pdf(xx)
plt.plot(xx, pdf)
plt.title("Probability density function")
plt.xlabel("$x$")
plt.ylabel("$p(x)$")
plt.show()
누적분포함수
1
2
3
4
5
6
7
8
#누적분포함수
xx = np.linspace(-8, 8, 100)
cdf = rv.cdf(xx)
plt.plot(xx, cdf)
plt.title("Cumulative distribution function")
plt.xlabel("$x$")
plt.ylabel("$F(x)$")
plt.show()
무작위 표본 생성
무작위로 표본을 만들 때는 rvs메서드를 사용한다.
- size: 표본 생성 시 생성될 표본 크기
- random_state: 표본 생성 시 사용되는 시드 값
1
2
#무작위 표본 생성
rv.rvs(size=(3, 5), random_state=0)
array([[ 4.52810469, 1.80031442, 2.95747597, 5.4817864 , 4.73511598],
[-0.95455576, 2.90017684, 0.69728558, 0.7935623 , 1.821197 ],
[ 1.28808714, 3.90854701, 2.52207545, 1.24335003, 1.88772647]])
1
2
3
4
5
6
7
#랜덤 표본 생성 결과
sns.distplot(rv.rvs(size=10000, random_state=0))
plt.title("Random sample generation result")
plt.xlabel("Sample Value")
plt.ylabel("count")
plt.xlim(-8, 8)
plt.show()
참조: 원본코드
참초:데이터 사이언스스쿨
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.
Leave a comment