기술 가이드

파이썬 statistics 모듈 완전 가이드

6 min read 개발자 문서 업데이트됨 20 Oct 2025
파이썬 statistics 모듈 완전 가이드
파이썬 statistics 모듈 완전 가이드

목차

  • 통계 모듈 소개
  • 기술 통계(평균, 중앙값, 분위, 분산 등)
  • 회귀와 상관
  • 정규분포 다루기
  • 언제 NumPy/Pandas/SciPy를 선택할까
  • 실무 체크리스트와 방법론
  • 비교 매트릭스
  • 결정 트리(언제 무엇을 쓸까)
  • 자주 묻는 질문

계산기와 파이썬 로고가 있는 이미지

통계 모듈 소개

파이썬의 statistics 모듈은 단순하고 직관적인 기술 통계와 기초 통계 연산을 제공하는 표준 라이브러리입니다. 별도 설치 없이 모든 표준 Python 환경에서 사용 가능합니다. 대화형 세션(IPython/Jupyter)이나 간단한 스크립트에서 빠른 계산을 할 때 유용합니다.

한 줄 정의: statistics 모듈은 평균, 중앙값, 분위수, 분산, 표준편차, 단순 선형회귀 등 기초 통계 도구를 제공합니다.

사용 예시:

import statistics
# 또는 대화형 환경에서는 필요한 함수만 임포트
from statistics import mean, median, stdev

중요: 대화형(인터프리터, 노트북)에서는 함수 직접 임포트가 편리합니다. 하지만 스크립트에서는 네임스페이스 충돌을 피하기 위해 모듈을 명시적으로 사용(import statistics)하는 것이 안전합니다.

기술 통계

기술 통계는 데이터의 중심 경향과 산포를 요약합니다. 아래는 statistics 모듈로 자주 사용하는 함수와 설명, 예제입니다.

평균(산술평균)

설명: 산술평균은 데이터값의 합을 샘플 수로 나눈 값입니다. 표본 평균(sample mean)은 흔히 x̄(엑스바)로 표기됩니다.

코드:

from statistics import mean
a = [4, 4, 3, 6]
print(mean(a))  # 4.25 -> 원문에 나온 값과 차이가 있을 수 있으니 입력 데이터와 출력 확인

노트: 원문 예제에서 평균 결과를 4.6이라고 했지만, 주어진 배열 [4,4,3,6]의 산술평균은 4.25입니다. 항상 입력값을 확인하세요.

fmean (빠르고 float 기반의 평균)

설명: fmean은 입력을 부동소수점으로 변환한 뒤 계산합니다. 대규모 데이터나 정확한 소수 연산을 선호할 때 유용합니다. 가중평균도 지원합니다.

from statistics import fmean
a = [4, 4, 3, 6]
weights = [1, 2, 3, 4]
print(fmean(a))
print(fmean(a, weights))

설명: 가중치가 있는 평균을 구할 때 weights 인자를 전달합니다.

기하평균(geometric_mean)

설명: 성장률 비교, 비율의 평균 등 곱셈적 관계를 요약할 때 사용합니다. 음수나 0이 있으면 계산할 수 없습니다.

from statistics import geometric_mean
print(geometric_mean([1.1, 1.2, 1.15]))

주의: 기하평균은 모든 항이 양수일 때만 유효합니다.

조화평균(harmonic_mean)

설명: 평균 속도나 비율처럼 역수 평균이 의미 있는 경우 사용합니다. 항목 중 0이 있으면 정의되지 않습니다.

from statistics import harmonic_mean
print(harmonic_mean([4, 4, 3, 6]))

비교: 항상 harmonic_mean <= geometric_mean <= arithmetic_mean 이 성립합니다(양수 데이터에 한함).

중앙값(median)과 최빈값(mode)

from statistics import median, mode
print(median([4, 4, 3, 6]))
print(mode([4, 4, 3, 6]))

