ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [matplotlib][seaborn] 데이터프레임으로 히스토그램 그리기 :: plt.hist sns.histplot
    직접 해보기/Python 2024. 6. 27. 17:28
    728x90
    반응형

    ✅ 히스토그램

    히스토그램 (Histogram) matplotlib 메소드 seaborn 메소드
    •데이터의 빈도수 및 분포를 알아보기 위해 작성하는 그래프
    •카테고리별 개수를 막대로 나타내는 막대그래프와 달리,
        정해진 구간별 빈도수를 막대로 나타내어 분포를 볼 수 있는 통계분석 도구임

    plt.hist() sns.histplot()

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

    • 예시가 될 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 입니다.
    # 패키지 불러오기
    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)


    1️⃣-1.  plt 히스토그램 그리기  ::  plt.hist

    • 히스토그램 생성: plt.hist(데이터셋)
    • 간단하게 데이터셋만 넣어줘도, 구간은 자동으로 정해져서 생성됩니다.
      그냥 생성해봤더니 10개로 나눠졌네요. 아래에서 구간개수를 좀더 늘려보겠습니다.
    # 차트 영역 지정하기
    plt.figure()
    
    # 히스토그램 그리기 : duration(비행시간)의 빈도수 및 분포
    plt.hist(df['duration'])
    
    # 차트 표시하기
    plt.show()

     

    1️⃣-2.  plt 히스토그램 커스터마이징

    • 계급 개수 지정: plt.hist(x=데이터셋, bins=계급개수, ...)
    • x,y축 간격 지정: plt.xticks(범위), plt.yticks(범위)
    • 구간별 빈도수 및 구간 출력: 히스토그램을 변수 하나에 저장하고, 해당 변수 출력하기 (아래 코드에서 histogram)
    # 차트 영역 지정하기
    plt.figure()
    
    # 차트에서 한글 표시하기
    plt.rcParams['font.family'] = "NanumBarunGothic"
    plt.rcParams['axes.unicode_minus'] = False
    
    # 눈금선 추가하기
    plt.grid(linewidth = '0.5')
    
    # 히스토그램 생성하기
    histogram = plt.hist(
        x = df['duration'],  # 데이터 지정
        bins = 20,           # 계급을 20개 구간으로 나눔
        color = 'salmon'     # 색상 지정
    )
    
    # x,y축 간격 지정하기
    plt.xticks(np.arange(0,50,5))
    plt.yticks(np.arange(0,45000,5000))
    
    # x,y축 이름 정하기
    plt.xlabel('비행 시간 (duration)')
    plt.ylabel('비행편 개수 (flights)')
    
    # 차트 표시하기
    plt.show()
    
    # 구간별 빈도수, 구간 확인하기
    histogram

     

    • 계급구간을 20개로 나눠서 그려봤는데요, 구간 10개일 때 뭉뚱그려져 있던 데이터 분포를 더 상세하게 볼 수 있습니다.
    • 생각보다 비행시간 3시간 이하 구간에 많이 몰려있었고, 긴 비행 중에서는 22~25시간이 비교적 많은 편이었네요.

    2️⃣.  sns 히스토그램 그리기  ::  sns.histplot

    • seaborn으로 히스토그램을 그리면, 보다 다양한 요소들을 커스텀할 수 있습니다.
    • 아래처럼 구간 범위를 직접 지정할 수 있고, KDE(커널밀도 추정지) 그래프를 추가할 수도 있습니다.
    # 그래프 크기 및 한글출력 설정
    sns.set_theme(
        style = 'ticks',
        font = 'NanumBarunGothic',
        rc = {'figure.figsize' : (12,6),
              'axes.unicode_minus' : False}
    )
    # 히스토그램 생성
    histogram1 = sns.histplot(
        data=df, x='duration',      # 데이터 지정
        bins=20, binrange=(0,50),   # 계급 개수 20개, 범위는 0~50으로 지정
        kde=True,                   # 커널 밀도 그래프 추가
        color='darkorange'          # 색상 지정
    )
    # 축 범위, 축 이름, 그래프 제목 지정하기
    histogram1.set(
        xlabel = '비행시간 (duration)',
        ylabel = '도수 (count)',
        title = '비행시간 히스토그램'
    )
    # y축 눈금 설정하기
    histogram1.set_xticks(np.arange(0,50,5))
    
    # 계급구간별 도수 표시하기
    for i in histogram1.containers:
        histogram1.bar_label(i, fontsize=9)


     

     

    728x90
    반응형