[파이썬] scipy에서 통계 (scipy.stats)

scipy는 파이썬의 과학 계산 패키지로, 다양한 과학 및 엔지니어링 분야에서 사용되며 통계 분석 또한 그 중 하나입니다. scipy의 scipy.stats 모듈은 확률 분포의 계산 및 통계 분석을 수행하는 데 도움이 되는 다양한 함수와 클래스를 제공합니다.

확률 분포 생성하기

scipy.stats 모듈은 다양한 확률 분포를 생성하는 함수를 제공합니다. 예를 들어, 정규 분포, 이항 분포, 포아송 분포 등을 생성할 수 있습니다.

import scipy.stats as stats

# 정규 분포 생성
normal_dist = stats.norm(loc=0, scale=1)

# 이항 분포 생성
binomial_dist = stats.binom(n=10, p=0.5)

# 포아송 분포 생성
poisson_dist = stats.poisson(mu=3)

확률 분포 기반 통계 분석하기

scipy.stats 모듈을 사용하여 확률 분포를 생성한 후, 이를 기반으로 다양한 통계 분석을 수행할 수 있습니다. 예를 들어, 확률 분포의 평균, 분산, 확률 밀도 함수 값, 누적 분포 함수 값 등을 계산할 수 있습니다.

import scipy.stats as stats

# 정규 분포 생성
normal_dist = stats.norm(loc=0, scale=1)

# 평균 계산
mean = normal_dist.mean()

# 분산 계산
variance = normal_dist.var()

# 확률 밀도 함수 값 계산
pdf_value = normal_dist.pdf(1.5)

# 누적 분포 함수 값 계산
cdf_value = normal_dist.cdf(-1.2)

통계 분석 기초

scipy.stats 모듈에는 확률 분포를 사용한 통계 분석을 위한 다양한 기능도 제공됩니다. 예를 들어, 정규성 검정, t-검정, 카이 제곱 검정 등을 수행할 수 있습니다.

import scipy.stats as stats

# 정규성 검정 (Shapiro-Wilk test)
data = [1.2, 2.3, 0.8, -1.5, 2.1, 0.5]
_, p_value = stats.shapiro(data)
if p_value > 0.05:
    print("데이터는 정규 분포를 따릅니다.")
else:
    print("데이터는 정규 분포를 따르지 않습니다.")

# t-검정
group1 = [6, 8, 7, 9, 10]
group2 = [5, 7, 6, 8, 9]
_, p_value = stats.ttest_ind(group1, group2)
if p_value < 0.05:
    print("두 집단은 통계적으로 유의미한 차이가 있습니다.")
else:
    print("두 집단은 통계적으로 유의미한 차이가 없습니다.")

# 카이 제곱 검정
observed_values = [10, 15, 20]
expected_values = [12, 14, 19]
_, p_value = stats.chisquare(observed_values, expected_values)
if p_value < 0.05:
    print("관찰된 값과 기대값은 통계적으로 유의미한 차이가 있습니다.")
else:
    print("관찰된 값과 기대값은 통계적으로 유의미한 차이가 없습니다.")

결론

scipy.stats 모듈을 사용하면 파이썬에서 간편하게 확률 분포를 생성하고 이를 기반으로 다양한 통계 분석을 수행할 수 있습니다. 이를 통해 데이터의 특성을 파악하고 유의미한 결론을 도출하는 통계적 분석을 수행할 수 있습니다.