728x90
https://stickode.tistory.com/1051
https://stickode.tistory.com/1062
저번 시간에 이어서, 오늘은 DB에 저장해둔 데이터를 시각화해보겠습니다. 코드에서 user와 password는 본인의 DB 설정에 맞게 변경하셔야합니다.
MariaDB에는 다음과 같은 테이블을 추가하시면 됩니다.
CREATE TABLE trades (
type VARCHAR(50),
code VARCHAR(20),
timestamp BIGINT,
trade_date DATE,
trade_time TIME,
trade_timestamp BIGINT,
trade_price DECIMAL(20, 4),
trade_volume DECIMAL(20, 8),
ask_bid VARCHAR(10),
prev_closing_price DECIMAL(20, 8),
`change` VARCHAR(10),
change_price DECIMAL(20, 4),
sequential_id BIGINT,
stream_type VARCHAR(20)
);
main.py
# 아래 명령어로 패키지 다운로드 받은 후 실행해야합니다.
# pip install fastapi uvicorn pymysql matplotlib pandas
# uvicorn main:app --reload
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import pandas as pd
import pymysql
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from io import BytesIO
import base64
app = FastAPI()
@app.get("/btc-price-plot", response_class=HTMLResponse)
async def read_item():
# 데이터베이스 연결
db = pymysql.connect(host='localhost', user='root', password='root', db='stickode_231204_upbit', charset='utf8mb4')
cursor = db.cursor()
query = "SELECT trade_date, trade_price FROM trades WHERE code = 'KRW-BTC' ORDER BY trade_date"
df = pd.read_sql(query, db)
# 그래프 생성
plt.figure(figsize=(10, 6))
ax = plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))
ax.xaxis.set_major_locator(mdates.AutoDateLocator())
plt.xticks(rotation=45)
plt.plot(df['trade_date'], df['trade_price'])
plt.title('Trade Price Over Time')
plt.xlabel('Trade Date')
plt.ylabel('Trade Price')
plt.tight_layout()
# 그래프를 HTML로 변환
buf = BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
img_base64 = base64.b64encode(buf.getvalue()).decode('utf-8')
db.close()
return f'<img src="data:image/png;base64,{img_base64}"/>'
실행 영상
'Python' 카테고리의 다른 글
[Python]파이썬에서 클래스 만들기와 상속하기 (0) | 2024.03.29 |
---|---|
[Python] 페이지네이션으로 업비트에서 비트코인의 모든 1분봉 가져오기 (0) | 2024.03.13 |
[Python]파이썬의 가변 인자: *args와 **kwargs 이해하기 (0) | 2024.03.02 |
[Python] 수집한 데이터 시각화하기 (0) | 2024.02.23 |
[Python] FastAPI에서 CORS 정책 적용하기 (0) | 2024.02.15 |