본문 바로가기
Python

Pandas + Matplotlib & Seaborn으로 데이터 시각화 완전 입문!

by ramzee 2025. 3. 26.

0. 이 글은 누구를 위한 글인가요?

  • 엑셀처럼 Python에서도 그래프 그릴 수 있나요?
  • 숫자만 보면 감이 안 와요… 시각화 하고 싶어요!
  • matplotlib? seaborn? 뭔가 무섭게 생겼어요…

처음 그래프를 그리는 분들을 위해 아주 쉽고 자세히 설명드릴게요!


1. 시각화 라이브러리 소개

라이브러리 설명
Matplotlib 가장 기본이 되는 그래프 도구, 세밀한 설정 가능
Seaborn Matplotlib을 더 보기 좋게 꾸며주는 도구, 사용도 간편

2. 설치 방법

pip install matplotlib seaborn

2-1. [중요] 한글 깨짐 해결 방법

그래프 제목, 축 이름, 범례 등에서 한글이 깨지거나 물음표(??)로 보일 수 있습니다.

윈도우 사용자

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Malgun Gothic'  # 한글 폰트
plt.rcParams['axes.unicode_minus'] = False     # 마이너스 깨짐 방지
Mac 사용자

plt.rcParams['font.family'] = 'AppleGothic'
plt.rcParams['axes.unicode_minus'] = False

Tip: 이 설정은 그래프를 그리기 전에 한 번만 하면 됩니다.


3. 예제 데이터 준비


import pandas as pd

data = {
    '이름': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
    '점수': [88, 75, 90, 95, 82],
    '나이': [24, 30, 18, 45, 29],
    '도시': ['서울', '부산', '대구', '서울', '부산']
}

df = pd.DataFrame(data)
print(df)

       이름  점수  나이  도시
0    Alice   88   24  서울
1      Bob   75   30  부산
2  Charlie   90   18  대구
3    David   95   45  서울
4     Ella   82   29  부산

4. 막대그래프 (Bar Chart)


import matplotlib.pyplot as plt

plt.figure(figsize=(8, 5))
plt.bar(df['이름'], df['점수'], color='skyblue')
plt.title('이름별 점수')
plt.xlabel('이름')
plt.ylabel('점수')
plt.show()


5. 선그래프 (Line Chart)

# 나이 기준으로 정렬
df_sorted = df.sort_values(by='나이')

# 정렬된 데이터로 시각화
plt.figure(figsize=(8, 5))
plt.plot(df_sorted['나이'], df_sorted['점수'], marker='o', linestyle='-', color='green')
plt.title('나이에 따른 점수 변화')
plt.xlabel('나이')
plt.ylabel('점수')
plt.grid(True)
plt.show()


6. 히스토그램 (Histogram)


plt.figure(figsize=(8, 5))
plt.hist(df['점수'], bins=5, color='orange', edgecolor='black')
plt.title('점수 분포 히스토그램')
plt.xlabel('점수')
plt.ylabel('빈도')
plt.show()


7. Seaborn으로 더 깔끔하게 그리기

import seaborn as sns
도시별 평균 점수 (막대그래프)

plt.figure(figsize=(8, 5))
sns.barplot(x='도시', y='점수', data=df, estimator='mean', ci=None)
plt.title('도시별 평균 점수 (Seaborn)')
plt.show()

점수 vs 나이 산점도 (Scatter Plot)

plt.figure(figsize=(8, 5))
sns.scatterplot(x='나이', y='점수', hue='도시', style='도시', data=df, s=100)
plt.title('점수 vs 나이 (도시별 색상)')
plt.show()


8. 그래프 저장하기

plt.savefig('그래프이름.png', dpi=300)

plt.show() 대신 savefig()를 쓰면 이미지 파일로 저장할 수 있습니다.


9. 그래프 그릴 때 자주 하는 실수

실수 해결 방법
한글 깨짐 plt.rcParams['font.family'] 설정
마이너스 깨짐 plt.rcParams['axes.unicode_minus'] = False
그래프 안 뜸 plt.show() 반드시 실행
레이블 겹침 figsize, rotation 조정

10. 요약 정리

시각화 종류 사용 함수
막대그래프 plt.bar(), sns.barplot()
선그래프 plt.plot()
히스토그램 plt.hist()
산점도 plt.scatter(), sns.scatterplot()
폰트 설정 plt.rcParams['font.family']
그래프 저장 plt.savefig()