효율적인 합계(sum), 평균(mean), 중앙값(median) 계산으로 데이터 통계(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
)와 변수도 소개해서 실무 데이터 처리에도 유용합니다,