데이터에 생명을 불어넣다: Plotly Python 시각화 가이드
데이터 시각화는 개발자만의 영역이 아닙니다. 취업 포트폴리오, 사업 기획서, 프로젝트 리포트까지—배워두면 인생 전반에서 요긴하게 쓰이는 스킬입니다. Plotly Python으로 누구나 쉽게 시작할 수 있는 인터랙티브 시각화의 세계를 소개합니다.
시작하며
브리딩을 시작하고 나서 매일 기록하는 습관이 생겼습니다. 체중, 급여량, 온습도... 숫자들이 쌓여가면서 자연스럽게 궁금해졌습니다. "이 데이터들을 어떻게 하면 더 잘 볼 수 있을까?"
엑셀로 표를 만들어 봤지만, 숫자가 늘어날수록 패턴을 파악하기 어려웠습니다. 그래프를 그려봐도 정적인 이미지로는 뭔가 부족했습니다. 특정 구간을 확대하거나, 정확한 수치를 확인하고 싶을 때 답답했습니다.
글을 쓸 때도, 기획서를 만들 때도, 연구 결과를 정리할 때도 데이터 시각화는 모든 시작의 출발점인 것 같습니다. 그래서 오늘은 제가 사용하고 있는 Plotly Python을 소개해 드리려 합니다.
왜 Plotly인가?
Python에는 matplotlib, seaborn, bokeh 등 수많은 시각화 라이브러리가 있습니다. 그중에서 Plotly를 선택한 이유는 단순합니다. 인터랙티브하기 때문입니다.
마우스를 올리면 정확한 수치가 보이고, 확대/축소가 자유롭고, 웹에서 바로 공유할 수 있습니다. 정적인 이미지가 아닌, 데이터와 대화할 수 있는 차트를 만들 수 있습니다.
특히 Jupyter Notebook 환경에서 바로 결과를 확인할 수 있어서, 데이터 분석 작업 흐름이 훨씬 자연스러워집니다. 차트를 HTML 파일로 내보내면 Python이 없는 환경에서도 볼 수 있습니다.
설치와 기본 설정
설치는 pip 한 줄이면 끝납니다:
pip install plotly
Jupyter Notebook에서 사용하신다면 추가로 설치하면 좋은 패키지가 있습니다:
pip install plotly nbformat pandas
기본적인 import는 이렇게 합니다:
import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
Plotly Express vs Graph Objects
Plotly에는 두 가지 API가 있습니다. 각각의 특성을 이해하면 상황에 맞게 선택할 수 있습니다.
Plotly Express (px)
빠르고 간편한 고수준 API입니다. 한 줄의 코드로 대부분의 기본 차트를 만들 수 있습니다. 데이터프레임과 궁합이 좋아서 탐색적 분석에 적합합니다.
# 간단한 산점도
fig = px.scatter(df, x="weight", y="growth_rate", color="individual")
fig.show()
Graph Objects (go)
세밀한 커스터마이징이 필요할 때 사용하는 저수준 API입니다. 차트의 모든 요소를 직접 제어할 수 있습니다. 복잡한 대시보드나 특수한 시각화를 만들 때 유용합니다.
# 상세 설정이 가능한 산점도
fig = go.Figure(data=go.Scatter(
x=df["weight"],
y=df["growth_rate"],
mode="markers",
marker=dict(size=10, color=df["age"], colorscale="Viridis")
))
fig.update_layout(title="체중과 성장률의 관계")
fig.show()
처음에는 Plotly Express로 시작하고, 더 세밀한 조정이 필요해지면 Graph Objects로 전환하는 것을 추천합니다.
다양한 시각화 유형
Plotly로 만들 수 있는 차트들을 살펴보겠습니다. 각각의 차트는 어떤 상황에서 쓰면 좋은지도 함께 설명드릴게요.
1. 3D Surface Plot
3차원 데이터를 표면으로 시각화합니다. 마우스를 올리면 정확한 x, y, z 값을 확인할 수 있습니다. 복잡한 수치 데이터의 패턴을 직관적으로 파악할 때 유용합니다.
활용 예시: 온도-습도-성장률의 관계, 시간-급여량-체중 변화 등 세 가지 변수의 상호작용을 한눈에 보고 싶을 때 적합합니다.
2. 생물정보학 시각화
시퀀스 정렬, Gap 분석, Conservation 수준 등을 한눈에 볼 수 있습니다. 연구 분야에서 많이 활용됩니다.
히트맵 형태로 각 포지션별 특성을 색상으로 표현하면, 수백 줄의 데이터도 패턴으로 빠르게 파악할 수 있습니다. 브리딩 데이터에서도 개체별 성장 패턴을 히트맵으로 표현하면 비교가 쉬워집니다.
3. Sankey Diagram
데이터의 흐름을 시각화합니다. 어디서 어디로 얼마나 흘러가는지 추적할 때 적합합니다. 비즈니스에서 고객 여정이나 자원 배분을 분석할 때 자주 사용됩니다.
활용 예시: 급여 종류별 섭취량 흐름, 브리딩 라인별 자손 분포 등 "무엇이 어디로 흘러가는가"를 보여줄 때 효과적입니다.
4. 지도 + 히스토그램 조합
지리 데이터와 시계열 데이터를 결합한 대시보드입니다. 위치별 분포와 시간대별 패턴을 동시에 확인할 수 있습니다. 히스토그램의 막대를 클릭하면 해당 시간대의 지도 데이터만 필터링됩니다.
이런 복합 대시보드는 Plotly의 subplots 기능과 callback을 활용해서 만들 수 있습니다. Dash 프레임워크를 사용하면 더욱 인터랙티브한 웹 앱으로 발전시킬 수도 있습니다.
5. 3D Climate Surface
시나리오별 비교 분석에 적합한 형태입니다. 기후 데이터처럼 여러 변수가 복합적으로 작용하는 경우, 3D 표면으로 시각화하면 트렌드를 쉽게 파악할 수 있습니다.
각 표면의 색상과 투명도를 다르게 설정하면 여러 시나리오를 한 화면에서 비교할 수 있습니다. 마우스로 회전하면서 다양한 각도에서 데이터를 살펴볼 수 있는 게 장점입니다.
실전 팁
Plotly를 사용하면서 알게 된 몇 가지 팁을 공유합니다.
- 테마 설정:
fig.update_layout(template="plotly_dark")로 다크 모드 차트를 만들 수 있습니다. - HTML 내보내기:
fig.write_html("chart.html")로 독립 실행 가능한 HTML 파일을 생성합니다. - 이미지 저장:
fig.write_image("chart.png")로 정적 이미지를 저장할 수 있습니다. (kaleido 패키지 필요) - 애니메이션:
animation_frame파라미터로 시간에 따른 변화를 애니메이션으로 보여줄 수 있습니다.
브리딩에서의 활용
저는 앞으로 브리딩 데이터도 Plotly로 시각화해볼 계획입니다. 개체별 체중 추이를 라인 차트로, 급여량과 성장률의 상관관계를 scatter plot으로 만들면 더 체계적인 관리가 가능할 것 같습니다.
특히 관심 가는 활용 방법은:
- 개체별 성장 곡선 비교 (라인 차트)
- 온도-습도-활동량 상관관계 (3D 산점도)
- 급여 기록 히트맵 (언제 무엇을 얼마나 먹었는지)
- 월별 성장 추이 애니메이션
다음 글에서는 실제 브리딩 데이터로 차트를 만드는 과정을 코드와 함께 공유해 드리겠습니다.
마무리
데이터 시각화는 단순히 "예쁜 그래프"를 만드는 것이 아닙니다. 숫자 속에 숨어있는 이야기를 찾아내고, 그 이야기를 다른 사람에게 전달하는 과정입니다.
Plotly는 그 과정을 훨씬 쉽고 재미있게 만들어 줍니다. 처음에는 복잡해 보일 수 있지만, 기본 문법만 익히면 다양한 차트를 자유롭게 만들 수 있습니다.
관심 있으신 분들은 Plotly 공식 문서 에서 더 많은 예제를 확인해 보세요. 특히 Basic Charts 섹션은 입문자에게 좋은 시작점이 됩니다.
