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

Python – 특정 백분율 범위에 속하는 요소 빈도 구하기

리스트에서 특정 백분율 범위에 해당하는 빈도를 가진 요소를 찾아야 하는 경우가 있습니다. 이럴 때 파이썬의 Counter 클래스와 간단한 반복문을 조합하면 손쉽게 해결할 수 있습니다.

Counter는 컬렉션 모듈(collection module)에서 제공하는 도구로, 리스트와 같은 반복 가능한 객체를 전달하면 각 요소가 몇 번 등장했는지 자동으로 계산해 딕셔너리 형태로 반환해 줍니다. 이 결과를 활용해 전체 데이터에서 차지하는 비중(백분율)을 구하고, 원하는 범위에 들어가는 요소만 추출할 수 있습니다.

예제 코드

다음은 13% 이상 60% 이하의 빈도 비율을 가진 요소를 찾는 예제입니다.

from collections import Counter

my_list = [56, 34, 78, 90, 11, 23, 6, 56, 79, 90]

print("The list is :")
print(my_list)

start, end = 13, 60

my_freq = dict(Counter(my_list))

my_result = []
for element in set(my_list):
    percent = (my_freq[element] / len(my_list)) * 100
    if percent >= start and percent <= end:
        my_result.append(element)

print("The result is : ")
print(my_result)

실행 결과

The list is :
[56, 34, 78, 90, 11, 23, 6, 56, 79, 90]
The result is :
[56, 90]

코드 설명

  • 먼저 collections 모듈에서 Counter를 임포트하여 환경을 준비합니다.

  • 숫자로 구성된 리스트를 정의하고 콘솔에 출력합니다.

  • 빈도 비율의 하한값(start)과 상한값(end)을 각각 13과 60으로 설정합니다.

  • Counter를 이용해 리스트의 각 요소별 빈도를 담은 딕셔너리를 만들어 변수에 저장합니다.

  • 결과를 담을 빈 리스트를 하나 생성합니다.

  • set()으로 중복을 제거한 요소들을 순회하면서, 각 요소의 빈도를 전체 길이로 나누고 100을 곱해 백분율을 계산합니다.

  • 계산된 백분율이 start 이상이고 end 이하라면 해당 요소를 결과 리스트에 추가합니다.

  • 마지막으로 최종 결과를 콘솔에 출력합니다.

참고 사항

위 예제에서 리스트의 길이는 10이므로, 한 번 등장한 요소의 백분율은 10%, 두 번 등장한 요소는 20%입니다. 따라서 13~60% 범위 조건을 만족하는 것은 두 번씩 등장한 5690뿐입니다. 만약 범위 경계값 포함 여부를 조절하고 싶다면 비교 연산자(>=, <=)를 >, < 로 변경하면 됩니다. 또한 리스트가 매우 클 경우 set(my_list) 대신 Counter의 키(my_freq.keys())를 순회하면 중복 제거 과정을 생략해 약간의 성능 향상을 얻을 수 있습니다.