ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pandas] 데이터프레임 칼럼 값들의 개수 빈도수 카운트 :: value_counts value counts
    직접 해보기/Python 2024. 6. 16. 20:36
    728x90
    반응형

    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()


     

     

    728x90
    반응형