테마
Matplotlib 기본 시각화
학습 목표
- Matplotlib과 Pandas의 plot 기능 관계를 이해한다
- 한글 폰트 설정 방법을 익힌다
- 선 그래프(line), 막대 그래프(bar), 히스토그램(hist)을 그릴 수 있다
- figure 크기, 라벨 회전, 정렬 등 그래프 커스터마이징을 할 수 있다
- 박스 플롯(box)으로 5가지 요약 수치를 시각화할 수 있다
전체 구조
1. 한글 폰트 설정
Matplotlib은 기본 폰트로 한글을 지원하지 않아, 한글이 깨져서 표시된다.
python
import matplotlib.pyplot as plt
# macOS
plt.rc("font", family="AppleGothic")
# Windows
# plt.rc("font", family="Malgun Gothic")
# 마이너스 기호 깨짐 방지
plt.rc("axes", unicode_minus=False)
# 그래프 선명도 향상 (Jupyter Notebook)
from IPython.display import set_matplotlib_formats
set_matplotlib_formats("retina")2. Pandas 내장 plot 기능
Pandas의 DataFrame과 Series에는 Matplotlib 기반의 plot 메서드가 내장되어 있다.
선 그래프 (기본값)
python
# groupby로 연산 후 바로 시각화
g = df_last.groupby("지역명")["평당분양가격"].mean()
# 기본 plot → 선 그래프
g.plot()막대 그래프
python
# 방법 1: kind 옵션
g.plot(kind="bar")
# 방법 2: plot.bar() 직접 호출
g.plot.bar()
# 가로 막대 그래프
g.plot.barh()그래프 커스터마이징
python
# 정렬 + 크기 + 라벨 회전
g.sort_values(ascending=False).plot.bar(
rot=0, # x축 라벨 회전 (0: 가로)
figsize=(10, 3) # 그래프 크기 (너비, 높이)
)3. 히스토그램
히스토그램은 수치형 데이터의 빈도 분포를 보여준다.
python
# 전체 수치 데이터의 히스토그램
df_last.hist()
# 특정 컬럼만
df_last["평당분양가격"].hist()
# bins 조정 (구간 개수)
df_last["평당분양가격"].hist(bins=30)bins(비닝, Bucketing): 수치 데이터를 카테고리 형태로 나누는 작업이다. bins 값이 클수록 그래프가 세밀해지고, 작을수록 뭉뚝해진다.
4. 박스 플롯 (Box Plot)
박스 플롯은 5가지 요약 수치(Five-Number Summary)를 시각화한다.
python
# 피벗 테이블 + 박스 플롯
t = df_last.pivot_table(
index="월",
columns="연도",
values="평당분양가격"
)
t.plot.box(figsize=(10, 3))박스 플롯 구성 요소
이상치(Outlier) 판별 기준
IQR(Inter-Quartile Range)은 Q3 - Q1 값이다.
- 상한 이상치: Q3 + 1.5 x IQR 초과
- 하한 이상치: Q1 - 1.5 x IQR 미만
python
# IQR 계산 예시
Q1 = df["평당분양가격"].quantile(0.25)
Q3 = df["평당분양가격"].quantile(0.75)
IQR = Q3 - Q1
# 이상치 범위
upper_bound = Q3 + 1.5 * IQR
lower_bound = Q1 - 1.5 * IQR
print(f"이상치 상한: {upper_bound}")
print(f"이상치 하한: {lower_bound}")5. 피벗 테이블과 시각화 조합
python
# 연도별 + 월별 피벗 테이블
t = df_last.pivot_table(
index="월",
columns="연도",
values="평당분양가격"
)
# 선 그래프 → 연도별 추세
t.plot(figsize=(10, 3))
# 막대 그래프 → 월별 비교
t.plot.bar(figsize=(15, 3), rot=30)
# 박스 플롯 → 연도별 분포
t.plot.box(figsize=(10, 3))그래프 유형 선택 가이드
6. 연도별 추세 시각화 예시
python
# 연도별 평균 분양가격 선 그래프
df_last.groupby("연도")["평당분양가격"].mean().plot()
plt.title("연도별 전국 평균 평당 분양가격")
plt.ylabel("평당분양가격 (천원)")
plt.xlabel("연도")python
# 지역별 평균 분양가격 막대 그래프 (정렬)
g = df_last.groupby("지역명")["평당분양가격"].mean()
g.sort_values(ascending=False).plot.bar(
rot=0,
figsize=(12, 4),
color="steelblue"
)
plt.title("지역별 평균 평당 분양가격")
plt.ylabel("평당분양가격 (천원)")핵심 정리
- Pandas의 plot은 Matplotlib 기반이므로,
plt.rc로 한글 폰트를 설정해야 한다 - 기본
plot()은 선 그래프,plot.bar()는 막대 그래프를 그린다 - figsize로 크기, rot으로 라벨 회전, sort_values로 정렬 후 시각화한다
- 히스토그램은 수치 데이터의 빈도 분포, 박스 플롯은 5가지 요약 수치를 보여준다
- 박스 플롯의 이상치는 IQR x 1.5 범위를 벗어나는 값이다
- groupby/pivot_table 결과에 바로
.plot()을 체이닝하여 빠르게 시각화한다