Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 리스트에서 최빈값(가장 빈도가 높은 요소) 찾는 방법

통계 데이터 분석에서는 주어진 값 목록에서 가장 자주 나타나는 값, 즉 최빈값을 찾는 작업이 매우 흔합니다. Python은 이러한 값을 손쉽게 구할 수 있는 여러 가지 방법을 제공하는데, 대표적인 두 가지 접근 방식을 소개합니다.

1. Counter 사용하기

collections 모듈의 Counter 클래스에는 주어진 리스트에서 가장 많이 등장한 요소를 바로 찾아주는 기능이 있습니다. most_common() 함수에 인자로 1을 전달하면 빈도가 가장 높은 요소 하나를, 2를 전달하면 상위 두 개의 요소를 반환합니다.

예제 코드

from collections import Counter

# 주어진 리스트
listA = ['Mon', 'Tue', 'Mon', 9, 3, 3]

print("Given list : ", listA)

# 빈도가 가장 높은 요소 추출
Newlist1 = Counter(listA).most_common(1)
Newlist2 = Counter(listA).most_common(2)

# 결과 출력
print("가장 빈도가 높은 요소 1개 : ", Newlist1)
print("가장 빈도가 높은 요소 2개 : ", Newlist2)

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Given list : ['Mon', 'Tue', 'Mon', 9, 3, 3]
가장 빈도가 높은 요소 1개 : [('Mon', 2)]
가장 빈도가 높은 요소 2개 : [('Mon', 2), (3, 2)]

출력 결과에서 볼 수 있듯이 각 요소는 (요소, 빈도) 형태의 튜플로 반환되므로, 값과 함께 등장 횟수까지 한 번에 확인할 수 있다는 장점이 있습니다.

2. statistics 모듈의 mode 함수 사용하기

statistics 모듈의 mode() 함수는 통계학에서 말하는 최빈값(mode)을 계산해주는 내장 함수입니다. 리스트에서 빈도가 가장 높은 요소를 그대로 반환하며, 만약 빈도가 같은 요소가 여러 개라면 리스트에서 먼저 등장한 요소가 결과로 출력됩니다.

예제 코드

from statistics import mode

# 주어진 리스트
listA = ['Mon', 'Tue', 'Mon', 9, 3, 3]
listB = [3, 3, 'Mon', 'Tue', 'Mon', 9]

print("Given listA : ", listA)
print("Given listB : ", listB)

# 최빈값 계산
Newlist1 = mode(listA)
Newlist2 = mode(listB)

# 결과 출력
print("listA의 최빈값 : ", Newlist1)
print("listB의 최빈값 : ", Newlist2)

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Given listA : ['Mon', 'Tue', 'Mon', 9, 3, 3]
Given listB : [3, 3, 'Mon', 'Tue', 'Mon', 9]
listA의 최빈값 : Mon
listB의 최빈값 : 3

두 방법의 차이점 정리

두 리스트 모두 'Mon'과 숫자 3이 각각 2번씩 등장하지만, 결과가 서로 다릅니다. mode() 함수는 동률일 경우 먼저 등장한 요소를 반환하기 때문에 listA에서는 'Mon', listB에서는 3이 선택된 것입니다. 반면 Counter.most_common()은 빈도순으로 정렬된 전체 결과를 확인할 수 있어, 단순히 최빈값 하나뿐 아니라 상위 N개의 요소와 등장 횟수를 함께 파악해야 하는 경우에 더 유용합니다.