NumPy 통계 함수(Statistical functions) 3가지 (sum/mean/median) 완벽 가이드

효율적인 합계(sum), 평균(mean), 중앙값(median) 계산으로 데이터 통계(Statistical functions) 분석 제대로 해보세요.

Statistical functions


1. NumPy와 통계 함수(Statistical functions) 소개

NumPy는 배열 계산에 특화된 파이썬 라이브러리로, 데이터 분석에서 빠르고 효율적인 통계(Statistical functions) 처리를 제공합니다.
중심 경향(central tendency)을 설명할 때 자주 언급되는 통계 지표인 평균(mean), 중앙값(median), 최빈값(mode) 중 우리는 mode는 제외하고 주요한 두 가지를 다룹니다 .


2. 합계 (sum)

2.1 1D 배열 합계

import numpy as np  
arr = np.array([1,2,3,4,5])  
total_sum = np.sum(arr)  
print(total_sum)  # 출력: 15
  • np.sum()은 배열 전체 원소 합계를 반환합니다.

2.2 2D 배열 축(axis) 기준 합계

arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(np.sum(arr2d, axis=0))  # 열 합: [12,15,18]
print(np.sum(arr2d, axis=1))  # 행 합: [6,15,24]
  • axis=0: 열 기준 합계.
  • axis=1: 행 기준 합계.

3. 평균 (mean)

3.1 1D 배열 평균

mean_value = np.mean(arr)
print(mean_value)  # 출력: 3.0
  • np.mean()은 평균(산술 평균)을 반환합니다.

3.2 2D 배열 축 기준 평균

print(np.mean(arr2d, axis=0))  # 열 평균: [4., 5., 6.]
print(np.mean(arr2d, axis=1))  # 행 평균: [2., 5., 8.]
  • axis=0: 열 방향 평균.
  • axis=1: 행 방향 평균.

3.3 결손값(nan) 포함된 평균

arr_nan = np.array([1,2,np.nan,4])
print(np.mean(arr_nan))       # nan 출력
print(np.nanmean(arr_nan))    # nan 무시하고 계산
  • 일반 mean()nan 포함 시 결과가 nan.
  • np.nanmean()을 쓰면 nan을 제외하고 계산할 수 있어요 (codecademy.com, numpy.org).

4. 중앙값 (median)

4.1 기본 설명

  • 중앙값은 값들을 정렬한 뒤 가운데 위치 값을 의미합니다.
  • 짝수 개 일 때는 중간 두 값의 평균입니다 .

4.2 1D와 2D 배열 중심값 계산

import numpy as np  
print(np.median(arr))  # 3.0

print(np.median(arr2d, axis=0))  # [4.,5.,6.]
print(np.median(arr2d, axis=1))  # [2.,5.,8.]
  • np.median()axis를 지원합니다 (numpy.org).

5. 추가 팁: 범위, 분산, 표준편차 소개

중심 경향 이외에 자주 쓰이는 통계 지표입니다:

  • 범위(range): np.ptp() 함수로 최댓값-최솟값 계산
  • 분산(variance): np.var() 함수로 데이터 흩어진 정도 파악
  • 표준편차(std): np.std() 함수, nanstd()nan 포함 상황 처리 가능

6. 코드 예시 정리

import numpy as np

arr = np.array([1,2,3,4,5])
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])

# 합계
sum1 = np.sum(arr)               
sum_col = np.sum(arr2d, axis=0)
sum_row = np.sum(arr2d, axis=1)

# 평균
mean1 = np.mean(arr)
mean_col = np.mean(arr2d, axis=0)
mean_row = np.mean(arr2d, axis=1)

# 중앙값
median1 = np.median(arr)
median_col = np.median(arr2d, axis=0)
median_row = np.median(arr2d, axis=1)

print(sum1, sum_col, sum_row)
print(mean1, mean_col, mean_row)
print(median1, median_col, median_row)

출력 예:

15  
[12 15 18]  
[6 15 24]

3.0  
[4. 5. 6.]  
[2. 5. 8.]

3.0  
[4. 5. 6.]  
[2. 5. 8.]

7. Statistical functions 에러 처리

np.sum() 관련 에러

1. TypeError: cannot perform reduce with flexible type

  • 원인: 리스트 안에 숫자 외에 문자열이나 None이 섞여 있음.
  • 예시: np.sum([1, 2, 'a'])
  • 해결: 데이터 정제 후 숫자만 배열로 구성하세요. arr = np.array([1, 2, 'a'], dtype=object) arr = [x for x in arr if isinstance(x, (int, float))] np.sum(arr)

2. ValueError: operands could not be broadcast together

  • 원인: 서로 크기가 맞지 않는 배열들을 합하려고 시도함.
  • 해결: 배열 shape을 .shape로 확인하고 맞춰주세요.

np.mean() 관련 에러

1. RuntimeWarning: Mean of empty slice

  • 원인: 평균 구할 데이터가 없음 (np.mean([])).
  • 해결: 배열이 비어 있는지 먼저 확인. if arr.size > 0: np.mean(arr) else: print("빈 배열입니다.")

2. nan 포함 → 결과가 nan

  • 해결: np.nanmean() 사용. np.nanmean([1, 2, np.nan]) # 1.5

np.median() 관련 에러

1. TypeError: '<' not supported between instances

  • 원인: 문자열이 섞인 배열 정렬 시도. np.median([1, 2, '3']) # 문자열 '3'이 문제
  • 해결: 숫자 타입만 필터링. arr = np.array([1, 2, '3'], dtype=object) nums = [x for x in arr if isinstance(x, (int, float))] np.median(nums)

2. ValueError: cannot convert float NaN to integer

  • 원인: 정수형 배열에서 NaN을 처리하지 못함.
  • 해결: dtype=float로 배열 생성하거나 np.nanmedian() 사용. arr = np.array([1, 2, np.nan], dtype=float) np.nanmedian(arr)

정리 요약

함수자주 나오는 에러해결 방법 요약
np.sum타입 혼합, broadcasting 오류숫자만 구성, shape 확인
np.mean빈 배열, NaN 포함크기 확인, nanmean 사용
np.median문자열 포함, NaN 처리 오류타입 정제, nanmedian 사용

8. 결론 및 태그

NumPy의 sum, mean, median 함수는 1차원 및 다차원 배열에서 손쉽게 통계치를 구할 수 있어 데이터 분석 기본기를 탄탄히 다집니다. 추가적으로 nan 처리 함수(nanmean, nanstd)와 변수도 소개해서 실무 데이터 처리에도 유용합니다,

By Mark

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다