안녕하세요!
오늘은 지난 시간에 구현한 코인 모멘텀 전략을 Streamlit 라이브러리를 사용하여 대시보드로 구현하는 방법에 대해 알아보겠습니다.
Streamlit은 Python 기반의 오픈소스 라이브러리로, 데이터 애플리케이션과 대시보드를 간단한 Python 코드로 빠르게 개발할 수 있는 도구입니다. 데이터를 시각화하고 인터랙티브한 기능을 추가하기에 적합하며, 데이터 과학자와 분석가에게 특히 유용합니다.
Streamlit 실행 방법
1. Streamlit 및 추가 라이브러리 설치:
pip install streamlit requests pandas tabulate
2. 코드 실행:
해당 파일을 crypto_dashboard.py로 저장한 후 다음 명령어 실행:
streamlit run crypto_dashboard.py
3. 브라우저에서 확인:
• 실행하면 로컬 서버가 시작되고, 브라우저에서 http://localhost:8501에 접속하여 대시보드를 확인할 수 있습니다.
대시보드 구성
• 타이틀: “Top 10 Cryptocurrencies by 7-Day Growth”
• 설명: 간단한 대시보드 설명 추가.
• 데이터:
• “Fetch Data” 버튼을 클릭하면 데이터를 가져오고, 상위 10개 코인을 표로 표시.
• 출력 방식:
• st.dataframe()을 사용한 표 출력.
• tabulate로 텍스트 표 출력(옵션).
- 소스코드
import requests
import pandas as pd
import streamlit as st
from tabulate import tabulate # 표 형태의 출력 지원
# CoinMarketCap API 설정
API_KEY = 'your_api_key_here' # 여기에 정확한 API 키를 입력하세요
BASE_URL = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
# API 호출 함수
def fetch_coin_data():
params = {
'start': 1, # 시작 순위
'limit': 100, # 시가총액 상위 100개 코인
'convert': 'USD', # USD 기준 데이터
}
headers = {
'Accepts': 'application/json',
'X-CMC_PRO_API_KEY': API_KEY, # API 키를 헤더에 추가
}
# API 요청
response = requests.get(BASE_URL, headers=headers, params=params)
# 상태 코드 처리
if response.status_code == 200:
st.success("Data fetched successfully!")
return response.json()
elif response.status_code == 401:
st.error("Unauthorized: Check your API key.")
elif response.status_code == 429:
st.error("Rate limit exceeded. Try again later.")
else:
st.error(f"Failed to fetch data. Status code: {response.status_code}")
return None
# 데이터 처리 함수
def process_coin_data(data):
coins = []
for coin in data['data']:
name = coin['name']
symbol = coin['symbol']
percent_change_7d = coin['quote']['USD'].get('percent_change_7d', 0) # 7일 상승률
tags = ', '.join(coin.get('tags', [])[:5]) # 상위 5개 태그만 추출
coins.append({
"Name": name,
"Symbol": symbol,
"7-Day Change (%)": percent_change_7d,
"Tags": tags
})
# 데이터프레임 정리
df = pd.DataFrame(coins)
# 7일 상승률 기준으로 내림차순 정렬 후 상위 10개 반환
top_10 = df.sort_values(by='7-Day Change (%)', ascending=False).head(10)
return top_10
# Streamlit 앱
def main():
st.title("Top 10 Cryptocurrencies by 7-Day Growth")
st.write("This dashboard displays the top 10 cryptocurrencies with the highest 7-day growth, along with their tags.")
# Fetch Data 버튼
if st.button("Fetch Data"):
with st.spinner("Fetching data..."):
data = fetch_coin_data()
if data:
top_10_coins = process_coin_data(data)
st.write("### Top 10 Coins")
st.dataframe(top_10_coins) # 데이터프레임 표시
# 옵션: 표 형태로 출력
table_output = tabulate(top_10_coins, headers='keys', tablefmt='grid', showindex=False)
st.code(table_output, language="plaintext")
if __name__ == "__main__":
main()
대시보드 구성
• 타이틀: “Top 10 Cryptocurrencies by 7-Day Growth”
• 설명: 간단한 대시보드 설명 추가.
• 데이터:
• “Fetch Data” 버튼을 클릭하면 데이터를 가져오고, 상위 10개 코인을 표로 표시.
• 출력 방식:
• st.dataframe()을 사용한 표 출력.
• tabulate로 텍스트 표 출력(옵션).
- 실행결과(1/2)
- 실행결과(2/2)
확장 가능성
1. 자동 업데이트:
• st.experimental_rerun()과 함께 특정 주기(예: 10초)마다 데이터를 자동으로 갱신하는 기능 추가 가능.
2. 추가 필터링:
• 태그별 필터링(예: DeFi, NFT 등) 옵션 추가.
3. 차트 추가:
• st.bar_chart()나 st.line_chart()를 사용하여 상승률 변화를 시각화.
이번 시간에는 CoinMarketCap API를 통해 실시간으로 시가총액 상위 100위 코인의 데이터를 가져와, 7일 상승률 상위 10개의 코인과 해당 코인의 주요 태그를 Streamlit 대시보드에서 출력하는 프로그램을 작성해 보았습니다.
Streamlit 라이브러리를 사용하여 유저 친화적인 인터페이스를 제공하며, 버튼 클릭만으로 데이터를 조회하고 분석할 수 있습니다.
이를 통해 투자자나 분석가가 암호화폐 시장 동향을 간편하게 모니터링할 수 있는 실용적인 도구를 제공합니다.