데이터 분석가:Applied Data Analytics/데이터 시각화
Dash (by Plotly)란?
데이터분석
2025. 5. 28. 18:16
320x100
728x90
1.1 기본 개념
- Dash는 Python 기반의 웹 애플리케이션 프레임워크입니다.
- 특히 데이터 시각화 대시보드를 만들기 위해 설계되었습니다.
- Plotly라는 시각화 라이브러리를 기반으로 동작합니다.
- HTML, CSS, JavaScript를 직접 다룰 필요 없이 Python 코드만으로 대시보드를 만들 수 있습니다.
1.2 다른 도구들과의 비교 (Superset, Looker, Tableau)
기술기반 | Python | SQL + UI | LookML | Drag & Drop |
실시간 인터랙션 | 매우 강력 (Python 콜백 사용) | 제한적 (필터링 위주) | 일부 가능 | 필터링 가능 |
예측 모델 연동 | Python으로 직접 구현 가능 (sklearn, XGBoost 등) | 어려움 | Looker Action 필요 | 외부 연동 필요 |
커스터마이징 | 완전 자유 (코드 기반) | 제한적 | 제한적 | 제한적 |
학습 곡선 | 높음 (코딩 필요) | 중간 | 중간 | 낮음 |
2. Dash 설치 및 시작하기
2.1 설치
pip install dash
필요한 경우 Plotly와 Pandas도 함께 설치:
pip install plotly pandas scikit-learn
3. 기본 구조 이해하기
Dash 앱은 크게 3가지 구성요소로 이루어집니다:
- 레이아웃 (layout) – 화면 구성
- 콜백 (callback) – 사용자 인터랙션 처리
- 서버 실행 (app.run_server) – 웹에서 실행
예시 코드 구조:
import dash
from dash import dcc, html
from dash.dependencies import Input, Output
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Input(id='input-value', type='number', value=10),
html.Div(id='output-value')
])
@app.callback(
Output('output-value', 'children'),
Input('input-value', 'value')
)
def update_output(val):
return f'입력한 숫자는 {val}입니다.'
app.run_server(debug=True)
from dash import dcc, html
from dash.dependencies import Input, Output
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Input(id='input-value', type='number', value=10),
html.Div(id='output-value')
])
@app.callback(
Output('output-value', 'children'),
Input('input-value', 'value')
)
def update_output(val):
return f'입력한 숫자는 {val}입니다.'
app.run_server(debug=True)
4. 실시간 예측 대시보드 구현 메뉴얼
4.1 시나리오
예를 들어, "광고 클릭 수에 따라 매출을 예측하는 머신러닝 모델"을 실시간 입력으로 예측한다고 가정합니다.
4.2 단계별 구현
1단계: 예측 모델 만들기 (sklearn 사용)
import pandas as pd
from sklearn.linear_model import LinearRegression
# 예제 데이터
df = pd.DataFrame({
'ad_clicks': [10, 20, 30, 40, 50],
'sales': [100, 200, 280, 390, 500]
})
model = LinearRegression()
model.fit(df[['ad_clicks']], df['sales'])
from sklearn.linear_model import LinearRegression
# 예제 데이터
df = pd.DataFrame({
'ad_clicks': [10, 20, 30, 40, 50],
'sales': [100, 200, 280, 390, 500]
})
model = LinearRegression()
model.fit(df[['ad_clicks']], df['sales'])
2단계: Dash 앱에 예측 모델 연동
import dash
from dash import dcc, html
from dash.dependencies import Input, Output
app = dash.Dash(__name__)
app.layout = html.Div([
html.H1("실시간 매출 예측기"),
dcc.Input(id='click-input', type='number', value=20, debounce=True),
html.Div(id='predicted-sales')
])
@app.callback(
Output('predicted-sales', 'children'),
Input('click-input', 'value')
)
def predict_sales(clicks):
result = model.predict([[clicks]])[0]
return f"예상 매출: {result:.2f}원"
app.run_server(debug=True)
from dash import dcc, html
from dash.dependencies import Input, Output
app = dash.Dash(__name__)
app.layout = html.Div([
html.H1("실시간 매출 예측기"),
dcc.Input(id='click-input', type='number', value=20, debounce=True),
html.Div(id='predicted-sales')
])
@app.callback(
Output('predicted-sales', 'children'),
Input('click-input', 'value')
)
def predict_sales(clicks):
result = model.predict([[clicks]])[0]
return f"예상 매출: {result:.2f}원"
app.run_server(debug=True)
5. 배포/공유
- 로컬환경에서 실행됨: http://127.0.0.1:8050
- 외부 배포:
- Heroku, Render, Railway, AWS 등을 통해 배포 가능
- Streamlit처럼 간단 배포는 불가능하므로 약간의 웹 배포 지식 필요
6. 실전 응용 아이디어
프로젝트 일정관리 | 자원 투입량에 따른 예측 공정률 표시 |
마케팅 분석 | 유입경로별 전환율 예측 |
건강 데이터 | 운동량에 따른 칼로리 소모 예측 |
주가 분석 | 특정 조건에서 주가 예측 (주의: 회귀모델 한계 고려) |
7. 학습 팁
- Plotly 공식 문서: https://dash.plotly.com/
- Dash 앱 샘플 모음: https://dash.gallery/Portal/
- 콜백 동작 원리 이해: Input → Callback 함수 → Output 흐름 반복 학습
요약
- Dash는 Python 개발자용 시각화 + 머신러닝 대시보드 도구
- Superset/Looker/Tableau보다 코딩 유연성, 실시간 예측에 강점
- scikit-learn 등 머신러닝과 자연스럽게 연동
- 초보자도 단계별 코드 구조만 익히면 사용 가능