250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- GenericGBQException
- chatGPT
- grad-cam
- airflow subdag
- BigQuery
- XAI
- top_k
- TensorFlow
- requests
- session 유지
- 상관관계
- 공분산
- API Gateway
- Airflow
- Retry
- Counterfactual Explanations
- login crawling
- youtube data
- flask
- gather_nd
- 유튜브 API
- GCP
- hadoop
- API
- subdag
- UDF
- correlation
- spark udf
- integrated gradient
- tensorflow text
Archives
- Today
- Total
데이터과학 삼학년
Visualization tool - bokeh (feat.falsk) 본문
반응형
python을 이용하여 시각화 할 수 있는 tool은 너무 많다.
matplotlib이나 dash, bokeh 등....
이 중 bokeh에 대해 알아보자
bokeh는 시각화 툴로 일본에서 만들어졌다고 알고 있다.
bokeh에 dashboard 기능이나 구현면에서 조금은 자유로운 점도 있는 듯하다.
코드를 통해 먼저 살펴보자.
import numpy as np
from bokeh.plotting import figure
# Make Bokeh Push push output to Jupyter Notebook.
from bokeh.io import show, output_notebook
from bokeh.resources import INLINE
output_notebook(resources=INLINE) ## jupyter 환경에서 보기 위해서 입력
# Create some data.
x = np.linspace(0,2*np.pi,20)
y = np.sin(x)
p = figure(title="Simple Line Plot in Bokeh", x_axis_label='x', y_axis_label='y')
# Add a line renderer with legend and line thickness
p.line(x, y, legend="Value", line_width=3)
# Show the results
show(p)
저장이나 확대 등 용이하다.
아래는
flask를 이용해 web으로 인자를 받아 생성한 bokeh 그래프이다.
from flask import Flask, render_template, request, redirect,url_for
import pandas as pd
from bokeh.embed import components
from bokeh.plotting import figure
from bokeh.resources import INLINE
from bokeh.util.string import encode_utf8
from bokeh.models import ColumnDataSource
from bokeh.layouts import row, column, gridplot
df = pd.read_csv('data/data.csv')
df = df.set_index('regdatetime')
df.index = pd.to_datetime(df.index)
df.index.name = 'Datetime'
df.sort_index(inplace=True)
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'Hello guys'
@app.route('/')
@app.route('/input')
def input(condition=None,feature=None):
return render_template('input.html',condition=condition, feature=feature)
@app.route('/bokeh',methods=['POST'])
def bokeh(condition=None,feature=None):
if request.method == 'POST':
condition = request.form['condition']
feature = request.form['feature']
df['resid'] = df[(df.condition==int(condition)) & (df.part=='resid')][feature]
df['trend'] = df[(df.condition==int(condition)) & (df.part=='trend')][feature]
df['seasonal'] = df[(df.condition==int(condition)) & (df.part=='seasonal')][feature]
source = ColumnDataSource(df)
fig_lst = []
for i in ['trend','seasonal','resid'] :
fig = figure(x_axis_type="datetime")
fig.line('Datetime',i, source=source)
fig.title.text = '{}'.format(i.upper())
fig.xaxis.axis_label = 'TimeStamp'
fig.yaxis.axis_label = 'Values'
fig_lst.append(fig)
print(fig_lst)
grid = gridplot(fig_lst, ncols=1, plot_width=1200, plot_height=250)
fig = grid
# grab the static resources
js_resources = INLINE.render_js()
css_resources = INLINE.render_css()
# render template
script, div = components(fig)
html = render_template(
'index.html',
plot_script=script,
plot_div=div,
js_resources=js_resources,
css_resources=css_resources,
)
return encode_utf8(html)
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True,port=5000)
여러개의 bokeh plot을 만들기 위해서는 gridplot을 이용하여 묶어서 표현해주면된다.
아래는 timeseries data를 표현해 보았다.
bokeh에 대해 더 자세한 사항은...
참고고고고
728x90
반응형
LIST
'Web' 카테고리의 다른 글
Pandas dataframe to ajax datatables (0) | 2020.01.21 |
---|---|
Visualize figure using html form data on same web page (2) | 2020.01.16 |
HTTP 응답코드와 메소드 정리 (0) | 2020.01.15 |
pass data(arguments) from html to app.py (feat.flask) (0) | 2020.01.14 |
flask 구구단 만들기 (0) | 2020.01.13 |
Comments