코딩 연습

(파이썬) 최빈값 구하기 본문

Python

(파이썬) 최빈값 구하기

코딩아저씨 2016. 3. 15. 16:23
반응형

파이썬을 이용하여 최빈값(mode)를 구하기 위해서는 collections 모듈의 Counter 클래스를 알고 있어야 한다. Counter는 사전(dict) 클래스의 하위 클래스로 리스트나 튜플에서 각 데이터가 등장한 횟수를 사전 형식으로 돌려준다. 예를 들면 다음과 같다.

>>> from collections import Counter
>>> colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
>>> cnt = Counter(colors)
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

또한 Counter 클래스의 most_common() 메쏘드는 등장한 횟수를 내림차순으로 정리하여 다음과 같이 보여준다. 

>>> numbers = [1, 2, 3, 3, 4, 4, 4, 5, 5]
>>> from collections import Counter
>>> cnt = Counter(numbers)
>>> cnt.most_common()
[(4, 3), (3, 2), (5, 2), (1, 1), (2, 1)]

리스트(list)를 구성하는 요소들은 튜플(tuple)인데, 각 튜플의 첫 번째 요소는 numbers에 등장하는 숫자이고, 두 번째 요소는 각 숫자가 등장한 횟수이다. 만약 등장한 횟수가 같은 수들은 임의의 순서로 정렬되어 보여지게 된다. 만약 상위 3개의 결과만을 원한다면 다음과 같이 하면 된다. 

>>> cnt.most_common(3)
[(4, 3), (3, 2), (5, 2)]

최빈값을 얻어내고 싶다면 다음과 같이 하면 된다.

>>> mode = cnt.most_common(1)
>>> mode
[(4, 3)]
>>> mode[0][0]
4

자 이제 최빈값을 찾아내는 함수를 만든다면 다음과 같은 형태가 될 것이다. 

from collections import Counter

def modefinder(numbers):   #numbers는 리스트나 튜플 형태의 데이터
    c = Counter(numbers)
    mode = c.most_common(1)
    return mode[0][0]

만약 최빈수가 2개 이상 존재한다면 다음과 같이 함수를 만들 수 있다.

from collections import Counter

def modefinder(numbers):
    c = Counter(numbers)
    order = c.most_common()
    maximum = order[0][1]

    modes = []
    for num in order:
        if num[1] == maximum:
            modes.append(num[0])
    return modes

위와 같이 하면 최빈값들이 리스트의 형태로 modes에 저장되어 리턴 된다. 


반응형


Comments