Skip to content

Streamlit을 사용하여 대화형 데이터 대시보드 구축: 포괄적인 튜토리얼

Updated on

데이터 과학의 영역에서 데이터를 시각화하고 상호 작용하는 능력은 매우 중요합니다. 이것이 Streamlit이 등장하는 곳입니다. Streamlit은 데이터 탐색과 시각화를 위한 사용자 정의 웹 앱을 만들 수 있게 해주는 오픈 소스 Python 라이브러리입니다. 이 튜토리얼에서는 Streamlit의 세계에 빠져들어 대화형 대시보드를 구축하고, 머신러닝 모델을 배포하는 방법 등을 배워보겠습니다.

Streamlit 앱을 Tableau처럼 만들어주는 멋진 데이터 분석 및 데이터 시각화 도구, 'PyGWalker'를 들어보셨나요?

PyGWalker (opens in a new tab)는 여러분의 Streamlit 앱을 쉽게 Tableau와 비슷한 UI로 포함시킬 수 있는 Python 라이브러리입니다.

Data Visualization을 위한 PyGWalker in Streamlit (opens in a new tab)

Streamlit 소개

Streamlit이란?

Streamlit은 머신러닝과 데이터 과학을 위한 사용자 정의 웹 앱을 쉽게 만들 수 있게 해주는 오픈 소스 Python 라이브러리입니다. 데이터가 왕인 세계에서 Streamlit은 여왕으로, 데이터를 생생하게 만들어주는 필수 도구를 제공합니다.

Streamlit은 직관적이고 사용자 친화적인 인터페이스를 통해 데이터 스크립트를 공유 가능한 웹 앱으로 빠르고 쉽게 만들 수 있습니다. 몇 줄의 코드로 아름답고 상호 작용하는 대시보드와 데이터 시각화를 만들 수 있습니다. 전문적인 데이터 과학자이거나 데이터 풀에 발을 담그기 시작하는 초보자라 할지라도, Streamlit은 데이터를 이해하고 제시하는 데 도움이 되는 다재다능한 플랫폼을 제공합니다.

데이터 시각화에 Streamlit 사용의 장점

데이터 시각화는 데이터 분석의 중요한 측면입니다. 시각화는 복잡한 데이터 세트를 그래픽적이고 이해하기 쉬운 형식으로 나타내어 우리가 이해할 수 있도록 도와줍니다. Streamlit은 이러한 측면에서 뛰어나 다음과 같은 이점을 제공합니다:

  • 실시간 시각화: Streamlit의 실시간 기능을 통해 데이터가 변경되는 대로 대시보드가 즉시 업데이트됩니다. 이는 실시간 데이터 피드 또는 KPI를 추적하는 데 특히 유용합니다.

  • 상호 작용형 대시보드: Streamlit을 사용하면 대시보드는 정적 이미지가 아니라 상호 작용형 웹 앱입니다. 이를 통해 사용자는 데이터를 조작하고 특정 영역을 확대하며 세부 사항을 자세히 살펴볼 수 있습니다.

  • 사용 편의성: Streamlit은 사용자 친화적으로 설계되었습니다. 멋진 대시보드를 만들기 위해 웹 개발자가 되지 않아도 됩니다. 파이썬 코드를 작성할 수 있다면 Streamlit을 사용할 수 있습니다.

  • Python 데이터 과학 스택과의 통합: Streamlit은 Pandas, NumPy, Plotly와 같은 인기있는 Python 라이브러리와 매끄럽게 통합되므로 모든 데이터 과학자의 강력한 도구입니다.

머신러닝 모델에서의 Streamlit의 역할

Streamlit은 데이터 시각화에만 사용되는 것은 아닙니다. 머신러닝에 대한 강력한 도구입니다. Streamlit을 사용하면 머신러닝 모델을 자랑할 수 있는 상호 작용형 웹 앱을 빠르게 만들 수 있습니다. 이는 이해 관계자들에게 모델의 능력을 시연할 때 특히 유용하며, 디버깅 및 모델 튜닝에도 유용합니다.

예를 들어, 사용자 입력을 받아 머신러닝 모델에 전달하고 실시간으로 예측 결과를 표시하는 Streamlit 앱을 만들 수 있습니다. 또는 모델의 매개변수를 조정하고 그것이 출력에 어떤 영향을 미치는지 볼 수 있는 앱을 생성할 수도 있습니다. 가능성은 무궁무진합니다.

Streamlit으로 대시보드 구축하기

Streamlit으로 대시보드 구축하는 방법

Streamlit을 사용하여 대시보드를 구축하는 것은 간단한 프로세스입니다. 여기에 시작하기 위한 기본적인 예시가 있습니다:

import streamlit as st
import pandas as pd
 
# 데이터 로드
data = pd.read_csv('data.csv')
 
# 제목 생성
st.title('나의 첫 번째 Streamlit 대시보드')
 
