데이터 분석/python

collections.Counter

fullfish 2025. 10. 13. 10:33

기본 사용법

from collections import Counter

cnt = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
print(cnt)
# Counter({'a': 3, 'b': 2, 'c': 1})

내부적으로 딕셔너리처럼 작동 (key=요소, value=빈도)
cnt['a'] → 3
존재하지 않는 키는 자동으로 0 반환 (KeyError 안 남)

 

문자열

Counter("banana")
# Counter({'a': 3, 'n': 2, 'b': 1})

 

most_common()  많이 등장한 순으로 정렬된 리스트 반환

cnt = Counter("banana")
print(cnt.most_common())      # [('a', 3), ('n', 2), ('b', 1)]
print(cnt.most_common(2))     # [('a', 3), ('n', 2)] # 최빈값 3개

 

update(), subtract()

a = Counter({'a': 3, 'b': 1})
b = Counter({'a': 1, 'b': 2})

a.update(b)
print(a)  # Counter({'a': 4, 'b': 3})  ← 더하기

a.subtract(b)
print(a)  # Counter({'a': 3, 'b': 1})  ← 빼기 # 위에서 b더해지고 다시 뺴져서 똑같음
# 뺄 때 음수도 나옴

 

수학 연산

a = Counter(A=4, B=2, C=0)
b = Counter(A=1, B=2, C=3)

print(a + b)   # Counter({'A': 5, 'B': 4, 'C': 3})
print(a - b)   # Counter({'A': 3}) ← 음수나 0은 자동 제거
print(a & b)   # Counter({'B': 2}) ← 교집합(최솟값)
print(a | b)   # Counter({'A': 4, 'B': 2, 'C': 3}) ← 합집합(최댓값)

 

dict처럼 가능

cnt = Counter("apple")

print(cnt.keys())    # dict_keys(['a', 'p', 'l', 'e'])
print(cnt.values())  # dict_values([1, 2, 1, 1])
print(cnt.items())   # dict_items([('a',1), ('p',2), ('l',1), ('e',1)])

 

예시: 제일 많은 문자

s = "mississippi"
cnt = Counter(s)
max_char = max(cnt, key=cnt.get)
print(max_char)  # 'i'