1. 데이터 시각화
- 숫자로 이루어진 데이터를 그래프나 차트로 변환하여 패턴과 인사이트를 쉽게 발견할 수 있게 해주는 과정
의료분야에서의 중요성
- 환자 상태 모니터링: 혈압, 혈당 변화 추이
- 질병 패턴 분석: 연령대별, 성별 질병 발생률
- 치료 효과 평가: 치료 전후 수치 비교
- 의료진 소통: 복잡한 데이터를 직관적으로 전달
2. Matplotlib vs Seaborn
Matplotlib (기초 라이브러리)
- 파이썬에서 가장 기본이 되는 시각화 라이브러리
- 그래프의 모든 요소(색상, 크기, 축, 레이블 등)를 세밀하게 제어할 수 있는 저수준 인터페이스를 제공
- 도화지에 선 하나, 점 하나를 어디에 찍을지 세세하게 조절할 수 있는 자유도가 있음
- 하지만 그만큼 코드가 길어지고 복잡해짐
Seaborn (통계 시각화 전문)
- Matplotlib을 기반으로 구축된 고수준 통계 시각화 라이브러리
- 세련된 인테리어 패키지 느낌. 아름다운 기본 스타일이 있음.
- 복잡한 통계 차트를 간단한 코드 한 줄로 생성하여 편의성이 더 높음.
- 의료 및 과학 분야에서 자주 사용하는 히스토그램, 박스플롯, 히트맵 등을 제공하며, 그룹별 비교나 상관관계 분석 같은 통계적 기능이 내장되어 있음
의료 데이터 분석에서는 Seaborn을 90% 이상 사용
| 특징 | Matplotlib | Seaborn |
|---|
| 성격 | 로우 레벨(기초/범용) | 하이 레벨(응용/통계) |
| 기반 | 독자적 라이브러리 | Matplotlib 기반 |
| 디자인 | 투박함(사용자 커스텀 필요) | 세련됨(기본 테마 이쁨) |
| 코드 복잡도 | 복잡함(세세한 설정 필요) | 간결함(한 줄로 통계 그래프 가능) |
| 주요 용도 | 일반적인 그래프, 상세한 커스텀 | 통계 분석, 데이터 상관관계 시각화 |
3. 시각화 라이브러리
import matplotlib.pyplot as plt
import seaborn as sns
1. matplotlib.pyplot.plot()
- 원래는 그래프를 그릴 때마다 matplotlib.pyplot.plot()이라고 길게 써야 함.
- 하지만 as plt라고 선언하면 plt.plot()으로 아주 짧게 쓸 수 있습니다.
2. import seaborn as sns
4. Matplotlib 핵심 함수와 파라미터
| 함수 | 역할 | 주요 파라미터 | 설명 | 예시 |
|---|
| plt.figure() | 차트 캔버스 생성 | figsize | 차트 크기 (가로, 세로) | figsize=(10, 6) |
| plt.plot() | 선 그래프 그리기 | marker, color, linewidth | 마커, 색상, 선 두께 | marker='o', color='red' |
| plt.bar() | 막대 그래프 그리기 | color, alpha, width | 색상, 투명도, 막대 너비 | alpha=0.7, width=0.8 |
| plt.title() | 제목 설정 | fontsize | 제목 글자 크기 | fontsize=14 |
| plt.grid() | 격자 표시 | alpha, linestyle | 격자 투명도, 선 스타일 | alpha=0.3, linestyle='--' |
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
해당 사이트를 방문하면 그래프를 나타낼 때 적용할 수 있는 markers, line styles, colors를 확인할 수 있다.



5. 선그래프


- 출력될 그래프 크기) plt.figure(figsize = ( , )
- 그래프 이름) **plt.title(' ')
- x, y축 이름) plt.xlabel('') / plt.ylabel(' ')
- 격자모양 추가) plt.grid(True) -> 투명도 조절하고 싶으면 ,alpha=숫자 추가(숫자가 클수록 격자무늬가 진해짐)


- plt.subplot( , , ) 자료가 2개 이상일 때 배치를 어떻게 할지
: (1,2,1) -> 두 자료를 열 방향으로 배치하고 처음에 오도록 출력
: (2,1,2) -> 두 자료를 행 방향으로 배치하고 맨 아래에 오도록 출력
- plt.legend() 그래프 선에 대한 부가설명 칸이 형성됨
6. 막대그래프
6-1. 빈도 그래프 (Countplot) - 범주형 데이터 분포
- 범주형 변수의 각 카테고리별 빈도수를 막대 그래프로 시각화하는 차트
- 환자군 구성비 파악, 질병 유병률 조사, 인구학적 특성 분석에 필수적으로 사용
성별/연령대별 환자 분포 → 병원 진료과 배치 계획
질병별 발생 빈도 → 예방 프로그램 우선순위 결정
지역별 환자 분포 → 의료 서비스 접근성 개선



