Skip to main content

Plotly 기초

Plotly는 인터랙티브 시각화 라이브러리입니다. 마우스 호버로 데이터 값을 확인하고, 확대/축소, 범위 선택이 가능합니다. Plotly Express는 Plotly의 고수준 API로, 한 줄의 코드로 풍부한 인터랙티브 차트를 생성합니다.

학습 목표

  • Plotly Express로 기본 차트(scatter, bar, line)를 그릴 수 있다
  • hover_data로 인터랙티브 정보를 추가할 수 있다
  • 차트 테마와 색상을 변경할 수 있다
  • HTML로 차트를 저장하고 공유할 수 있다

왜 중요한가

정적 차트로는 수천 개의 데이터 포인트에서 개별 값을 확인하기 어렵습니다. 인터랙티브 차트는 탐색적 분석에서 데이터를 직접 조작하며 인사이트를 발견할 수 있게 해줍니다. 또한 프레젠테이션이나 보고서에서 청중이 직접 데이터를 탐색할 수 있습니다.

기본 차트

import plotly.express as px
import pandas as pd
import numpy as np

np.random.seed(42)
df = pd.DataFrame({
    'experience': np.random.uniform(1, 20, 100).round(1),
    'salary': (np.random.normal(4000, 1000, 100) + np.random.uniform(1, 20, 100) * 150).round(0),
    'department': np.random.choice(['개발', '영업', '마케팅'], 100),
    'performance': np.random.uniform(60, 100, 100).round(1)
})

# 산점도
fig = px.scatter(df, x='experience', y='salary',
                 color='department', size='performance',
                 hover_data=['performance'],
                 title='경력 vs 연봉')
fig.show()

# 막대 그래프
dept_avg = df.groupby('department')['salary'].mean().reset_index()
fig = px.bar(dept_avg, x='department', y='salary',
             color='department', title='부서별 평균 연봉')
fig.show()

# 선 그래프
dates = pd.date_range('2024-01-01', periods=30, freq='D')
ts = pd.DataFrame({
    'date': dates,
    'value': np.cumsum(np.random.randn(30)) + 100
})
fig = px.line(ts, x='date', y='value', title='일별 추이')
fig.show()

히스토그램과 박스플롯

# 히스토그램
fig = px.histogram(df, x='salary', nbins=30, color='department',
                   marginal='box', title='연봉 분포')
fig.show()

# 박스플롯
fig = px.box(df, x='department', y='salary', color='department',
             points='all', title='부서별 연봉 분포')
fig.show()

테마와 커스터마이징

# 테마 변경
fig = px.scatter(df, x='experience', y='salary', color='department',
                 template='plotly_white',  # 깔끔한 흰 배경
                 title='경력 vs 연봉')
fig.update_layout(
    font=dict(size=14),
    title_font_size=18,
    legend_title='부서'
)
fig.show()

# 사용 가능한 테마
# plotly, plotly_white, plotly_dark, ggplot2, seaborn, simple_white

저장

# HTML로 저장 (인터랙티브 유지)
fig.write_html('chart.html')

# 이미지로 저장 (kaleido 필요: pip install kaleido)
fig.write_image('chart.png', scale=2)
fig.write_image('chart.pdf')

AI/ML에서의 활용

  • 대규모 데이터 탐색: 호버로 개별 데이터 포인트를 확인합니다
  • 모델 성능 대시보드: 여러 실험의 결과를 인터랙티브하게 비교합니다
  • 결과 공유: HTML 파일로 저장하여 비기술자와 분석 결과를 공유합니다
Plotly Express(px)는 고수준 API로 한 줄로 차트를 만들 수 있고, Graph Objects(go)는 저수준 API로 세밀한 제어가 가능합니다. 대부분의 경우 Express로 충분하며, 복잡한 커스터마이징이 필요할 때 Graph Objects를 사용합니다.

체크리스트

  • Plotly Express로 scatter, bar, line 차트를 그릴 수 있다
  • color, size, hover_data로 다차원 정보를 표현할 수 있다
  • 차트 테마를 변경할 수 있다
  • HTML과 이미지로 차트를 저장할 수 있다

다음 문서