시각화를 배우기 전에 두 가지를 먼저 정해야 합니다. 첫째, 이 그림이 탐색용인가 설명용인가입니다. 둘째, 어떤 문법으로 그림을 조립할 것인가입니다. 차트 종류(막대냐 선이냐)는 이 두 결정 다음에 자동으로 따라옵니다. 이 노트는 시각화 이론 전체의 출발점으로, 목적 구분과 그래프 문법(Grammar of Graphics)이라는 사고 틀을 다룹니다.
추상화 계층 구분선
시각화를 논의할 때는 세 계층을 섞지 않는 편이 좋습니다.
인지·지각 이론: 사람의 눈과 뇌가 위치·길이·색을 어떻게 읽는가. 도구와 무관한 심리학·생리학 층위입니다.
차트 설계 원칙: 어떤 데이터에 어떤 인코딩과 차트를 쓰는가. 목적·데이터 타입·메시지에 따른 규범 층위입니다.
도구 구현: matplotlib, seaborn, plotly 등으로 그 설계를 코드로 옮기는 층위입니다.
이 노트는 주로 차트 설계 원칙 계층에 있으며, 그래프 문법은 설계 원칙을 도구 구현으로 잇는 다리 역할을 합니다.
1. 탐색적 시각화 vs 설명적 시각화
같은 데이터라도 목적이 다르면 완전히 다른 그림이 됩니다.
탐색적(exploratory) 시각화
청중: 분석가 자신
목적: 데이터의 구조·분포·이상치·관계를 빠르게 훑어 가설을 찾음
특징: 수십 장을 빠르게 그림, 축 라벨·제목·색은 대충, 한 화면에 정보 밀도 높게
예: 모든 수치 변수의 히스토그램을 한 번에, 상관 히트맵, 페어플롯
탐색 단계에서는 "많이, 빠르게, 대충"이 미덕입니다. 완성도보다 회전 속도가 중요합니다.
설명적(explanatory) 시각화
청중: 타인(보고서 독자, 발표 청중, 의사결정자)
목적: 이미 찾은 하나의 결론을 오해 없이 전달
특징: 한 그림에 한 메시지, 제목이 결론을 말함, 불필요한 요소 제거, 핵심 지점에 주석
예: "3분기 이탈률이 신규 고객에서만 2배로 뛰었다"를 보여주는 단일 라인 차트
설명 단계에서는 "적게, 정확하게, 다듬어서"가 미덕입니다.
왜 먼저 구분해야 하는가
목적을 정하지 않으면 탐색용 밀집 차트를 보고서에 그대로 붙이거나, 반대로 탐색 단계에서 그림 하나를 며칠씩 다듬는 낭비가 생깁니다. "무엇을 말하려는가"가 차트 종류보다 먼저라는 원칙은 여기서 나옵니다. 말하려는 바가 없으면(탐색) 규범이 느슨하고, 말하려는 바가 하나로 정해지면(설명) 규범이 엄격해집니다.
2. 그래프 문법(Grammar of Graphics)
Leland Wilkinson이 제안하고 ggplot2·seaborn(objects 인터페이스)·altair·Vega-Lite가 공유하는 사고 틀입니다. 차트를 "막대 그래프", "산점도" 같은 완제품 이름으로 보지 않고, 독립적인 구성 요소의 조합으로 봅니다.
구성 요소 (조립 순서)
데이터(data): tidy 형태의 표. 한 행이 한 관측, 한 열이 한 변수입니다.
미학 매핑(aesthetic mapping): 어떤 열을 어떤 시각 채널에 연결할지. 예) x=날짜, y=매출, color=지역, size=거래량.
기하 객체(geom / mark): 매핑된 데이터를 어떤 도형으로 그릴지. 점, 선, 막대, 면적, 타일 등.
스케일(scale): 데이터 값을 화면 값으로 변환하는 규칙. 선형/로그 축, 색상 팔레트, 크기 범위, 범례가 여기서 결정됩니다.
facet: 데이터를 한 변수 기준으로 나눠 같은 그림을 여러 패널로 반복(small multiples).
여기에 통계 변환(stat) -예: 히스토그램은 원자료를 구간별 빈도로 집계하는 stat이 내장된 막대 -을 더하기도 합니다.
이 틀이 주는 이점
차트 이름을 외울 필요가 줄어듭니다. "구간 집계 stat + 막대 geom"이 히스토그램이고, "극좌표 + 누적 막대"가 파이차트임을 이해하면 새 차트도 조합으로 설계할 수 있습니다.
채널을 의식적으로 배정하게 됩니다. 변수를 x/y/color/size/facet 중 어디에 놓을지가 곧 시지각 정확도(다음 노트)와 직결됩니다.
도구 이식이 쉬워집니다. seaborn objects, altair, ggplot이 같은 어휘를 쓰므로 한 도구에서 익힌 설계가 다른 도구로 옮겨집니다.
matplotlib과의 관계
matplotlib은 문법 기반이 아니라 명령형(imperative) 도구입니다. "여기에 선을 그려라, 저기에 축을 붙여라"를 직접 지시합니다. seaborn과 pandas .plot은 그 위에 문법적 편의를 얹은 것이고, altair·plotly express는 선언적 문법을 정면에 둡니다. 문법은 개념 모델이고, 도구별 구현 방식은 도구 노트(Python - matplotlib MOC, Python - seaborn MOC)에 위임합니다.
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.