파이썬_데이터분석 (데이터의 시각화와 전처리)

김현희·2026년 4월 20일

1. 데이터 시각화

  • 숫자로 이루어진 데이터를 그래프나 차트로 변환하여 패턴과 인사이트를 쉽게 발견할 수 있게 해주는 과정

의료분야에서의 중요성

  • 환자 상태 모니터링: 혈압, 혈당 변화 추이
  • 질병 패턴 분석: 연령대별, 성별 질병 발생률
  • 치료 효과 평가: 치료 전후 수치 비교
  • 의료진 소통: 복잡한 데이터를 직관적으로 전달

2. Matplotlib vs Seaborn

Matplotlib (기초 라이브러리)

  • 파이썬에서 가장 기본이 되는 시각화 라이브러리
  • 그래프의 모든 요소(색상, 크기, 축, 레이블 등)를 세밀하게 제어할 수 있는 저수준 인터페이스를 제공
  • 도화지에 선 하나, 점 하나를 어디에 찍을지 세세하게 조절할 수 있는 자유도가 있음
  • 하지만 그만큼 코드가 길어지고 복잡해짐

Seaborn (통계 시각화 전문)

  • Matplotlib을 기반으로 구축된 고수준 통계 시각화 라이브러리
  • 세련된 인테리어 패키지 느낌. 아름다운 기본 스타일이 있음.
  • 복잡한 통계 차트를 간단한 코드 한 줄로 생성하여 편의성이 더 높음.
  • 의료 및 과학 분야에서 자주 사용하는 히스토그램, 박스플롯, 히트맵 등을 제공하며, 그룹별 비교나 상관관계 분석 같은 통계적 기능이 내장되어 있음

의료 데이터 분석에서는 Seaborn을 90% 이상 사용

특징MatplotlibSeaborn
성격로우 레벨(기초/범용)하이 레벨(응용/통계)
기반독자적 라이브러리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. 막대그래프

  • 변수 간에 비교 할때 많이 사용

  • plt.bar( , ) 막대그래프 출력 시

  • plt.xticks(rotation = 숫자) 입력한 숫자만큼 글씨가 기울어져 출력됨.

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)가 있는지를 파악할 때 유용

의료 활용: 수치 분포의 중심 경향과 이상치 탐지
임상 목적: 정상 범위 설정, 극단적 케이스 식별, 그룹 간 비교

언제 사용할까?

  • 검사 수치의 정상 범위 → 진단 기준 설정, 참고치 구간 정의
  • 치료군별 효과 비교 → 약물 효과성 평가, 최적 치료법 선택
  • 이상치 환자 식별 → 특별 관리 대상, 추가 검사 필요 환자

박스플롯 구성 요소 가이드

  1. 박스 중앙의 선: 중앙값 (Median)
  2. 박스 범위: 제3사분위수(Q3) / 제1사분위수(Q1) -> 데이터의 50%가 모여있는 구간
  3. 수염 (Whiskers): 정상 범위의 최소/최대값
  4. 흩뿌려진 점들: 이상치 (Outliers) -> 일반적인 범위를 벗어난 특별한 사례

sns.x( )

sns.violinplot( )


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

[해석하기]

1. 왼쪽: 당뇨병 여부별 BMI 분포

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

0개의 댓글