# 테이블에 데이터 표시
st.table(data)

이 예시에서는 먼저 필요한 라이브러리를 가져옵니다. 그런 다음 Pandas를 사용하여 데이터를 로드합니다. 다음으로 st.title() 함수를 사용하여 대시보드의 제목을 만듭니다. 마지막으로 st.table() 함수를 사용하여 데이터를 테이블에 표시합니다.

Streamlit을 사용한 실시간 데이터 대시보드

Streamlit의 주요 기능 중 하나는 실시간 대시보드를 만들 수 있는 능력입니다. 이것은 실시간 데이터 피드를 다룰 때나 데이터의 변화를 시간에 따라 모니터링해야 할 때 특히 유용합니다.

실시간 대시보드를 만들려면, st.write() 함수를 루프 안에서 사용하면 됩니다. 다음은 예시입니다:

import streamlit as st
import pandas as pd
import time
 
# 제목 생성
st.title('실시간 데이터 대시보드')
 
# 빈 DataFrame 초기화
data = pd.DataFrame()
 
# 매 초마다 데이터 업데이트
for i in range(100):
    # 새로운 데이터 모방
    new_data = pd.DataFrame({'value': [i]}, index=[time.time()])
    
    # 새로운 데이터를 기존 데이터에 추가
    data = data.append(new_data)
    
    # 데이터 표시
    st.write(data)
    
    # 업데이트하기 전에 1초 대기
    time.sleep(1)

이 예시에서는 먼저 대시보드의 제목을 만듭니다. 다음으로 데이터를 저장할 빈 DataFrame을 초기화합니다. 그런 다음 매 초마다 새로운 데이터가 들어오는 것을 모방하는 루프에 들어갑니다. 이 새로운 데이터를 기존 데이터에 추가하고 st.write() 함수를 사용하여 표시합니다. 마지막으로 데이터를 다시 업데이트하기 전에 1초간 대기합니다.

Streamlit으로 대화형 데이터 시각화

Streamlit을 사용하면 대화형 데이터 시각화도 만들 수 있습니다. 이는 Plotly 라이브러리와 통합되는 st.plotly_chart() 함수를 사용하여 수행할 수 있습니다.

다음은 대화형 산점도를 만드는 예시입니다:

import streamlit as st
import pandas as pd
 
import plotly.express as px
 
# 데이터 불러오기
data = pd.read_csv('data.csv')
 
# 산점도 그래프 생성
fig = px.scatter(data, x='x', y='y')
 
# 그래프 표시
st.plotly_chart(fig)

이 예제에서는 먼저 데이터를 불러옵니다. 그런 다음 Plotly Express를 사용하여 산점도 그래프를 생성합니다. 마지막으로 st.plotly_chart() 함수를 사용하여 그래프를 표시합니다.

이것은 Streamlit으로 할 수 있는 것 중 일부에 불과합니다. 약간의 창의력과 파이썬 노하우를 가지고 있으면 데이터를 시각화하는 멋진 대화형 대시보드를 만들 수 있습니다.

Streamlit을 사용한 실시간 데이터 시각화

Streamlit의 실시간 데이터 처리 기능은 가장 강력한 기능 중 하나입니다. 이는 지속적인 모니터링 또는 실시간 업데이트가 필요한 응용 프로그램에 특히 유용합니다. 예를 들어, IoT 센서 데이터를 실시간으로 모니터링하는 Streamlit 대시보드를 만들 수 있습니다. 다음은 간단한 예입니다:

import streamlit as st
import random
import time
 
st.title('실시간 IoT 센서 데이터')
 
data = []
 
for _ in range(100):
    data.append(random.randint(0, 100))
    st.line_chart(data)
    time.sleep(0.1)

이 예제에서는 랜덤한 숫자를 생성하여 0.1초마다 라인 차트를 업데이트하여 실시간 IoT 센서 데이터를 모의하고 있습니다.

Streamlit을 사용한 대화형 기계 학습 모델

Streamlit의 대화형 기능은 기계 학습 모델에도 확장됩니다. 사용자가 모델 매개 변수를 조정하고 실시간으로 결과를 확인할 수 있는 대시보드를 만들 수 있습니다. 이는 다른 매개 변수가 모델의 예측에 어떤 영향을 미치는지 이해하는 데 유용한 도구가 될 수 있습니다.

예를 들어, 고객의 연령, 재직기간 및 월간 요금과 같은 기능을 기반으로 고객 이탈을 예측하는 기계 학습 모델이 있다고 가정해 봅시다. 사용자가 이러한 매개 변수를 조정하고 실시간으로 예측된 이탈 확률을 확인할 수 있는 Streamlit 앱을 만들 수 있습니다. 다음은 기본적인 예입니다:

import streamlit as st
from sklearn.ensemble import RandomForestClassifier
import numpy as np
 
st.title('고객 이탈 예측')
 
