iBetter Books
수정

이 교재에서 배운 것

"어디서부터 시작했는지 기억해?"

선배가 물었습니다. 지윤은 잠깐 생각했습니다.

"처음엔 px.scatter() 한 줄도 낯설었어요. 차트가 HTML로 열리는 것도 신기했고요."

"그게 불과 몇 달 전 얘기야."

PART 01부터 04까지, 지윤이 쌓아온 것들을 정리해봤습니다.

파트 핵심 내용
PART 01. 첫 번째 인터랙티브 차트 Plotly Express로 첫 차트, 인터랙티브 기능, Graph Objects 구조 이해
PART 02. 다양한 차트 막대, 원형, 히스토그램, 박스플롯, 바이올린, 히트맵, 버블차트
PART 03. 레이아웃과 스타일링 서브플롯, 애니메이션, 테마, HTML 내보내기, 인터랙티브 위젯
PART 04. Pandas 연동과 실전 DataFrame 직접 전달, 공공데이터·주식 시각화, Dash 입문

짧은 표지만, 사실 그 안에 상당히 많은 내용이 압축되어 있습니다. px.scatter()의 편리함 뒤에는 go.Figure, data, layout 구조가 있고, Dash 콜백 뒤에는 Flask와 React가 있습니다. 기초를 배웠다는 건 그 구조를 이해하기 시작했다는 뜻입니다.

Plotly 생태계

Plotly는 차트 라이브러리만이 아닙니다. 회사 이름이기도 하고, 여러 도구를 묶은 생태계이기도 합니다.

"Plotly를 만든 회사가 여러 제품을 만들어. 네가 배운 plotly 파이썬 라이브러리는 그중 하나야."

선배가 설명을 이어갔습니다.

Dash

Plotly 회사에서 만든 웹 프레임워크입니다. 이 교재 PART 04에서 입문 수준을 다뤘습니다. Flask 위에서 동작하고, 콜백으로 인터랙티브 동작을 구현합니다.

이 교재에서 배운 것은 Dash의 출발점입니다. 더 깊이 배우려면 다음 개념들이 기다리고 있습니다.

  • 다중 페이지 앱: dcc.Location과 페이지 라우팅으로 여러 화면을 구성합니다.
  • 데이터 공유: dcc.Store와 클라이언트 사이드 콜백으로 성능을 높입니다.
  • Dash AG Grid: 수만 행의 데이터를 빠르게 테이블로 표시합니다.
  • Dash Bootstrap Components: Bootstrap 기반 레이아웃 컴포넌트 라이브러리입니다.
  • 배포: Gunicorn + Nginx 조합 또는 클라우드 플랫폼에 Dash 앱을 올립니다.

Dash Enterprise

Dash의 기업용 배포 플랫폼입니다. 오픈소스 Dash와 달리 다음 기능을 포함합니다.

  • 사용자 인증 및 권한 관리
  • Kubernetes 기반 자동 배포
  • 앱 모니터링 대시보드
  • 스케줄링된 리포트 생성

대기업이나 금융권에서 내부 BI 대시보드를 만들 때 주로 사용합니다. 오픈소스 Dash를 충분히 익힌 뒤 접근하면 됩니다.

Chart Studio

Plotly에서 제공하는 온라인 차트 에디터입니다. chart-studio 패키지를 설치하면 파이썬 코드로 만든 차트를 Chart Studio 클라우드에 업로드하고 공유할 수 있습니다.

# 파일: chart_studio_example.pyimport chart_studioimport chart_studio.plotly as pyimport plotly.express as pxchart_studio.tools.set_credentials_file(    username="your_username",    api_key="your_api_key")fig = px.scatter(x=[1, 2, 3], y=[4, 5, 6], title="Chart Studio 예시")py.plot(fig, filename="my-scatter", auto_open=True)

협업이 중요한 환경에서 유용합니다. 링크 하나로 차트를 공유하고, 온라인 에디터에서 비기술자도 스타일을 조정할 수 있습니다.

대규모 데이터 처리

발표 때 심사위원이 물었던 질문이 생각났습니다. "만 개 이상의 데이터도 이렇게 빠르게 렌더링돼요?"

솔직히 말하면, 일반 px.scatter()는 수만 개 이상의 데이터에서 느려집니다. 브라우저가 SVG 요소를 하나씩 그리기 때문입니다.

scattergl과 WebGL

scattergl은 WebGL을 사용해 GPU로 렌더링합니다. 수십만 개의 점도 빠르게 그릴 수 있습니다.

# 파일: large_data_example.pyimport plotly.graph_objects as goimport numpy as npN = 100_000x = np.random.randn(N)y = np.random.randn(N)fig = go.Figure(    data=go.Scattergl(        x=x,        y=y,        mode="markers",        marker=dict(size=3, opacity=0.5)    ))fig.update_layout(title=f"{N:,}개 데이터 포인트 (WebGL)")fig.show()

go.Scattergo.Scattergl로 바꾸기만 하면 됩니다. 같은 방식으로 go.Heatmapgl, go.Splom(Scatterplot matrix)도 WebGL 버전이 있습니다.

plotly-resampler

plotly-resampler는 대용량 시계열 데이터를 위한 라이브러리입니다. 화면에 보이는 범위에 맞게 데이터를 자동으로 다운샘플링해서 보여줍니다. 줌인하면 더 세밀한 데이터를 다시 불러옵니다.

