ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [matplotlib][seaborn] 데이터프레임으로 막대그래프 그리기 :: plt.bar sns.barplot
    직접 해보기/Python 2024. 6. 26. 00:22
    728x90
    반응형

    ✅ 막대 그래프 (바 그래프)

    선 그래프 (Line Plot) matplotlib 메소드 seaborn 메소드
    •범주/카테고리에 따른 수량과 통계량을 살펴보기에 적합함
    •범주별 수치를 한눈에 대소비교 하기에 좋음
    plt.bar() sns.barplot()

    0️⃣  패키지 & 데이터프레임 불러오기

    • 예시가 될 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 입니다. 
    • airline(비행편)에 따라 price(티켓가격) 평균이 어떻게 달라지는지, 막대 그래프로 살펴보고자 합니다.
      groupby 메소드로 평균값 데이터셋을 만든 다음 시각화를 진행해보겠습니다.
    # 패키지 불러오기
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 데이터셋 불러오기
    df = pd.read_csv('./Clean_Dataset.csv', encoding='cp949')
    df = df.drop([df.columns[0]], axis=1)
    
    # airline(비행편)별 price(티켓가격) 평균값
    airline_price = df.groupby(by='airline').mean(numeric_only=True)[['price']]


    1️⃣  plt 막대 그래프 그리기  ::  plt.bar

    • 막대그래프 생성: plt.bar(x=범주데이터, height=범주별 수치데이터)
    • 데이터라벨 표시: plt.text() 활용 (아래 코드 참조)
    • 눈금선 표시: plt.grid(True)
    • x,y축 이름 표시하기: plt.xlabel('x축 이름'), plt.ylabel('y축 이름')

     

    # 차트 영역 지정하기
    plt.figure()
    
    # 차트에서 한글 표시하기
    plt.rcParams['font.family'] = "NanumBarunGothic"
    plt.rcParams['axes.unicode_minus'] = False
    
    # 막대그래프 그리기
    plt.bar(
        x = airline_price.index,         # x축 = 범주
        height = airline_price['price'], # y축 = 막대 높이 = 범주별 수치
        color = 'c', edgecolor = 'k'     # 막대, 테두리 색상 설정
    )
    # 데이터 라벨 표시하기
    for i in range(len(airline_price)):
        plt.text(
            x = airline_price.index[i],               # 라벨 위치 x축
            y = airline_price['price'][i],            # 라벨 위치 y축
            s = np.round(airline_price['price'][i]),  # 표시할 데이터 (반올림)
            ha='center')                              # 막대 가운데 표시
        
    # 눈금선 표시하기
    plt.grid(True, 
        linewidth = 1, linestyle = ':'   # 눈금선 두께, 스타일 설정
    )
    # x,y축 이름 정하기
    plt.xlabel('비행사 (airline)', labelpad = 10)
    plt.ylabel('티켓가격 (price)', labelpad = 10)
    
    # 차트 표시하기
    plt.show()

     

    • Air_India와 Vistara의 가격만 특히 높습니다. 비행사만 기준으로 나눠서 보니 데이터가 이렇게 쏠려서 보이는 것 같아요.
      좌석클래스 별로도 한번더 나눠서 막대그래프를 다시 그려보겠습니다.

    2️⃣  sns 막대 그래프 그리기  ::  sns.barplot

    • 그래프 배경, 팔레트, 폰트 등 스타일 지정: sns.set_theme()
    • 막대그래프 생성: sns.barplot(data=데이터프레임, x=범주데이터, y=범주별 수치데이터, hue=색상으로 구분할 범주)
    • 범례 위치 지정: sns.move_legend(barplot, '범례 위치')
    • 데이터라벨 표시: barplot.bar_label() 활용 (아래 코드 참조)
    # 그래프 스타일 지정
    sns.set_theme(
        style='whitegrid',
        palette='muted',
        font='NanumBarunGothic',
        rc = {'figure.figsize' : (12,6),
              'axes.unicode_minus' : False}
    )
    # 막대그래프 그리기
    barplot1 = sns.barplot(data=df, x='airline', y='price', hue='class')
    
    # 축 범위, 축 이름, 그래프 제목 지정하기
    barplot1.set(
        xlabel = '비행사 (airline)',
        ylabel = '티켓 가격 (price)',
        title = '비행사별 좌석에 따른 평균 티켓가격'
    )
    # y축 눈금 설정하기
    barplot1.set_yticks(np.arange(0,55000,5000))
    
    # 범례 위치 지정하기
    sns.move_legend(barplot1, 'upper left')
    
    # 데이터 라벨 표시하기
    for i in barplot1.containers:
        barplot1.bar_label(i, fontsize=10)

    • 예상한대로 비즈니스석 때문에 Air_India, Vistara 2개 비행사만 티켓가격 평균이 특히 높은 거였네요!
    • 비즈니스석을 제외해도.. 이 2개 비행사의 이코노미석 가격도 다른 비행사들에 비해 비싼 편인 것을 알 수 있습니다.

     

     

    728x90
    반응형