직접 해보기/Python

[matplotlib][seaborn] 데이터프레임으로 히스토그램 그리기 :: plt.hist sns.histplot

서윤L 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
반응형