해당 문서는 SciPy 라이브러리의 stats 모듈에 대해 자세히 다룬다.
Confidence Interval
Hypothesis
SciPy에서 stats 모듈은 확률 분포, 통계적 추론, 가설 검정에 대한 기법을 제공한다.
import scipy.stats as stats
Descriptive Statistics(기술 통계)는 수집된 데이터를 정리하여 중심 경향성, 분포 등 전반적인 특성을 쉽게 파악하는 기법이다.
import numpy as np
a = np.array([1, 2, 2, 3, 3, 3, 4, 5, 9])
Descriptive Statistics: stats.describe(a)
stats.describe(a)
# DescribeResult(nobs=np.int64(9),
# minmax=(np.int64(1),
# np.int64(9)),
# mean=np.float64(3.5555555555555554),
# variance=np.float64(5.527777777777778), # 표본 분산
# skewness=np.float64(1.42567921722749),
# kurtosis=np.float64(1.3153834499128827)
# )
Trimmed Mean(절사평균): stats.tmean(a, limits=None)
limits=(lower bound, upper bound)stats.tmean(a, limits=(2, 5))
# np.float64(3.142857142857143)
Probability Distributions(확률분포)는 확률변수가 특정한 값을 가질 확률을 나타낸 함수이다.
Discrete Probability Distribution(이산형 확률 분포)은 확률변수가 취하는 값들이 유한하고 셀 수 있는 경우, 그 값을 가질 확률에 대응시켜주는 확률 분포이다.
Bernoulli Distribution: stats.bernoulli(p)
p = 0.3
# Descriptive Statistics
stats.bernoulli.mean(p) # np.float64(0.3)
stats.bernoulli.median(p) # np.float64(0.0)
stats.bernoulli.var(p) # np.float64(0.21)
stats.bernoulli.std(p) # np.float64(0.458257569495584)
# Moments
mean, var, skew, kurt = stats.bernoulli.stats(p, moments='mvsk')
# Probability Mass Function
stats.bernoulli.pmf(k=1, p=p) # 성공 확률
# np.float64(0.3)
stats.bernoulli.pmf(k=0, p=p) # 실패 확률
# np.float64(0.7)
# Cumulative Distribution Function
stats.bernoulli.cdf(k=0, p=p)
# np.float64(0.7)
# Random Variates
stats.bernoulli.rvs(p, size=10, random_state=54)
# array([0, 0, 0, 0, 0, 1, 1, 1, 0, 0])
# 확률 변수 지정
rv = stats.bernoulli(p=0.3)
# Descriptive Statistics
rv.mean() # np.float64(0.3)
rv.median() # np.float64(0.0)
rv.var() # np.float64(0.21)
rv.std() # np.float64(0.458257569495584)
# Moments
mean, var, skew, kurt = rv.stats(moments='mvsk')
# Probability Mass Function
rv.pmf(k=1) # 성공 확률
# np.float64(0.3)
rv.pmf(k=0) # 실패 확률
# np.float64(0.7)
# Cumulative Distribution Function
rv.cdf(x=0)
# np.float64(0.7)
# Random Variates
rv.rvs(10, random_state=54)
# array([0, 0, 0, 0, 0, 1, 1, 1, 0, 0])
Binomial Distribution: stats.binom()
n = 10
p = 0.3
# Descriptive Statistics
stats.binom.mean(n, p) # np.float64(3.0)
stats.binom.median(n, p) # np.float64(3.0)
stats.binom.var(n, p) # np.float64(2.1)
stats.binom.std(n, p) # np.float64(1.449137674618944)
# Moments
mean, var, skew, kurt = stats.binom.stats(n, p, moments='mvsk')
# Probability Mass Function
stats.binom.pmf(k=3, n=n, p=p) # k번 성공할 확률
# np.float64(0.26682793199999977)
# Cumulative Distribution Function
stats.binom.cdf(k=3, n=n, p=p)
# np.float64(0.6496107184000002)
# Random Variates
stats.binom.rvs(n, p, size=10, random_state=54)
# array([3, 2, 2, 3, 0, 6, 4, 4, 4, 1])
# 확률 변수 지정
rv = stats.binom(n = 10, p = 0.3)
# Descriptive Statistics
rv.mean() # np.float64(3.0)
rv.median() # np.float64(3.0)
rv.var() # np.float64(2.1)
rv.std() # np.float64(1.449137674618944)
# Moments
mean, var, skew, kurt = rv.stats(moments='mvsk')
# Probability Mass Function
rv.pmf(k=3) # k번 성공할 확률
# np.float64(0.26682793199999977)
# Cumulative Distribution Function
rv.cdf(x=3)
# np.float64(0.6496107184000002)
# Random Variates
rv.rvs(size=10, random_state=54)
# array([3, 2, 2, 3, 0, 6, 4, 4, 4, 1])