0️⃣ 칼럼에 있는 값들의 개수 :: value_counts
- 특정 칼럼에 포함된 값들의 구성을 알고 싶을 때, value_counts 메소드를 유용하게 사용할 수 있습니다.
- 칼럼을 지정하면, 이 칼럼에 있는 모든 고유값들의 개수(counts)를 돌려주는 메소드입니다.
- 예시 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 비행편 데이터셋인데요,
출발시간(departure_time)칼럼에 포함된 데이터가 각각 몇 개인지 뽑아봤습니다.
# 지정한 칼럼에 있는 모든 고유값들의 개수(counts)
df['칼럼명'].value_counts()
1️⃣ 내림차순 정렬 없애기 :: sort=False
- 위 결과테이블을 보시면 counts 기준 내림차순으로 정렬되어 있습니다. 디폴트로 정렬되어 출력되는 거죠.
- sort 파라미터를 False로 두면 정렬을 없애고 출력시킬 수 있습니다.
df['칼럼명'].value_counts(sort=False)
2️⃣ 오름차순 정렬하기 :: ascending=True
- 내림차순 말고 오름차순으로 정렬하고 싶다면, ascending 파라미터를 True로 두면 됩니다.
- 오름차순 정렬한 데이터를 막대그래프로 시각화해봤습니다. 빈도수 차이가 한눈에 보이네요.
df['칼럼명'].value_counts(ascending=True)
df['칼럼명'].value_counts(ascending=True).plot(kind='bar')
3️⃣ 빈도수 대신 비율로 보기 :: normalize=True
- normalize 파라미터를 True로 두면 빈도수 값들이 정규화됩니다.
전부 합치면 1이되는 소수들이 되는데, 다시말해 비율(%)로 변환해서 볼 수 있다는 거죠.
- 아래 예시를 보시면 출발시간 중 아침에 해당하는 건 약 23.7% 로 가장 많았고, 심야는 약 0.4%로 가장 적었네요.
- 정규화값을 오름차순 정렬하고, 파이차트를 그려서 눈에 더 잘 들어오게 시각화 해봤습니다.
df['칼럼명'].value_counts(normalize=True)
df['칼럼명'].value_counts(normalize=True, ascending=True)
df['칼럼명'].value_counts(normalize=True, ascending=True).plot(kind='pie')
4️⃣ 인덱스 기준으로 정렬하기 :: sort_index()
- 빈도수 기준이 아니라 인덱스 순서대로 정렬하고 싶을 때는 어떻게 해야 할까요?
파라미터를 넣는대신, 끝에 .sort_index()를 추가하는 방식으로 정렬해볼 수 있습니다.
- 아래처럼 인덱스가 정렬됩니다.
- 해당 칼럼이 범주형 데이터라면: 인덱스가 문자열이므로 알파벳 A~Z 순서대로 정렬
- 해당 칼럼이 수치형 데이터라면: 인덱스가 숫자이므로 작은 숫자부터 오름차순 정렬
- 예시로 뽑아본 수치형 데이터 칼럼 'price'는 고유값이 너무 많아서 보이지도 않네요.
히스토그램으로 시각화해보았습니다. 대부분의 가격이 0~200 사이에 형성되어 있다는 걸 알 수 있습니다.
df['칼럼명'].value_counts().sort_index()
df['칼럼명'].value_counts().sort_index().plot(kind='hist')
5️⃣ 결과를 데이터프레임으로 보기 :: to_frame()
- 지금까지 뽑아본 빈도수 테이블은 Series 형태로 출력되었습니다.
좀더 보기 쉽게 만들거나 혹은, csv파일 등으로 추출하려면 데이터프레임으로 변환하는게 낫겠습니다.
- 끝에 .to_frame() 을 추가해서 데이터프레임으로 출력시킬 수 있습니다.
df['칼럼명'].value_counts().to_frame()