설명: median은 데이터의 중앙값을, mode는 가장 자주 등장하는 값을 반환합니다. mode는 데이터에 유일한 최빈값이 없으면 예외를 발생시킬 수 있습니다.

분산(variance)과 표준편차(stdev, pstdev)

설명: 분산은 평균에서 데이터가 얼마나 퍼져 있는지를 나타내고, 표준편차는 분산의 제곱근입니다. 표본표준편차(stdev)는 n-1로 나누고, 모집단 표준편차(pstdev)는 n으로 나눕니다.

from statistics import stdev, pstdev, variance, pvariance
a = [4, 4, 3, 6]
print(stdev(a))
print(pstdev(a))
print(variance(a))
print(pvariance(a))

노트: 작은 표본에서 편향을 줄이려면 stdev(샘플 표준편차)를 사용하세요.

분위수와 사분위수(quantiles)

설명: quantiles 함수는 데이터를 분위수로 분할합니다. 기본값은 사분위수(25%, 50%, 75%)입니다.

from statistics import quantiles
print(quantiles([1,2,3,4,5,6,7,8]))

최소/최대는 내장 함수 min(), max()를 사용하세요.

print(min(a), max(a))

중요: 각 함수는 입력 데이터의 타입과 값 범위(예: 0 또는 음수)에 따라 결과가 달라질 수 있습니다. 예외 처리를 권장합니다.

회귀와 상관

statistics 모듈은 단변량 선형회귀와 상관계수 계산을 제공합니다. 내부적으로는 단순한 산술 기반 계산을 사용합니다.

단순 선형회귀

설명: 두 변수 x와 y에 대한 기울기(slope)와 y절편(intercept)을 계산합니다. 오직 두 변수만 지원하며 다중 회귀는 지원하지 않습니다.

from statistics import linear_regression
x = [1, 2, 3, 4, 5]
y = [5, 7, 9, 11, 13]
slope, intercept = linear_regression(x, y)
print(slope, intercept)  # slope=2, intercept=3

설명: 결과는 y = slope * x + intercept의 형태로 해석합니다. 이 함수는 플롯을 그리거나 예측값을 반환해주지 않습니다. 예측을 자동으로 하고 싶다면 slope와 intercept를 사용해서 직접 계산하세요.

def predict(x_val):
    return slope * x_val + intercept
print(predict(6))  # 15

제한: 이상치에 민감합니다. 더 견고한 회귀(예: RANSAC) 또는 다중 회귀(여러 설명변수)는 statsmodels, scikit-learn, Pingouin 등을 사용하세요.

상관계수(correlation)

설명: correlation 함수는 피어슨 상관계수를 계산합니다. 출력값은 -1에서 1 사이입니다.

from statistics import correlation
print(correlation(x, y))  # 1.0 -> 완전한 양의 상관

노트: 상관계수는 선형 관계만 측정합니다. 비선형 관계는 탐지하지 못합니다.

정규분포 다루기

statistics 모듈은 NormalDist 클래스를 제공하여 정규분포 관련 누적분포함수(CDF), 확률밀도함수(PDF) 등을 계산할 수 있습니다.

예: 남성 키 분포(원문 예제 기반)

원문 데이터 요약: 성인 남성(20세 이상)의 평균 키가 175.1cm이고 표준오차로부터 계산한 표준편차가 약 15.56cm라는 가정이 있습니다.

표준편차 계산(원문 방식):

import math
math.sqrt(2690) * 0.3  # 표본수의 제곱근에 표준오차를 곱한 값

정규분포 객체 생성:

from statistics import NormalDist
men_height = NormalDist(mean=175.1, sd=15.56)

160cm에서 180cm 사이 남성 비율 구하기:

portion = men_height.cdf(180) - men_height.cdf(160)
print(portion)  # 약 0.45 (45%)

주의: 실제 모집단 분포가 정규분포를 따르지 않으면 해석에 주의해야 합니다. 실측 데이터로 Q-Q 플롯 등 가정 검정을 하는 것이 안전합니다.