pip install plotly-resampler
# 파일: resampler_example.pyfrom plotly_resampler import FigureResamplerimport plotly.graph_objects as goimport numpy as npN = 1_000_000  # 백만 개 데이터t = np.linspace(0, 100, N)y = np.sin(t) + np.random.randn(N) * 0.1fig = FigureResampler(go.Figure())fig.add_trace(go.Scatter(name="시계열"), hf_x=t, hf_y=y)fig.show_dash(mode="inline")

Jupyter 환경이나 Dash 앱에서 사용하면 수백만 개 시계열도 끊김 없이 탐색할 수 있습니다.

데이터 샘플링과 집계 전략

기술적인 해결책 이전에 데이터 자체를 줄이는 전략이 먼저입니다.

  • 집계: groupby로 시간 단위별(일별, 주별, 월별) 평균이나 합계를 계산합니다.
  • 샘플링: 전체 데이터의 대표 표본만 시각화합니다. df.sample(n=5000)처럼 사용합니다.
  • 구간화: pd.cut()이나 pd.qcut()으로 연속 데이터를 구간으로 나눈 뒤 집계합니다.
  • 지연 로딩: Dash 콜백에서 필터 조건에 맞는 데이터만 그때그때 불러옵니다.

"데이터가 많다고 다 보여주는 게 좋은 게 아니야. 사람 눈은 어차피 패턴을 보는 거거든. 적절히 요약해서 보여주는 게 더 나을 때가 많아."

선배의 말이 머릿속에 남았습니다.

Plotly vs Streamlit vs Dash 비교

"그러면 Streamlit이랑 Dash 중에서는 뭘 써야 해요?"

지윤이 물었던 질문입니다.

항목 Plotly Streamlit Dash
역할 차트 라이브러리 데이터 앱 프레임워크 대시보드 프레임워크
주요 언어 Python Python Python
난이도 쉬움 쉬움 중간
커스터마이징 차트만 제한적 높음
UI 구성 코드로 차트만 선언형 위젯 컴포넌트 조합
인터랙티브 차트 내 상호작용 위젯 기반 리런 콜백 기반 업데이트
배포 HTML 파일 또는 CDN Streamlit Community Cloud 자체 서버 또는 클라우드
적합한 용도 보고서, 논문, 발표 자료 빠른 프로토타입, 분석 공유 프로덕션 대시보드

세 도구는 경쟁 관계가 아닙니다. 목적에 따라 선택하는 겁니다.

Plotly로 차트를 만들고, Streamlit으로 빠르게 공유하거나, Dash로 완성도 높은 앱을 만드는 것. 셋 다 같이 씁니다.

추천 학습 경로

"졸업하면 뭐 하고 싶어?"

선배가 물었습니다.

"데이터 시각화 전문가로 일하고 싶어요."

지윤이 망설임 없이 답했습니다.

"그럼 어느 방향으로 가고 싶은지에 따라 다음이 달라져."

목표에 따라 다음 학습 경로가 다릅니다.

데이터 분석 방향

데이터를 탐색하고 인사이트를 도출하는 데 집중하고 싶다면.

Plotly → Dash → Dash Enterprise

분석 결과를 프로덕션 대시보드로 만들고 조직에 배포하는 흐름입니다. 같은 시리즈의 "소설처럼 읽는 pandas"를 함께 보는 것도 좋습니다.

데이터 앱 방향

빠르게 프로토타입을 만들고 공유하는 데 집중하고 싶다면.

Plotly → Streamlit

Streamlit은 코드 몇 줄로 앱을 만들고 바로 배포할 수 있습니다. 같은 시리즈의 "소설처럼 읽는 Streamlit"에서 이어갑니다.

웹 개발 방향

백엔드와 연동되는 본격적인 웹 서비스를 만들고 싶다면.

Plotly → Dash → FastAPI + Dash

Dash 앱을 FastAPI 백엔드와 연동하면 API를 통해 데이터를 받아 시각화하는 풀스택 구조를 만들 수 있습니다. "소설처럼 읽는 FastAPI"가 다음 책입니다.

"어떤 방향을 골라도 지금 배운 Plotly가 기반이야. 차트를 잘 그리는 사람은 어디서든 필요해."

선배가 커피잔을 들었습니다.

그리고, 졸업 후의 연락

그로부터 여덟 달이 지났습니다.

지윤은 캡스톤 발표 이후로도 혼자 Dash를 공부했습니다. 멀티 페이지 앱도 만들어보고, Dash Bootstrap으로 반응형 레이아웃도 구현해봤습니다. 졸업 논문에는 공공데이터 시각화 대시보드를 직접 만들어서 첨부했습니다.

졸업식 날 저녁, 지윤은 선배에게 메시지를 보냈습니다.

"언니, 저 데이터 분석 회사에 합격했어요."

답장은 금방 왔습니다.

"축하해! 근데 회사에서는 Dash로 프로덕션 대시보드도 만들어야 할 거야. 다음에 가르쳐줄게."

지윤은 웃으면서 답장을 입력했습니다.

"기다릴게요. 언니."

노트북을 열었습니다. 새 파일에 첫 줄을 입력했습니다.

import plotly.express as px

끝이 아니었습니다. 다시 시작이었습니다.