# 훈련된 모델 불러오기
model = RandomForestClassifier()
model.load('my_model.pkl')
 
# 사용자 입력 받기
age = st.slider('나이', 18, 100)
tenure = st.slider('재직 기간 (개월)', 1, 72)
monthly_charges = st.slider('월간 요금', 20.0, 100.0)
 
# 예측하기
input_data = np.array([[age, tenure, monthly_charges]])
prediction = model.predict_proba(input_data)
 
# 예측 결과 표시
st.write(f'이탈 확률: {prediction[0][1]}')

이 예제에서는 먼저 훈련된 모델을 로드합니다. 그런 다음 Streamlit의 slider 함수를 사용하여 고객의 나이, 재직 기간 및 월간 요금을 사용자 입력으로 받습니다. 이 입력을 모델에 전달하여 예측을 수행한 다음 예측된 이탈 확률을 표시합니다.

Streamlit을 사용한 IoT 데이터 시각화

사물 인터넷 (IoT)의 부상으로 인해 IoT 데이터를 시각화할 수 있는 도구에 대한 수요가 증가하고 있습니다. Streamlit은 실시간 기능과 사용 편의성으로 인해 이 작업에 적합한 도구입니다.

이 예제에서는 sensor_data.csv라는 이름의 CSV 파일에 실시간 IoT 센서 데이터가 포함되어 있다고 가정합니다. 이 데이터를 Streamlit에서 표시하는 방법은 다음과 같습니다:

import streamlit as st
import pandas as pd
import time
 
st.title('실시간 IoT 센서 데이터')
 
# 데이터 불러오기
data = pd.read_csv('sensor_data.csv')
 
# 데이터 실시간 표시
for i in range(len(data)):
    # 현재 데이터 포인트 표시
    st.line_chart(data[:i+1])
    
    # 다음 데이터 포인트를 표시하기 전에 잠시 대기
    time.sleep(0.1)

이 예제에서는 먼저 CSV 파일에서 센서 데이터를 로드합니다. 그런 다음 데이터를 실시간으로 표시하기 위해 한 번에 한 데이터 포인트씩 선 그래프에 추가합니다. 각 데이터 포인트가 추가된 후에는 다음 데이터 포인트를 추가하기 전에 잠시 대기합니다. 이렇게 하면 데이터가 실시간으로 표시되는 효과가 만들어집니다.

결론

Streamlit은 대화형 데이터 대시보드를 만드는 강력한 도구입니다. 실시간 IoT 데이터를 시각화하고 기계 학습 모델을 소개하거나 데이터 세트를 탐색하는 경우를 포함하여 많은 데이터 과학자와 분석가에게 많은 인기를 얻고 있습니다. 이러한 예제는 Streamlit의 가능성을 일부만 보여주는 것이며, 더 많은 기능을 탐색하도록 권장합니다.

Streamlit 앱을 Tableau 같은 UI로 변환해주는 멋진 데이터 분석 및 데이터 시각화 도구인 PyGWalker를 들어보셨나요?

PyGWalker (opens in a new tab)는 Streamlit 앱을 손쉽게 Tableau 같은 UI로 포장해주는 Python 라이브러리입니다.

PyGWalker를 사용한 데이터 시각화 (opens in a new tab)

자주 묻는 질문

Streamlit은 대시보드를 만드는 데 좋은 도구인가요?

네, Streamlit은 대화형 데이터 대시보드를 만드는데 우수한 도구입니다. 파이썬 기반이기 때문에 많은 데이터 과학자에게 접근 가능하며, 데이터 시각화와 상호 작용을 위한 다양한 기능을 제공합니다.

Streamlit은 Flask보다 좋은가요?

Streamlit과 Flask는 서로 다른 목적을 가지고 있습니다. Flask는 일반적인 웹 프레임워크이고, Streamlit은 특히 데이터 대시보드를 만들기 위해 설계되었습니다. 빠르고 쉽게 데이터 대시보드를 구축하려면 Streamlit이 더 나은 선택일 것입니다.

Streamlit의 단점은 무엇인가요?

Streamlit은 강력한 도구이지만 일부 제한 사항이 있습니다. 예를 들어, 다른 대시보드 도구와 같은 수준으로 사용자 정의가 가능하지 않습니다. 또한, 간단한 독립적인 앱을 만드는 데는 좋지만 복잡한 웹 애플리케이션에는 적합하지 않을 수 있습니다.

왜 Dash가 Streamlit보다 좋은가요? 해당하는 사용 용도에 따라 Dash가 Streamlit보다 나을 수도 있습니다. 또한, 상호작용적인 웹 애플리케이션을 생성하기 위한 Python 라이브러리인 Dash는 Streamlit에 비해 더 많은 사용자 정의 옵션을 제공합니다. 그러나 Streamlit은 간결함과 사용 편의성으로 종종 칭찬받으며, 빠른 프로토타이핑과 간단한 대시보드에 더 적합할 수 있습니다.