FastAPI와 Streamlit으로 실시간 데이터 페이지 만들기 (1)

2024. 11. 9. 22:38금융공학/파이썬

파이썬 데이터 애플리케이션을 개발할 때, FastAPI와 Streamlit을 함께 사용하면 데이터 수집 및 처리와 실시간 시각화를 동시에 구현할 수 있어 개발 효율성과 유연성을 높여줍니다. FastAPI는 빠르고 강력한 비동기 백엔드 프레임워크로, 실시간 데이터를 제공하기에 적합합니다. Streamlit은 인터랙티브한 데이터 대시보드를 쉽고 빠르게 구축할 수 있는 프론트엔드 도구입니다. 이 둘을 함께 사용하면 빠르고 간편하게 실시간 데이터를 처리하고 시각화하는 웹 애플리케이션을 만들 수 있습니다. 저는 앞으로 몇번의 포스트에 걸쳐 개인적으로 진행하고 있는 금융 프로그램의 모니터링, 대시보드를 구축해보도록 하겠습니다.

 

함께보기

2024.09.13 - [Study/Python] - Python 활용 데이터 기반 웹 애플리케이션 툴

 

Python 활용 데이터 기반 웹 애플리케이션 툴

Python은 다양한 데이터 시각화, 분석 및 머신러닝 라이브러리와 통합하여 웹 애플리케이션을 쉽게 개발할 수 있는 도구들을 제공합니다. 이번 블로그에서는 간단한 도구 소개를 넘어서 각 도구

sncodelog.tistory.com

 

 

환경설정

최소 요구 사항 패키지를 설치/확인합니다.

pip install fastapi uvicorn streamlit

 

 

코드작성

새 파이썬 프로젝트를 생성한 후 main.py 코드를 다음과 같이 작성합니다.

FastAPI 서버를 main.py에 설정됩니다.

함수는 랜덤 가격을 실시간 데이터로 제공하는 API 엔드포인트를 만들었습니다.

# main.py
from fastapi import FastAPI
import random

app = FastAPI()

@app.get("/price")
async def get_price():
    """
    예시 데이터로 랜덤 가격 정보를 제공하는 API 엔드포인트.
    """
    price_data = {
        "price": round(random.uniform(30000, 40000), 2)
    }
    return price_data

 

 

두 번째 파일은 app.py로 만들고 코드를 다음과 같이 작성합니다.

Streamlit 파일에서는 FastAPI에서 제공하는 데이터를 호출하여 시각화합니다.

# app.py
import streamlit as st
import requests
import time
import pandas as pd

st.title("Real-Time Price Data")

# 실시간 가격 데이터를 가져오는 함수
def get_price_data():
    response = requests.get("http://127.0.0.1:8000/price")
    if response.status_code == 200:
        return response.json()["price"]
    else:
        st.error("Failed to retrieve data.")
        return None

# 데이터 저장을 위한 리스트 생성
price_data = []
timestamps = []

# 그래프 갱신을 위한 빈 공간 생성
chart_placeholder = st.empty()

# Streamlit에서 실시간 데이터를 지속적으로 업데이트하여 표시
while True:
    price = get_price_data()
    if price:
        # 시간과 가격 데이터를 리스트에 추가
        timestamps.append(time.time())
        price_data.append(price)
        
        # 데이터프레임으로 변환 후 그래프 업데이트
        df = pd.DataFrame({"Time": timestamps, "Price": price_data})
        df["Time"] = pd.to_datetime(df["Time"], unit="s")  # 시간 데이터를 포맷팅
        
        # 실시간 가격을 플롯
        chart_placeholder.line_chart(df.set_index("Time")["Price"])

    # 1초마다 데이터 수집
    time.sleep(1)

 

실행

먼저 프로젝트 경로의 터미널에서 Fast API를 실행합니다.

uvicorn main:app --reload

 

새 터미널을 열고 Streamlit을 실행합니다.

streamlit run app.py --autoreload

 

아래와 같이 실시간으로 가격 그래프가 그려지는 결과를 로컬 환경에서 확인할 수 있습니다.

 

 

다음 포스트에서 금융데이터를 실제로 불러와 대시보드에 원하는대로 그려봅시다.

'금융공학 > 파이썬' 카테고리의 다른 글

Python 활용 데이터 기반 웹 애플리케이션 툴  (1) 2024.09.13