데이터 분석을 하다 보면 특정 값이 데이터에 몇 번 등장하는지, 즉 각 항목의 빈도(frequency)를 확인해야 하는 경우가 매우 자주 있습니다. 이 글에서는 Pandas 라이브러리의 value_counts() 함수를 사용해 시리즈(Series)에 담긴 각 요소의 빈도를 간단하게 계산하는 방법을 소개합니다.
value_counts() 함수란?
value_counts()는 pandas에서 제공하는 대표적인 빈도 분석 함수로, 시리즈 내부의 고유값(unique values)과 각 값의 등장 횟수를 반환합니다. 결과는 별도 설정 없이도 빈도가 높은 순서대로 자동 정렬되어 출력되므로, 어떤 값이 가장 많이 나타나는지 한눈에 파악할 수 있습니다.
알고리즘
1단계: 분석할 Pandas 시리즈를 정의합니다. 2단계: value_counts() 함수를 호출하여 각 항목의 빈도를 출력합니다.
예제 코드
아래 예제에서는 숫자 10부터 60까지 다양한 값이 섞여 있는 시리즈를 만들고, 각 값의 빈도를 계산해 보겠습니다.
import pandas as pd
series = pd.Series([10,10,20,30,40,30,50,10,60,50,50])
print("Series:\n", series)
frequency = series.value_counts()
print("\nFrequency of elements:\n", frequency)
실행 결과
Series: 0 10 1 10 2 20 3 30 4 40 5 30 6 50 7 10 8 60 9 50 10 50 dtype: int64 Frequency of elements: 50 3 10 3 30 2 20 1 40 1 60 1 dtype: int64
결과 해석
출력 결과를 살펴보면 다음과 같은 인사이트를 얻을 수 있습니다.
- 50과 10은 각각 3번씩 등장해 가장 빈도가 높은 값입니다.
- 30은 2번, 나머지 값들(20, 40, 60)은 1번씩 등장했습니다.
- 결과는 Series 형태로 반환되며, 인덱스에는 원래의 값, 값(value)에는 빈도가 저장됩니다.
추가 팁: 유용한 옵션들
value_counts()는 다음과 같은 옵션을 함께 사용하면 더욱 편리합니다.
normalize=True: 전체 개수 대비 비율(상대 빈도)을 반환합니다.ascending=True: 결과를 오름차순으로 정렬합니다.dropna=False: 결측치(NaN)도 빈도 계산에 포함합니다.
# 상대 빈도(비율) 구하기 ratio = series.value_counts(normalize=True) print(ratio)
이처럼 value_counts() 하나만으로 범주형 데이터의 분포를 빠르게 파악할 수 있어, 탐색적 데이터 분석(EDA) 단계에서 필수적인 도구라고 할 수 있습니다.