flask로 만든 주가 차트 배달 서버
17099 단어 주가파이썬mplfinanceFlask
소개
주가의 시계열 데이터가 들어있는 csv 파일이 있다면 mplfinance를 사용하면 파이썬이 실행되는 환경에서 주가 차트를 쉽게 표시 할 수 있습니다. 이 주가 차트를 웹 브라우저에서 언제든지 볼 수 있도록 하는 것이 본고의 취지입니다.
사용하는 것은 python, mplfinance, flask에서 이것들을 정리하고 docker-compose로 바삭하게 움직입니다.
실행 환경
디렉토리 구성
working_dir/
Dockerfile
docker-compose.yml
opt/
flask_chart.py
share/
data/
1000/
1001.csv
1002.csv
...
2000/
...
9000/
9001.csv
...
data/디렉토리 안에, 1000/~ 9000/의 서브 디렉토리를 잘라 그 안에, 「증권 코드.csv」라고 하는 이름의 주가 일족 시계열 데이터가 놓여져 있는 것으로 합니다.
주가 일족 시계열 데이터의 csv 파일의 예는 다음과 같습니다.
1301.csv2015/01/05,275,277,274,275,239000000
2015/01/06,274,275,270,272,480000000
2015/01/07,270,273,270,271,217000000
...
2020/11/25,2839,2846,2795,2831,27800000
2020/11/26,2820,2826,2801,2809,8700000
2020/11/27,2807,2825,2803,2819,22000000
Flask의 주가 차트 서버
Flask는 파이썬으로 웹 서버의 동작을 기술 할 수있어 매우 편리합니다. matplotlib로 만든 그래프를 Flask로 전달하는 예가 인터넷에 많이 있지만 matplotlib뿐만 아니라 mplfinance의 plot도 같은 방법으로 할 수 있습니다.
title=flask_chart.pyimport os
import numpy as np
import io
from flask import Flask, send_file, request
from flask_cors import CORS
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import mplfinance as mpf
app = Flask(__name__)
CORS(app)
# http://サーバ名:5000/
@app.route('/')
def root():
return "Chart Server"
# http://サーバ名:5000/candle?code=1001&term=200&volume=True
@app.route("/candle")
def candle():
code = request.args.get('code', default=None, type=int)
term = request.args.get('term', default=200, type=int)
volume = request.args.get('volume', default="True", type=str)
code_dir = int(code/1000)*1000
input_path = "/root/opt/share/data/" + str(code_dir) + "/" + str(code) + ".csv"
df = load_stock_price_csv(input_path, term=term)
image = io.BytesIO()
if len(df)>1:
mpf.plot(df, title=str(code), type='candle',
mav=[5, 25, 75], volume=str2bool(volume))
plt.savefig(image, format='png')
image.seek(0)
return send_file(image, attachment_filename="image.png")
def str2bool(s):
return s.lower() in ["True", "true", "TRUE", "1"]
def load_stock_price_csv(path, term=0):
if os.path.exists(path):
df = pd.read_csv(path, header=None, names=['Date','Open','High','Low','Close','Volume'], encoding='UTF-8')
else:
df = pd.DataFrame([[0, 0, 0, 0, 0, 0]])
df.columns = ['Date','Open','High','Low','Close','Volume']
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index("Date")
if term>0:
df = df.tail(term)
return df
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
http://서버명:5000/
에 의해 root()가 달립니다. 여기에서는 클라이언트가 "Chart Server"라는 문자열을 표시하게 합니다.
http://서버명:5000/candle?code=6897&term=200&volume=True
에 의해 candle()가 달립니다.
candle()에서는 url 매개변수를 추출하고, 이에 따라 mpl.plot()로 차트를 표시하고, 그것을 (메모리상의) image에 png로 저장해, 클라이언트에 돌려줍니다.
docker-compose로 구현
파이썬의 실행 이미지를 만들고 거기에서 flask 서버를 실행하고 있습니다.
title=DockerfileFROM python:3
USER root
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get install -y vim
RUN pip install --upgrade pip && \
pip install --upgrade setuptools && \
pip install --upgrade Flask flask_cors mplfinance
CMD ["python", "/root/opt/flask_chart.py"]
주가 데이터가 있는 위치를 opt/share에 마운트합니다.
title=docker-compose.ymlversion: '3'
services:
chart:
restart: always
build: .
container_name: 'chart'
working_dir: '/root/opt'
tty: true
ports:
- 5000:5000
volumes:
- ./opt:/root/opt
- /home/samba/share/muzinzo:/root/opt/share
주가 서버 시작
$ docker-compose up -d --build
필요에 따라 서버의 5000번 포트를 열고, 웹 브라우저에서,
http://서버명:5000/candle?code=6897&term=120&volume=True
을 두드리면 주식 차트를 볼 수 있습니다.
매우 쉽게 주가 차트 배달 서버를 구축 할 수있었습니다. 서버에서 스크리닝 한 결과를 표시하거나 페이지를 데코하거나 꿈은 퍼집니다.
참고로 주가 데이터를 준비하거나 차트를 그리거나 졸문
디렉토리 구성
working_dir/
Dockerfile
docker-compose.yml
opt/
flask_chart.py
share/
data/
1000/
1001.csv
1002.csv
...
2000/
...
9000/
9001.csv
...
data/디렉토리 안에, 1000/~ 9000/의 서브 디렉토리를 잘라 그 안에, 「증권 코드.csv」라고 하는 이름의 주가 일족 시계열 데이터가 놓여져 있는 것으로 합니다.
주가 일족 시계열 데이터의 csv 파일의 예는 다음과 같습니다.
1301.csv
2015/01/05,275,277,274,275,239000000
2015/01/06,274,275,270,272,480000000
2015/01/07,270,273,270,271,217000000
...
2020/11/25,2839,2846,2795,2831,27800000
2020/11/26,2820,2826,2801,2809,8700000
2020/11/27,2807,2825,2803,2819,22000000
Flask의 주가 차트 서버
Flask는 파이썬으로 웹 서버의 동작을 기술 할 수있어 매우 편리합니다. matplotlib로 만든 그래프를 Flask로 전달하는 예가 인터넷에 많이 있지만 matplotlib뿐만 아니라 mplfinance의 plot도 같은 방법으로 할 수 있습니다.
title=flask_chart.pyimport os
import numpy as np
import io
from flask import Flask, send_file, request
from flask_cors import CORS
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import mplfinance as mpf
app = Flask(__name__)
CORS(app)
# http://サーバ名:5000/
@app.route('/')
def root():
return "Chart Server"
# http://サーバ名:5000/candle?code=1001&term=200&volume=True
@app.route("/candle")
def candle():
code = request.args.get('code', default=None, type=int)
term = request.args.get('term', default=200, type=int)
volume = request.args.get('volume', default="True", type=str)
code_dir = int(code/1000)*1000
input_path = "/root/opt/share/data/" + str(code_dir) + "/" + str(code) + ".csv"
df = load_stock_price_csv(input_path, term=term)
image = io.BytesIO()
if len(df)>1:
mpf.plot(df, title=str(code), type='candle',
mav=[5, 25, 75], volume=str2bool(volume))
plt.savefig(image, format='png')
image.seek(0)
return send_file(image, attachment_filename="image.png")
def str2bool(s):
return s.lower() in ["True", "true", "TRUE", "1"]
def load_stock_price_csv(path, term=0):
if os.path.exists(path):
df = pd.read_csv(path, header=None, names=['Date','Open','High','Low','Close','Volume'], encoding='UTF-8')
else:
df = pd.DataFrame([[0, 0, 0, 0, 0, 0]])
df.columns = ['Date','Open','High','Low','Close','Volume']
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index("Date")
if term>0:
df = df.tail(term)
return df
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
http://서버명:5000/
에 의해 root()가 달립니다. 여기에서는 클라이언트가 "Chart Server"라는 문자열을 표시하게 합니다.
http://서버명:5000/candle?code=6897&term=200&volume=True
에 의해 candle()가 달립니다.
candle()에서는 url 매개변수를 추출하고, 이에 따라 mpl.plot()로 차트를 표시하고, 그것을 (메모리상의) image에 png로 저장해, 클라이언트에 돌려줍니다.
docker-compose로 구현
파이썬의 실행 이미지를 만들고 거기에서 flask 서버를 실행하고 있습니다.
title=DockerfileFROM python:3
USER root
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get install -y vim
RUN pip install --upgrade pip && \
pip install --upgrade setuptools && \
pip install --upgrade Flask flask_cors mplfinance
CMD ["python", "/root/opt/flask_chart.py"]
주가 데이터가 있는 위치를 opt/share에 마운트합니다.
title=docker-compose.ymlversion: '3'
services:
chart:
restart: always
build: .
container_name: 'chart'
working_dir: '/root/opt'
tty: true
ports:
- 5000:5000
volumes:
- ./opt:/root/opt
- /home/samba/share/muzinzo:/root/opt/share
주가 서버 시작
$ docker-compose up -d --build
필요에 따라 서버의 5000번 포트를 열고, 웹 브라우저에서,
http://서버명:5000/candle?code=6897&term=120&volume=True
을 두드리면 주식 차트를 볼 수 있습니다.
매우 쉽게 주가 차트 배달 서버를 구축 할 수있었습니다. 서버에서 스크리닝 한 결과를 표시하거나 페이지를 데코하거나 꿈은 퍼집니다.
참고로 주가 데이터를 준비하거나 차트를 그리거나 졸문
import os
import numpy as np
import io
from flask import Flask, send_file, request
from flask_cors import CORS
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import mplfinance as mpf
app = Flask(__name__)
CORS(app)
# http://サーバ名:5000/
@app.route('/')
def root():
return "Chart Server"
# http://サーバ名:5000/candle?code=1001&term=200&volume=True
@app.route("/candle")
def candle():
code = request.args.get('code', default=None, type=int)
term = request.args.get('term', default=200, type=int)
volume = request.args.get('volume', default="True", type=str)
code_dir = int(code/1000)*1000
input_path = "/root/opt/share/data/" + str(code_dir) + "/" + str(code) + ".csv"
df = load_stock_price_csv(input_path, term=term)
image = io.BytesIO()
if len(df)>1:
mpf.plot(df, title=str(code), type='candle',
mav=[5, 25, 75], volume=str2bool(volume))
plt.savefig(image, format='png')
image.seek(0)
return send_file(image, attachment_filename="image.png")
def str2bool(s):
return s.lower() in ["True", "true", "TRUE", "1"]
def load_stock_price_csv(path, term=0):
if os.path.exists(path):
df = pd.read_csv(path, header=None, names=['Date','Open','High','Low','Close','Volume'], encoding='UTF-8')
else:
df = pd.DataFrame([[0, 0, 0, 0, 0, 0]])
df.columns = ['Date','Open','High','Low','Close','Volume']
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index("Date")
if term>0:
df = df.tail(term)
return df
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
파이썬의 실행 이미지를 만들고 거기에서 flask 서버를 실행하고 있습니다.
title=Dockerfile
FROM python:3
USER root
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get install -y vim
RUN pip install --upgrade pip && \
pip install --upgrade setuptools && \
pip install --upgrade Flask flask_cors mplfinance
CMD ["python", "/root/opt/flask_chart.py"]
주가 데이터가 있는 위치를 opt/share에 마운트합니다.
title=docker-compose.yml
version: '3'
services:
chart:
restart: always
build: .
container_name: 'chart'
working_dir: '/root/opt'
tty: true
ports:
- 5000:5000
volumes:
- ./opt:/root/opt
- /home/samba/share/muzinzo:/root/opt/share
주가 서버 시작
$ docker-compose up -d --build
필요에 따라 서버의 5000번 포트를 열고, 웹 브라우저에서,
http://서버명:5000/candle?code=6897&term=120&volume=True
을 두드리면 주식 차트를 볼 수 있습니다.
매우 쉽게 주가 차트 배달 서버를 구축 할 수있었습니다. 서버에서 스크리닝 한 결과를 표시하거나 페이지를 데코하거나 꿈은 퍼집니다.
참고로 주가 데이터를 준비하거나 차트를 그리거나 졸문
도움이 될 수 있습니다.
2020/02/11 추가
그 후 조금 웹 앱처럼 보았습니다. 그렇다고 해도, 단순한 구현이므로, 굳이 추기할 정도의 것은 아닙니다. 소스는 GutHub에 두고 있습니다.
2021/2/16 추가
작성한 사이트를 Frozen-Flask로 정적 html 사이트로 변환하고 GitHub에 넣어 데모 사이트 을 만들어 보았습니다. 반응형 디자인이 아니기 때문에 PC 전용입니다. .
이상
Reference
이 문제에 관하여(flask로 만든 주가 차트 배달 서버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SaturdayInThePark/items/0d268361fefaa120073c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)