데이터 시각화(Data Visualization)란?
숫자와 텍스트로 이루어진 데이터를 차트, 그래프, 지도 등의 시각적 요소로 표현하는 과정
탐색적 데이터 분석(EDA)이란?
새로운 데이터셋을 본격적인 분석 및 모델링 전, 데이터의 생김새, 특징, 문제를 파악하는 과정
- 데이터의 분포를 파악 (히스토그램, 박스플롯)
- 변수 간의 관계를 발견 (산점도, 상관관계 히트맵)
- 이상치(Outlier)를 탐지
- 결측치 패턴을 확인
- 가설 생성과 검증을 지원
1. Matplotlib
- 세밀한 제어 가능, 모든 요소를 직접 조정
- 학습 곡선이 높은 편
- 정적(static) 시각화에 특화
2. Seaborn
- 통계 시각화에 특화
- Matplotlib을 기반으로 하지만 더 간단한 문법
- 아름다운 기본 스타일
3. Plotly, Altair, Bokeh
- 인터랙티브 시각화 지원
- 웹 기반 시각화
- 복잡한 시각화를 간단한 코드로 구현
matplotlib의 문법 2가지
| 2가지 인터페이스 | 1. pyplot | 2. 객체 지향 |
| 사용 목적 | 간단하고 빠른 시각화 | 여러 개의 서브플롯 및 정교한 제어에 적합 |
| 사용 방식 | 전역 상태에서 명령어로 작업 (plt.plot()) | 명시적으로 **캔버스(fig)**와 축(ax) 생성 |
| 서브플롯 제어 | 서브플롯 생성 및 제어가 제한적 | 서브플롯을 명확히 제어 가능 |
| 플롯 제어 범위 | 전역으로 전체에 영향을 미침 | 개별 축(ax) 단위로 제어 가능 |
| 레이블 추가 방식 | plt.xlabel('X축') | ax.set_xlabel('X축') |
| 범례 추가 방식 | plt.legend() | ax.legend() |
| 복잡한 레이아웃 | 복잡한 플롯 생성이 어려움 | 여러 축을 명확히 제어 가능 |
| 코드의 명확성 | 코드가 간단하고 직관적 | 더 많은 코드가 필요하지만 명확함 |
| 커스터마이징 | 자동 스타일에 의존 | 세부적인 스타일 제어 가능 |
| 복잡한 플롯 | 단순한 단일 플롯에 적합 | 복잡한 레이아웃 및 서브플롯에 적합 |
| 사용 난이도 | 초보자에게 쉬움 | 더 많은 학습이 필요 |
| 장점 | 빠르고 간단한 코드로 플롯 생성 가능 | 서브플롯, 축, 스타일 등 세부 제어 가능 |
| 단점 | 복잡한 레이아웃 제어에 한계 | 코드가 길어지고 학습 곡선이 존재 |
종류
1. Line Plot: 시간에 따른 데이터의 변화
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
plt.plot(x, y)
plt.show()
fig, ax = plt.subplots() # Figure와 Axes 객체 생성
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
ax.plot(x, y)
plt.show()

2. Bar Chart: 카테고리별 데이터 값을 비교(수직, 수평horizontal)
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 30]
plt.bar(categories, values)
plt.show()
ax.bar(categories, values)

3. Scatter Plot: 두 변수 간의 관계를 탐색
- 오버플로팅 조심>>점 크기 축소, 투명도 적용, 2D밀도 활용, 일부샘플링
x = [5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6]
y = [99, 86, 87, 88, 100, 86, 103, 87, 94, 78, 77, 85, 86]
plt.scatter(x, y, marker='v')
plt.show()
ax.scatter(x, y, marker='v' )

4. Histogram: 데이터의 분포를 파악
import numpy as np
import matplotlib as mpl
mpl.rcParams['axes.unicode_minus'] = False #마이너스 깨짐 방지
data = np.random.randn(1000)
plt.hist(data, bins=30) #bins: 그래프 분할 수 !!중요!!
plt.show()
ax.hist(data, bins=30)

5. Pie Chart: 전체에 대한 각 부분의 비율(신중하게 사용)
sizes = [10, 20, 25, 30]
labels = ['A', 'B', 'C', 'D']
plt.pie(sizes , labels=labels)
plt.show()
ax.pie(sizes , labels=labels)

6. Stack Plot: 시간에 따라 여러 그룹의 변화를 함께 보여줄 때
x = [1, 2, 3, 4, 5]
y1 = [1, 1, 2, 3, 5]
y2 = [0, 4, 2, 6, 8]
y3 = [1, 3, 5, 7, 9]
plt.stackplot(x, y1, y2, y3, labels=['Y1', 'Y2', 'Y3'])
plt.legend(loc='upper left') #loc(범례)를 좌측 상단에 표시
plt.show()
plt.show()
ax.stackplot(x, y1, y2, y3, labels=['Y1', 'Y2', 'Y3'])
ax.legend(loc='upper left')

7. Box Plot: 데이터의 분포와 이상치를 파악할 때 사용
data = np.random.rand(10, 4) #np.random.rand:시간마다 다른 랜덤 데이터
plt.boxplot(data)
plt.show()
ax.boxplot(data)

8. Violin Plot: box와 비슷 but, 데이터 분포의 밀도도 함께 보여줌
data = np.random.rand(10, 4)
plt.violinplot(data)
plt.show()
ax.violinplot(data)

좋은 시각화란?
- 명확성(Clarity)
- 단순성(Simplicity)
- 목적성(Purpose)
- 일관성(Consistency)
'특강 > 전처리 & 시각화' 카테고리의 다른 글
| [전처리&시각화] 5일차(06.04)<fig, ax, seaborn, 색상 및 테마> (3) | 2025.06.04 |
|---|---|
| [전처리&시각화] 3일차(05.30) (0) | 2025.05.30 |
| [전처리&시각화] 2일차(05.29) <데이터 정보, 결측치, 이상치> (0) | 2025.05.29 |
| [전처리&시각화] 1일차(05.28) (4) | 2025.05.28 |