파이썬 최빈값 설명

최빈값은 주어진 자료에서 가장 많이 등장하는 값입니다.

최빈값은 하나이거나 여러개 이거나 아니면 존재하지 않을 수 있습니다.

최빈값이 하나인 경우: number=[1,1,1,2,2,3] number 리스트를 참고했을 때 리스트에서 가장 많이 등장하는 값은 1 이므로 number리스트의 최빈값은 1이라고 할 수 있습니다. 최빈값이 여러개인 경우: number=[1,1,2,2,3,4] number 리스트를 참고했을 때 리스트에서 1이 두 번, 2가 두 번, 3,4는 각각 한 번 등장했으므로 number리스트의 최빈값은 1,2라고 할 수 있습니다. 최빈값이 존재하지 않는 경우: 모든 원소가 같거나 모든 원소가 다르다면 최빈값은 존재하지 않습니다. number1=[1,1,1,1,1,1], number2=[1,2,3,4,5,6] number1,number2 리스트를 참고했을 때 number1은 모든 원소가 같고, number2는 모든 원소가 다르므로 최빈값은 존재하지 않습니다. 이번 포스트에서는 리스트 자료에서 최빈값을 구하는 방법들을 정리하겠습니다.

파이썬 최빈값 구하는 방법

방법1. 딕셔너리로 최빈값 구현하기

어떤 숫자가 몇 번 등장했는지 딕셔너리로 정리하는 방법입니다. “숫자(key):등장횟수(value)” 로 딕셔너리 구성해서 최빈값을 구할 수 있습니다.

number = [1,2,3,4,5,5]
# "숫자(key):등장횟수(value)" 로 딕셔너리 구성

# 숫자(key) = num_keys
num_keys = sorted(set(number))

# "숫자:등장횟수" 를 집어넣을 딕셔너리(counted_num) 생성
counted_num = {}

#딕셔너리에 key,value 집어넣기
for i in num_keys:
	counted_num[i]=number.count(i)
#최빈값 지정	(최빈값 = mode)
mode = max(counted_num.values())
# 모든 원소가 같거나 모든 원소가 다르다면
if  mode == len(number) or mode == 1:
    print("최빈값이 존재하지 않습니다.")
else:
# num_count딕셔너리의 key와value를 items()로 추출
    for num, count in counted_num.items():
        if count == mode:
            print("최빈값:{}".format(num))
            print("등장횟수:{}".format(count))

실행결과

최빈값:5
등장횟수:2

방법2. 파이썬 Counter 활용

파이썬의 Counter를 이용해서 최빈값을 구하는 방법입니다. 방법1에서는 “숫자:등장횟수” 를 집어넣을 딕셔너리(counted_num)를 만들 때 반복문을 이용했는데 Counter을 이용하면 이러한 과정을 생략할 수 있습니다.

Counter 정리하기

#collections모듈에서 Counter 클래스 가져오기
from collections import Counter

number = [1,2,3,4,5,5]
#Counter클래스로 "숫자:등장횟수"로 이루어진 딕셔너리(counted_num) 바로 생성
counted_num = Counter(number)

#최빈값 지정
mode = max(counted_num.values())
# 모든 원소가 같거나 모든 원소가 다르다면
if  mode == len(number) or mode == 1:
    print("최빈값이 존재하지 않습니다.")
else:
# num_count딕셔너리의 key와value를 items()로 추출
    for num, count in counted_num.items():
        if count == mode:
            print("최빈값:{}".format(num))
            print("등장횟수:{}".format(count))

실행결과

최빈값:5
등장횟수:2