-
[2월 1주차-2/6(3)]📊 히스토그램 & 박스플롯 시각화 정리Why Not SW CAMP 5기/수업 기록 2025. 2. 6. 12:53
데이터를 분석할 때 자료의 분포를 파악하는 것은 매우 중요합니다.
이번 포스팅에서는 히스토그램(hist)과 박스플롯(boxplot)을 사용하여 데이터를 효과적으로 시각화하는 방법을 정리해보겠습니다.
1️⃣ 히스토그램 (Histogram)
📌 히스토그램이란?
히스토그램은 데이터의 빈도를 막대 그래프 형태로 나타낸 그래프입니다.
특정 구간에 해당하는 데이터의 개수를 막대의 높이로 표현하므로, 데이터의 분포 상태를 한눈에 파악할 수 있습니다.📍 기본 히스토그램 예제
아래 코드는 간단한 데이터를 사용하여 Matplotlib의 hist() 함수를 이용한 히스토그램을 그리는 예제입니다.
import matplotlib.pyplot as plt # 데이터 리스트 hist_data = [1, 1, 2, 3, 4, 5, 6, 6, 7, 8, 10] # 히스토그램 그리기 plt.hist(hist_data) plt.show()
✅ 설명
- plt.hist(hist_data) → 리스트 데이터를 히스토그램 형태로 출력
- plt.show() → 그래프 표시
📍 기온 데이터(서울) 활용한 히스토그램
CSV 파일에서 1월과 8월의 최고 기온 데이터를 추출하여 히스토그램으로 표현해보겠습니다.
import matplotlib.pyplot as plt import csv # CSV 파일 열기 f = open('./data/seoul.csv') data = csv.reader(f) next(data) # 헤더 제거 aug = [] # 8월 최고 기온 리스트 jan = [] # 1월 최고 기온 리스트 for row in data: month = row[0].split('-')[1] # 날짜에서 월 정보 추출 if row[-1] != '': # 결측치 제거 if month == '08': aug.append(float(row[-1])) # 8월 데이터 추가 elif month == '01': jan.append(float(row[-1])) # 1월 데이터 추가 # 히스토그램 시각화 plt.hist(aug, bins=100, color='r', label='8월') # 빨간색 (8월) plt.hist(jan, bins=100, color='b', label='1월') # 파란색 (1월) plt.legend() # 범례 추가 plt.show()
✅ 설명
- split('-') → 날짜 데이터를 ['YYYY', 'MM', 'DD'] 형태로 분리하여 월 정보 추출
- bins=100 → 구간을 100개로 나누어 더 세밀하게 표현
- color='r' / color='b' → 빨간색(8월), 파란색(1월)
- plt.legend() → 범례 추가
🔎 해석
- 8월(빨간색): 대부분 20~40도 범위
- 1월(파란색): 대부분 -10~10도 범위
- 특정 온도에서 피크(빈도 높음) → 해당 온도에서 많이 발생
2️⃣ 박스플롯 (Boxplot)
📌 박스플롯이란?
박스플롯(Boxplot)은 데이터의 분포를 한눈에 보여주는 그래프입니다.
최댓값, 최솟값, 중앙값(2/4 분위), 1/4 분위, 3/4 분위를 보여주며, 이상치(outlier)도 함께 시각화할 수 있습니다.
📍 기본 박스플롯 예제
아래 코드는 랜덤 데이터를 생성하여 박스플롯을 그리는 예제입니다.
import matplotlib.pyplot as plt import random # 랜덤 데이터 생성 result = [] for i in range(13): result.append(random.randint(1, 1000)) # 1~1000 사이 난수 생성 # 박스플롯 시각화 plt.boxplot(result) plt.show()
✅ 설명
- random.randint(1, 1000) → 1~1000 사이 랜덤 정수 생성
- plt.boxplot(result) → 박스플롯 출력
📍 기온 데이터 활용한 박스플롯
이번에는 1월과 8월의 최고 기온 데이터를 박스플롯으로 비교해보겠습니다.
import matplotlib.pyplot as plt import csv # CSV 파일 열기 f = open('./data/seoul.csv') data = csv.reader(f) next(data) aug = [] # 8월 데이터 jan = [] # 1월 데이터 for row in data: month = row[0].split('-')[1] # 월 정보 추출 if row[-1] != '': # 결측치 제거 if month == '08': aug.append(float(row[-1])) # 8월 최고 기온 elif month == '01': jan.append(float(row[-1])) # 1월 최고 기온 # 박스플롯 시각화 plt.boxplot([aug, jan]) plt.show()
✅ 설명
- 1월(추운 겨울)과 8월(더운 여름)의 기온 데이터를 한눈에 비교 가능
- 박스 안에 **데이터의 중심값(중앙값)**과 분포의 범위 표시
- 이상치(outlier)도 점으로 나타남
📍 월별 최고 기온 박스플롯
이번에는 월별 최고 기온 분포를 박스플롯으로 표현해보겠습니다.
import matplotlib.pyplot as plt import csv # CSV 파일 열기 f = open('./data/seoul.csv') data = csv.reader(f) next(data) # 월별 데이터 저장 리스트 (12개월) months = [[] for _ in range(12)] for row in data: if row[-1] != '': # 결측치 제거 month = int(row[0].split('-')[1]) - 1 # 월 정보 추출 (0~11) months[month].append(float(row[-1])) # 해당 월에 데이터 추가 # 박스플롯 시각화 plt.boxplot(months) plt.show()
✅ 설명
- 12개의 리스트(months = [[] for _ in range(12)])를 생성해 월별 데이터를 저장
- months[int(row[0].split('-')[1])-1] → 해당 월(0~11)에 데이터 추가
- plt.boxplot(months) → 월별 최고 기온을 한눈에 비교 가능
🔎 해석
- 여름(6~8월)은 기온이 높고 분포가 넓음
- 겨울(12~2월)은 기온이 낮고 분포가 좁음
- 이상치(outlier) → 여름철 갑작스러운 폭염, 겨울철 한파 가능성
🎯 결론
시각화 기법 활용 목적
히스토그램 특정 값의 빈도를 나타내어 데이터의 분포를 확인 박스플롯 데이터의 최댓값, 최솟값, 중앙값, 이상치를 확인하여 분포 비교 📌 히스토그램은 데이터의 **빈도(분포 모양)**를 시각화하는 데 유용하며,
📌 박스플롯은 데이터의 **중앙값과 이상치(outlier)**를 파악하는 데 적합합니다.👉 앞으로 데이터 분석할 때 적절한 시각화 기법을 활용해 보세요! 🚀
궁금한 점이 있다면 댓글로 남겨 주세요. 😊'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 1주차-2/6(5)]🚇 지하철 시간대별 승하차 인원 분석 (1) 2025.02.06 [2월 1주차-2/6(4)]📊 파이썬을 활용한 인구 데이터 시각화(파이차트&산점도) (0) 2025.02.06 [2월 1주차-2/6(2)]🎂 내 생일의 기온 변화를 시각화하기 (0) 2025.02.06 [2월 1주차-2/6(1)]📊 Python 데이터 시각화 & CSV 데이터 처리 정리 (0) 2025.02.06 [2월 1주차-2/5(2)]서울시 구별 CCTV 현황 분석하기 📊 (2) 2025.02.05