코딩

상자수염 논문 그래프 (Box and whisker plot, 파이썬, Q1, Q2, Q3 계산)

Bella0204 2023. 5. 4.

상자수염 그래프 (Box and Whisker Plot)는 수치형 데이터의 분포와 이상값 (Outlier)을 시작적으로 표현하는 그래프이다. 주로 다수의 그룹이 있는 데이터에서 그룹 간 비교할 때 사용된다. 즉, 상자수염그래프는 데이터 분석 및 시각화에서 자주 사용되는 그래프 중 하나이다. 예를 들면 아래와 같다. 

 

  • 다수의 그룹이 있는 실험 데이터의 분포를 비교하고자 할 때
  • 자료의 중앙값, 사분위수 등 대표적인 수치를 파악하고자 할 때
  • 이상치 (Outlier)가 있는 데이터 분포를 파악하고자 할 때
  • 대용량의 수치 데이터를 효과적으로 표현하고자 할 때

 

오늘 목표

 

주피터 노트북으로 상자수염 그래프 그린 후, 최소값, Q1, Q2, Q3, 최대값 계산해 보기

 

예제, 데이터 

 

A와 B  두 그룹이 각각 다른 공부 방법으로 공부를 한 뒤 학생들의 시험 점수를 기록했다. 그룹 간 성적 분포를 비교해 보려 한다. 

 

 

 

 

파이썬 코드

 

데이터가 방대한 것이 아니라서 직접 입력해 주었다. 엑셀 csv 데이터 불러오는 것은 다른 포스팅을 참고하길 바람.

파이썬 엑셀 데이터로 라인 그래프 그리기 with 평균, 표준편차 (matplotlib)

 

import matplotlib.pyplot as plt

# 데이터
group_a = [23, 25, 30, 32, 35, 36, 40, 45, 50, 52]
group_b = [28, 32, 35, 37, 39, 41, 44, 47, 100, 53]

# 그래프 사이즈
fig, ax = plt.subplots(figsize=(6, 4))

# 데이터를 박스플롯으로 그리기
boxplot_data = [group_a, group_b]
ax.boxplot(boxplot_data, showfliers=True, whis=[5, 95])
#Showfliers = True는 outlier를 표시하겠다는 것
#whis = [5,95] 상자수염 그래프의 수염 끝을 5th, 95%th percentile로 설정한다는 것


# x,y축 제목과 타이틀
ax.set_xlabel('Study Method')
ax.set_ylabel('Test Scores')
ax.set_title('Effectiveness of Two Study Methods on Test Scores')

# x축 레이블 
ax.set_xticklabels(['Group A', 'Group B'])

# y축 범위
ax.set_ylim(0, 110)

# 그래프 만들기
plt.tight_layout()

# 그래프 저장
plt.savefig('boxplot.png', dpi=300)

 

 

위의 파이썬 코드로 예제 데이터를 이용해 만든 상자 수염 그래프이다. 

 

 

 

 

 

최소값 (Minimum), Q1, Q2 (중간값), Q3, 최대값 (maximum), 평균 계산

 

Numpy를 이용해서 그룹별 최소값, Q1, 중간값, Q3, 최대값, 평균을 계산해 보았다. 

 

import numpy as np

group_a = [23, 25, 30, 32, 35, 36, 40, 45, 50, 52]
group_b = [28, 32, 35, 37, 39, 41, 44, 47, 100, 53]

# 최소값 (Minimum), Q1, Q2(중간값), Q3, 최대값 (maximum) 계산

a_min, a_q1, a_median, a_q3, a_max = np.percentile(group_a, [0, 25, 50, 75, 100])
b_min, b_q1, b_median, b_q3, b_max = np.percentile(group_b, [0, 25, 50, 75, 100])

# 평균 계산
a_avg = np.mean(group_a)
b_avg = np.mean(group_b)

# 결과 
print("Group A:")
print(f"Minimum: {a_min}")
print(f"Q1: {a_q1}")
print(f"Median (Q2): {a_median}")
print(f"Q3: {a_q3}")
print(f"Maximum: {a_max}")
print(f"Average: {a_avg}\n")

print("Group B:")
print(f"Minimum: {b_min}")
print(f"Q1: {b_q1}")
print(f"Median (Q2): {b_median}")
print(f"Q3: {b_q3}")
print(f"Maximum: {b_max}")
print(f"Average: {b_avg}")

 

 

결과 Group A

 

  • 최소값: 23
  • Q1: 30.5
  • Q2(중간값): 35.5
  • Q3: 45
  • 최대값 (maximum) : 52
  • 평균 : 36.8

 

결과 Group B

 

  • 최소값: 28
  • Q1: 35.5
  • Q2(중간값): 40
  • Q3: 46.25
  • 최대값 (maximum) : 100
  • 평균 : 45.6

 

엑셀로 상자 수염 그래프 그릴 수있지만, 파이썬으로 그리는 것이 개인적으로 편하고 마음에 든다. 주피터 노트북에 위의 코드를 넣고 데이터만 바꾸어 사용하면 된다. 끝.

 

반응형

댓글