목차
- statistics.median() 예제 - 중앙값 구하기
- statistics.median() 정의
- statistics.median() 구문
statistics.median() 예제 - 중앙값 구하기
import statistics
print(statistics.median([1, 2, 3, 4, 5])) # 3
print(statistics.median([-3, 5.5, -5.5, 15])) # 1.25
statistics.median() 정의
주어진 데이터의 중앙값 (= 중간값) 구하기.
※ 중앙값 계산 전, 먼저 데이터를 오름차순 정렬.
※ 중앙값 = (n+1 / 2)번째 값.
※ 데이터가 홀수 개: 중간값.
※ 데이터가 짝수 개: 두 중간값의 평균.
※ Python 3.4 이상.
statistics.median() 구문
statistics.median(data)
[매개변수]
data
필수. 최소 1개 이상 데이터 있는 숫자 시퀀스.
※ 시퀀스 예: List, Tuple, Set 등※ data 없는 경우, StatisticsError 에러 반환.
[반환값]
float 자료형의 중앙값.
2022.05.24 - [개발 이야기/Python] - [코딩 테스트] 파이썬 코딩테스트 핵심 요약 (CheatSheet) - 코테 1시간전에 꼭 보자.
2022.05.08 - [개발 이야기/Python] - [음성인식 - 6라인] 가장 쉬운 음성인식 (STT) 해 보기
2022.04.30 - [개발 이야기] - [코테] 코딩 테스트 플랫폼 4종 - 백준, 리트코드, 프로그래머스, 코드시그널
2021.12.16 - [개발 이야기/Python] - 파이썬 오디오 라이브러리 Top 5종 (Python Audio Library )
2020.12.16 - [분류 전체보기] - [개발] 피보나치(Fibonacci) 수열 구현 7가지 방법 - 파이썬 실습/확인 바로하기
2020.05.09 - [개발 이야기] - [개발] 파이썬 문법 5분만에 읽히기 - 파이썬 기본 문법 요약/정리 8 가지
2018.03.03 - [개발 이야기/Python] - 피보나치(Fibonacci) 수열을 구현하는 7가지 방법 - 파이썬(Python) 피보나치 구현 7선
기본 개념 점검 : mean, median, mode
몇몇 코딩 테스트 문제를 풀다 보면 Easy 문제로 대표값을 출력하는 문제들이 몇몇 볼 수 있다.
대표적인 통계값으로 평균(Mean or average), 중위값 (median), 최빈값 (Mode)들이 자주 제시되곤 한다.
- 숫자배열이 `array`로 주어질 때,
- 평균 (mean): Average와 같은 의미로 사용되기 때문이 매우 익숙 할 것이다. 평균을 구해주면 된다. sum( array) / len(array)
- 중위값 (median) : array에 있는 값중에서 정렬 후 순서상 중위점에 있는 숫자이다. 따라서 정렬된 array를 필요로 한다.
그런데, Array의 아이템수가 짝수라면, 중위값이 2개가 된다. 이 때는 2개의 중위값의 평균이 median이다. (<-- 이것을 모르는 경우가 종종 있다.)- n이 array의 길이이고, array는 정렬되었다 가정,
- n이 홀수인 경우 : median = array[ n//2 번째 ]
- n이 짝수인 경우 : median = ( array[ n//2 번째 ] + array[ n//2 -1 번째 ] ) / 2
- 최빈값 (Mode): 발생 빈도가 가장 높은 값
- frequency가 array의 숫자들의 빈도이고, max of frequency 의 array value
mean, median, mode 쉽게 구하기 (라이브러리/패키지 사용)
예제를 위해서, 주어진 numerical array `list_nums`가 다음과 같다고 하자.
list_nums = [16, 12, 28, 8, 18, 17, 28, 24, 5, 4, 12, 16, 8, 4,4,4]더보기
list_nums를 정렬하면 다음과 같다.
sorted(list_nums)
# [4, 4, 4, 4, 5, 8, 8, 12, 12, 16, 16, 17, 18, 24, 28, 28]
[ Numpy 등 패키지 사용 ]
특별히 제약 사항이 주어지지 않는다면, 굳이 순수 Python으로 구할 필요가 있을까 싶다. 생산성을 위해서, 제약사항이 없다면, `Numpy`, `Pandas`, `Scipy`, `collections` 등을 사용해 주자
Python은 수치를 주로 다루기 때문에, `Numpy` 또는 `scipy`등의 패키지를 사용한다면 다음과 같이 쉽게 구할 수 있다.
평균 (mean)
import numpy as np mean = np.mean(list_nums) print(f'mean: {mean}') # mean: 13.0numpy.mean() 으로 구할 수 있다. pandas의 경우도 유사하다.
중위값 (median)
import numpy as np median = np.median(list_nums) print(f'median: {median}') # median: 12.0numpy.median() 으로 구할 수 있다.
최빈값 (mode)
from scipy import stats mode = stats.mode(list_nums)[0] print(f' mode : {mode[0]}') # mode : 4scipy.stats.mode()로 구할 수 있다.
mean, median, mode : 라이브러리/패키지 없이 구하기
경우에 따라서는 알고리즘 구현 역량을 보기 위해서, Numpy 등의 패키지 사용이 제한 되는 경우가 있다. `pip` 자체가 실행이 되지 않는 경우도 존재 한다. Numpy, Scipy, Pandas 등 수치관련 패키지 없이 순수 Python만을 사용하여 구하는 경우 아래와 같이 코딩할 수 있다. ( dictionary 관련 collections 도 제외한 순수 Python이다.)
평균 (mean)
list_nums = [16, 12, 28, 8, 18, 17, 28, 24, 5, 4, 12, 16, 8, 4,4,4] mean = sum(list_nums)/len(list_nums) n = len(list_nums) print(f' 1. mean : {mean}')기본제공 함수인 sum()과 len()을 활용하여 "전체합/길이"로 구할 수 있다.
중위값 (median)
list_nums = [16, 12, 28, 8, 18, 17, 28, 24, 5, 4, 12, 16, 8, 4,4,4] n = len(list_nums) list_sorted = sorted(list_nums) median = (list_sorted[n//2] + list_sorted[n//2-1])/2 if n%2==0 else list_sorted[n//2] print(f' median : {median}')정렬 후 순서상 중간에 있는 값을 구한다.
짝수인 경우 중간에 있는 값 앞뒤 숫자의 평균을 구한다.
최빈값 (mode)
list_nums = [16, 12, 28, 8, 18, 17, 28, 24, 5, 4, 12, 16, 8, 4,4,4] freq = {} for v in list_nums: freq.setdefault(v,0) freq[v] +=1 mode_value, mode_freq = max(freq.items(), key=lambda x: x[1]) print(f' mode : {mode_value}' )우선 값들이 가지고 있는 빈도수를 구한다. --> freq
빈도수 freq에서 가장 많은 count를 가진 숫자 `mode_value`를 구한다.
`collections` 사용이 가능한 경우는 Counter()를 통해서 조금 편하게 구할 수 있다.