- sns.countplot() 항목별로 개수를 세어서 막대그래프로 그려주는 함수
8 자동 카운팅: value_counts() 같은 함수로 숫자를 셀 필요가 없이 데이터프레임을 통째로 넣어주면 Seaborn이 알아서 개수를 계산
- 범주형 데이터에 최적: 성별(남/여), 혈액형(A/B/AB/O), 요일 등 딱딱 끊어지는 데이터를 시각화할 때 씁니다.
- plt.xticks([ , ], [' ', ' ']) x축 데이터 숫자를 설정하는 한글로 변경
| 옵션 | 설명 |
|---|
| x or y | 데이터를 가로막대 or 세로막대로 그릴지 결정 |
| hue | 특정 기준(예: 성별)으로 색깔을 나누어 비교할 수 있게 함 |
| palette | 그래프의 색상 테마를 변경 |

https://seaborn.pydata.org/tutorial/color_palettes.html
방문하면 사용가능한 막대 그래프 색상 확인 가능
hue
- 막대의 분리: 하나의 카테고리(x축) 안에서 hue로 지정한 그룹만큼 막대가 쪼개짐
- 범례(Legend) 자동 생성
- 비교의 깊이: 단순히 "어디가 많다"를 넘어 "어떤 그룹이 이 흐름을 주도하고 있다"는 인사이트를 얻을 수 있음.
- hue: 한 번 더 나누는 기준입니다.
7. ⭐히스토그램 (Histplot + hue) - 그룹별 분포 비교
- 변수의 분포를 막대로 표현하고, hue 파라미터를 통해 그룹별로 분포를 비교할 수 있는 차트
- 연속적인 데이터에 사용 (구간이 있는 자료를 사용할 때)
- 환자군별 특성 차이 분석, 위험군 식별, 치료 효과 모니터링에 광범위하게 활용됨.
언제 사용할까?
- 연속형 데이터: 당뇨병군 vs 정상군의 BMI 분포 비교 → 위험 BMI 구간 파악
- 순위형 데이터: 치료군별 건강상태 점수 분포 → 치료 효과 시각적 확인
- 그룹별 패턴: 연령대별 혈압 분포 → 연령 특화 치료 기준 수립
핵심: 두 개 이상의 그룹을 나란히 비교하여 분포의 차이와 겹치는 구간을 한눈에 파악가능
- sns.histplot()은 파이썬의 시각화 라이브러리인 Seaborn에서 히스토그램을 그릴 때 사용하는 함수
- bins=10 구간을 10개로 나눔
- kde=True 부드러운 곡선(분포 느낌)도 같이 보여줌


bin을 설정하면 구간별로 나뉘어서 출력되는 것을 확인할 수 있다.

kde=True는 히스토그램 양상을 선으로 추가해서 나타내준다.

element='step' 은 구간을 지워서 출력해준다.
8. 박스플롯 (Boxplot) - 분포와 이상치 확인 ⭐⭐⭐⭐⭐
- 데이터의 분포와 변동성을 한눈에 보여주는 아주 효율적인 통계 그래프
- 데이터가 얼마나 퍼져 있는지, 중앙값은 어디인지, 그리고 이상치(Outlier)가 있는지를 파악할 때 유용
의료 활용: 수치 분포의 중심 경향과 이상치 탐지
임상 목적: 정상 범위 설정, 극단적 케이스 식별, 그룹 간 비교
언제 사용할까?
- 검사 수치의 정상 범위 → 진단 기준 설정, 참고치 구간 정의
- 치료군별 효과 비교 → 약물 효과성 평가, 최적 치료법 선택
- 이상치 환자 식별 → 특별 관리 대상, 추가 검사 필요 환자
박스플롯 구성 요소 가이드
- 박스 중앙의 선: 중앙값 (Median)
- 박스 범위: 제3사분위수(Q3) / 제1사분위수(Q1) -> 데이터의 50%가 모여있는 구간
- 수염 (Whiskers): 정상 범위의 최소/최대값
- 흩뿌려진 점들: 이상치 (Outliers) -> 일반적인 범위를 벗어난 특별한 사례
sns.x( )

sns.violinplot( )

: 데이터가 어디에 많이 몰려 있는지 곡선으로 상세히 보여줌.
: > 보통 sns.boxplot( )랑 같이 쓰임
[해석하기]

1. 왼쪽: 당뇨병 여부별 BMI 분포
- 상자의 위치 (중앙값): '당뇨병' 그룹의 주황색 상자가 '정상' 그룹의 파란색 상자보다 위쪽에 위치 -> 즉, 당뇨병 환자군의 BMI 중앙값이 더 높다
- 이상치 (Outliers): 상단의 점들, 특히 당뇨병 그룹에서 고도비만 데이터가 더 눈에 띄게 나타남.
- 해석: "당뇨병 진단을 받은 그룹이 전반적으로 BMI 수치가 높은 경향이 있다."
- 오른쪽: 당뇨병 여부별 연령대 분포
- 상자의 높이와 위치: '정상' 그룹은 50~70대 사이에, '당뇨병' 그룹은 60대 중반에서 80대 사이에 집중
- 수염과 이상치: '당뇨병' 그룹 아래쪽에 있는 동그라미 3개는 20~30대 젊은 나이에 당뇨를 앓고 있는 '비교적 드문 사례(이상치)'를 의미
- 해석: "당뇨병 환자군은 정상군에 비해 평균적인 연령대가 훨씬 높다(고령층이 많다)."