ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pandas] 데이터프레임 교차표 분석하기 :: Crosstab
    직접 해보기/Python 2024. 6. 15. 00:22
    728x90
    반응형

    Pandas Crosstab 함수로 교차표 분석하고, 시각화까지 해보기!


    0️⃣  라이브러리 및 데이터셋 불러오기

    # 라이브러리 불러오기
    import pandas as pd
    import numpy as np
    
    # 데이터셋 가져와서 확인해보기
    df_clean = pd.read_csv('./Clean_Dataset.csv', encoding='cp949')
    df_clean

     


    1️⃣-1.  범주형 데이터 2개로 교차표 만들기 (crosstab)

    • pd.crosstab 함수로 교차표를 만들 수 있습니다.
    • index에 행이 될 칼럼의 이름, columns에 열이 될 칼럼의 이름을 넣어주시면 됩니다.
    # crosstab으로 범주형 데이터 2개에 대한 교차표 만들기
    pd.crosstab(
        index = df_clean['source_city'], 
        columns = df_clean['destination_city']
    )

     

     

    1️⃣-2.  교차표에 행/열별로 합계 추가하기 (subtotal, margins)

    • pd.crosstab 함수에 margins = True 파라미터를 추가해서, 아래와 같이 행/열별로 합계를 볼 수 있습니다.

     

     

    1️⃣-3.  교차표에 나오는 값들을 정규화하기 (normalize)

    • 교차표를 만들어도 값들이 너무 많고 제각각이라서 비교하기 힘들다면, 정규화하는 것도 방법 중에 하나입니다.
    • normalize = True 파라미터를 추가하면, 표의 값들이 전부 0~1 사이의 값으로 정규화됩니다.

     

     

     

     


    2️⃣  교차표에 나오는 값들을 차트로 시각화하기 (plot)

    • 특정변수에 교차표를 넣고, 이 변수에 plot 함수를 사용해서 차트를 그릴 수 있습니다.
    • 범주형 데이터이므로, kind = 'bar' 파라미터를 넣어서 막대그래프를 그렸습니다.
    • 그냥 막대그래프는 눈에 잘 안들어오네요.. stacked = True 파라미터를 추가해 누적 막대그래프로 변경했습니다.
    # 교차표 생성
    ct_1 = pd.crosstab(
        index = df_clean['source_city'], 
        columns = df_clean['destination_city']
    )
    
    # 막대그래프 그리기
    ct_1.plot(kind = 'bar')
    
    # 누적 막대그래프 그리기
    ct_1.plot(kind = 'bar', stacked = True)


    3️⃣.  교차표에서 수치형 데이터 값 집계하기 (Aggregation)

    • 교차표 자체는 범주형데이터 2개를 교차해서 만들지만, 내용을 수치형 데이터의 집계값으로 넣을 수 있습니다.
    • 아래처럼 행은 출발도시, 열은 도착도시로 두고, 각 셀에 넣을 값들은 티켓가격의 평균값으로 설정해보았습니다.
      values 파라미터에 집계할 수치데이터 칼럼을 넣고, aggfunc = 'mean' 으로 지정했습니다.
    • aggfunc 파라미터는 'mean', 'median', 'sum', 'max', 'min', 'std', 'var' 등으로 다양하게 넣을 수 있습니다. 
    # 데이터프레임 내 숫자 포맷 고정하기 (소수점 아래 2자리까지)
    pd.options.display.float_format = '{:,.2f}'.format
    
    # 출발-도착도시별로 티켓가격 평균 확인하기
    pd.crosstab(
        index = df_clean['source_city'],
        columns = df_clean['destination_city'],
        values = df_clean['price'], 
        aggfunc = 'mean'
    )

     


    4️⃣  교차표로 히트맵 그리기 (heatmap)

    • seaborn 라이브러리를 활용해서 히트맵까지 그려보겠습니다.
    • 히트맵을 그리니까 확실히 한눈에 비교되네요! 
    import seaborn as sns
    
    # 교차표 생성해서 변수에 넣기
    ct_2 = pd.crosstab(
        index = df_clean['source_city'],
        columns = df_clean['destination_city'],
        values = df_clean['price'], 
        aggfunc = 'mean'
    )
    
    # 히트맵 그리기
    sns.heatmap(ct_2, cmap = 'coolwarm', annot = True)

     

     

     

    728x90
    반응형