언제 NumPy/Pandas/SciPy를 선택할까

statistics 모듈은 학습용, 빠른 계산, 스크립트 기반의 간단한 분석에 적합합니다. 반면 NumPy/Pandas/SciPy는 대규모 데이터, 벡터화 연산, 고급 통계분석 및 시계열 분석에 적합합니다.

비교 요약:

  • statistics: 표준 라이브러리, 설치 불필요, 작은 데이터셋, 단순 계산
  • NumPy: 대규모 수치연산, 벡터화, 빠른 배열 연산
  • Pandas: 표 형식 데이터 처리, 그룹별 집계, 결측치 처리
  • SciPy: 고급 통계 검정, 적합도 검정, 최적화 알고리즘

권장 사용 사례:

  • 빠른 요약 통계나 스크립트 내 간단한 계산 -> statistics
  • 벡터화가 필요하거나 대규모 배열 연산 -> NumPy
  • CSV/테이블 형태의 데이터 전처리와 집계 -> Pandas
  • 전문 통계 테스트와 최적화 -> SciPy

실무용 짧은 방법론(Exploratory Numeric Column 분석)

  1. 데이터 확인: 결측치, 타입, 분포 형태 파악
  2. 정리: 결측치 처리/이상치 표시
  3. 중심 경향 계산: mean, median, mode
  4. 산포 계산: variance, stdev, IQR(사분위 범위)
  5. 분포 검사: 히스토그램, Q-Q 플롯, 정규성 검정
  6. 필요하면 회귀/상관 분석 수행
  7. 결과 보고: 요약표와 해석

체크리스트(역할 기반)

  • 개발자: 스크립트에 statistics 모듈을 명시적으로 import, 입력 검증 추가, 예외 처리
  • 데이터 과학자: 통계적 가정 검증, 필요 시 NumPy/Pandas로 확장
  • 학생/교육자: 개념 설명용 예제와 시각화 병행

사례별 반례: 언제 실패하는가

  • 대용량 배열(수백만 행): 속도 문제, 메모리 문제 발생
  • 결측치/비수치 데이터 다량 존재: 사전 전처리 필요
  • 다변량(multi-variable) 회귀 또는 비선형 관계가 핵심인 경우: 지원 부족
  • 이상치가 많을 때: 표준적 평균/분산은 오해를 유발할 수 있음

대안: NumPy, Pandas, statsmodels, scikit-learn, SciPy

비교 매트릭스

목적statisticsNumPyPandasSciPyscikit-learn
설치 필요성없음필요필요필요필요
대용량 처리낮음높음높음높음높음
표 형식 처리낮음중간높음낮음낮음
고급 통계 테스트낮음중간중간높음중간
회귀(다중)불가부분가능(데이터 준비)일부강력

결정 트리: 언제 무엇을 사용할까

flowchart TD
  A[데이터 크기 확인] -->|작고 단순| B[statistics 사용]
  A -->|중간~큰| C[NumPy/Pandas]
  C --> D{분석 목적}
  D -->|기초 요약| E[NumPy/Pandas]
  D -->|고급 통계 검정| F[SciPy / statsmodels]
  D -->|머신러닝| G[scikit-learn]

테스트 케이스 및 수용 기준

간단한 수용 기준 예시:

  • 평균(mean) 함수는 모든 숫자형 리스트에서 올바른 산술평균을 반환해야 한다.
  • stdev는 표본 표준편차(n-1) 공식을 사용해 계산해야 한다.
  • linear_regression은 입력 길이가 같고 두 변수간 선형관계가 있는 경우 올바른 slope, intercept를 반환해야 한다.

간단한 단위 테스트 스니펫:

from statistics import mean, stdev, linear_regression
assert mean([1, 2, 3]) == 2
assert round(stdev([1, 2, 3]), 6) == round(((1+0+1)/2)**0.5, 6)
slope, intercept = linear_regression([1,2],[2,4])
assert slope == 2 and intercept == 0

역할별 체크리스트 (세부)

개발자:

  • 모듈 임포트 방식을 명시적으로 사용
  • 사용자 입력 검증 추가
  • 예외 케이스(빈 리스트, 0 포함, 음수 등) 처리

데이터 과학자:

  • 결과의 통계적 가정(정규성, 독립성 등) 점검
  • 필요한 경우 대체 라이브러리로 확장

학생/교육자:

  • 각 함수의 수학적 정의를 함께 설명
  • 작은 예제로 직관을 확인

대체 접근법(빠른 요약)

  • 벡터화와 성능이 필요하면 NumPy 사용
  • 테이블 형태 데이터(열·행) 처리와 그룹집계가 필요하면 Pandas 사용
  • 고급 통계 검정, 최적화, 신뢰구간 등은 SciPy/statsmodels 사용
  • 머신러닝이나 예측 모델링은 scikit-learn 사용

사례: 간단한 분석 워크플로우 예시

문제: CSV 파일의 ‘height’ 열에서 요약 통계를 구하여 보고서를 생성한다.

  1. Pandas로 CSV 로드
  2. 결측치 확인 및 제거/대체
  3. statistics 모듈로 중심 경향과 산포 계산
  4. 시각화(히스토그램, 박스플롯)으로 분포 확인
  5. 필요 시 NormalDist로 특정 구간 비율 계산

단계별 스니펫:

import pandas as pd
from statistics import mean, median, stdev

df = pd.read_csv('people.csv')
heights = df['height'].dropna().tolist()
print('평균:', mean(heights))
print('중앙값:', median(heights))
print('표준편차:', stdev(heights))

보안 및 개인정보 주의사항

개인 신체정보(예: 키)처럼 식별 가능한 데이터로 통계 분석을 할 때는 익명화와 최소수집 원칙을 지키세요. 결과를 공개할 때는 식별 가능성이 남아 있지 않은지 확인합니다.

자주 묻는 질문

statistics 모듈은 설치가 필요한가요?

아니요. 표준 라이브러리이므로 별도 설치 없이 사용할 수 있습니다.

대규모 데이터에서 사용해도 괜찮나요?

성능과 메모리 면에서 한계가 있습니다. 대형 배열에는 NumPy/Pandas를 권장합니다.

다중 회귀(여러 설명변수)는 가능한가요?

statistics 모듈은 단순 선형회귀만 지원합니다. 다중 회귀는 statsmodels나 scikit-learn을 사용하세요.

요약

  • statistics 모듈은 간단한 기술 통계와 단순 회귀에 적합합니다.
  • 대용량이나 고급 분석이 필요하면 NumPy/Pandas/SciPy로 확장하세요.
  • 항상 입력 데이터의 특성(결측치, 이상치, 음수 등)을 확인하세요.

중요: 스크립트 환경에서는 함수 충돌 위험을 줄이기 위해 모듈명을 명시적으로 사용하세요.

파이썬 인터프리터에서 statistics 모듈로 기술 통계 예시를 보여주는 스크린샷

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

아이폰 키보드 햅틱 켜는 법 - iOS 16 가이드
가이드

아이폰 키보드 햅틱 켜는 법 - iOS 16 가이드

Android에서 Facebook 데스크톱 사이트 보기
가이드

Android에서 Facebook 데스크톱 사이트 보기

YouTube 광고 차단 감지 우회 방법 2025
가이드

YouTube 광고 차단 감지 우회 방법 2025

인터넷 추적 차단: 데스크톱·모바일 추천 도구
프라이버시

인터넷 추적 차단: 데스크톱·모바일 추천 도구

AnDoSid로 Android에서 네트워크 DDoS 테스트하기
보안

AnDoSid로 Android에서 네트워크 DDoS 테스트하기

온라인으로 문서 보기: 호환성 문제 해결
문서관리

온라인으로 문서 보기: 호환성 문제 해결