class PlotBarWithLine: def __init__(self): self.data = {{'label': []}, } self.titles = '' self.indexes = [] self.bar = Bar() self.line = Line() self.overlap = Overlap() self.script_list = self.overlap.get_js_dependencies() def plot_bar_line(self, dat, tit, ind): self.data = dat self.titles = tit self.indexes = ind self.bar = Bar(self.titles) for label in self.data.keys(): label_bar = '{}_B'.format(label) label_line = '{}_L'.format(label) self.bar.add(label_bar, self.indexes, self.data[label], is_label_show=True) self.line.add(label_line, self.indexes, self.data[label], is_label_show=True, mark_point=['max', 'min']) self.overlap.add(self.bar) self.overlap.add(self.line) return self.overlap.render_embed()
def strategy(): form = request.form getStock = form.get('stock') stock = getStock if getStock else "usTSLA" getCircle = form.get('circle') circle = getCircle if getCircle else "120" buyStrategy = BuyTrendStrategy(stock, int(circle), 1000000) closeDayList, closeValueList = buyStrategy.get_close_line() buyDayList, buyValueList = buyStrategy.get_buy_point() closeLine = Line("趋势购买策略", width="400", height="300") closeLine.add(stock, closeDayList, closeValueList) buyES = EffectScatter("购买点", width="400", height="300") buyES.add("购买点", buyDayList, buyValueList, symbol_size=8, effect_scale=3, effect_period=3, symbol="triangle") overlap = Overlap() overlap.add(closeLine) overlap.add(buyES) return render_template( "strategy.html", strategyEchart=overlap.render_embed(), host=REMOTE_HOST, script_list=buyES.get_js_dependencies(), )
def the_data(fti): his_filters = {TrackIndex.fund_trackindexcode == fti} histories = TrackIndex.query.filter(*his_filters).order_by( TrackIndex.date).all() dates = [] closes = [] pe_ttms = [] for history in histories: if history.pe_ttm != 0: dates.append(history.date[2:4] + '/' + history.date[5:7] + '/' + history.date[8:10]) closes.append('%.2f' % history.close) pe_ttms.append('%.2f' % history.pe_ttm) else: dates.append(0) closes.append(0) pe_ttms.append(0) # 柱状图 bar_close = Bar() bar_close.add('POINT', dates, closes, mark_point=[{ "coord": [dates[-1], closes[-1]], "name": dates[-1] }], mark_point_textcolor='black', is_more_utils=True) bar_pe = Bar() bar_pe.add('PE', dates, pe_ttms, mark_point=[{ "coord": [dates[-1], pe_ttms[-1]], "name": dates[-1] }], mark_point_textcolor='black', is_more_utils=True) overlap = Overlap(width=1150, height=500) overlap.add(bar_pe) overlap.add(bar_close, yaxis_index=1, is_add_yaxis=True) return render_template('the_data.html', fti=fti, myechart=overlap.render_embed(), host=REMOTE_HOST, script_list=overlap.get_js_dependencies())
def k(): import talib import numpy as np import tushare as ts from pyecharts import Grid, Bar, Line, Kline, Overlap data = ts.get_k_data('399300', index=True, start='2017-01-01', end='2017-06-31') ochl = data[['open', 'close', 'high', 'low']] ochl_tolist = [ochl.ix[i].tolist() for i in range(len(ochl))] sma_10 = talib.SMA(np.array(data['close']), 10) sma_30 = talib.SMA(np.array(data['close']), 30) kline = Kline() kline.add("日K", data['date'], ochl_tolist, is_datazoom_show=True) line = Line() line.add('10 日均线', data['date'], sma_10, is_fill=False, line_opacity=0.8, is_smooth=True) line.add('30 日均线', data['date'], sma_30, is_fill=False, line_opacity=0.8, is_smooth=True) bar = Bar() bar.add("成交量", data['date'], data['volume'], is_stack=True) overlap = Overlap() overlap.add(kline) overlap.add(line) #overlap.add(bar) return overlap.render_embed()
def _get_normal_dist(self, data, mean=None, std=None, lsl=None, usl=None): CPK, CMK = spc.get_cpk_cmk(data, lsl, usl) STEP = 0.25 * std length = len(data) norm_data = norm(mean, std) # x_bar = np.arange(int(min), int(max), 1) t = data.get_values() x_bar = x_line = np.around(np.arange(mean - std * 3.0, mean + std * 4.0, STEP), decimals=3) y_line = np.around(norm_data.pdf(x_line), decimals=3) # x_bar = np.arange(mean - std * 3.0, mean + std * 4.0, STEP) _y_bar, bin_edges = np.histogram(t, range=(mean - std * 3.0, mean + std * 4.0), bins=len(x_bar)) vfunc = np.vectorize(lambda x: x / length, otypes=[float]) y_bar = np.around(vfunc(_y_bar), decimals=3) bar = Bar(title=u"Normal Distribution({0})".format(self.spc_target), title_pos="50%", width=960, height=1440) bar.add(u'{0}'.format(self.spc_target), bin_edges[1:], y_bar, legend_orient="vertical", legend_top="45%", legend_pos='50%', xaxis_name=u'{0}'.format(self.spc_target), yaxis_name_gap=100, label_pos='inside', is_label_show=True, label_color=['#a6c84c', '#ffa022', '#46bee9'], # bar_category_gap=0, ### 直方图 yaxis_name=u'概率(Probability)') line = Line(width=960, height=1440) line.add(u'{0}'.format(self.spc_target).format(self.spc_target), x_line, y_line, xaxis_name=u'{0}'.format(self.spc_target), yaxis_name=u'概率(Probability)', mark_line_valuedim=['x', 'x'], mark_line=['min', 'max'], line_color='rgba(0 ,255 ,127,0.5)', is_legend_show=False, is_smooth=True, line_width=2, is_label_show=False, is_datazoom_show=False, datazoom_type='both', label_text_size=16, tooltip_tragger='axis', is_fill=False) # grid = Grid(width=1920, height=1440, ) # grid.add(bar, grid_bottom="60%", grid_left="60%") # grid.add(line, grid_bottom="60%", grid_right="60%") overlap = Overlap(width=1080, height=1024, page_title=u"Normal Distribution({0})".format(self.spc_target)) overlap.add(line) overlap.add(bar) pyecharts.configure(force_js_embed=True) return overlap.render_embed(), CMK, CPK
def index(request): over_list = [] style_coding_list = [] err = '' batchs = '' style = '' shops_list = '' shops = '' batchs_msg_dic = '' if request.method == 'POST': batchs = request.POST.get('batch') batchs_msg = BatchComparison.objects.filter(batch=batchs).all() batchs_msg_dic = {} for batch in batchs_msg: batchs_msg_dic['model'] = batch.model batchs_msg_dic['batch'] = batch.batch batchs_msg_dic['remark'] = batch.remark batchs_msg_dic['type'] = batch.type batchs_msg_dic['stylist'] = batch.stylist batchs_msg_dic['shooting_date'] = str(batch.shooting_date) batchs_msg_dic['location'] = batch.location # 判断款式号是否有误 if len(batchs) > 0: # 查询款式 batch_data = BatchComparison.objects.filter(batch=batchs).all() style_coding_data = SpuidComparison.objects.filter( batch=batchs).values('style_coding').all() # 判断是否存在对应款式 if len(style_coding_data) > 0: # 该款式的所有查询spuid的 if request.method == 'POST': style = request.POST.get('style_coding') spuid_data = SpuidComparison.objects.filter( style_coding=style).all() else: spuid_data = SpuidComparison.objects.filter( style_coding=style_coding_data.first()).all() spuid_list = [] for spuids in spuid_data: spuid_dic = {} spuid_dic['spuid'] = spuids.spuid spuid_dic['brand'] = spuids.brand spuid_list.append(spuid_dic) # 款式列表 style_coding_data_2 = SpuidComparison.objects.filter( batch=batchs).values('style_coding').distinct().all() style_coding_list = [ i['style_coding'] for i in style_coding_data_2 ] # 店铺列表 shops_data = SpuidComparison.objects.filter( batch=batchs, style_coding=style).all() shops_list = [] for i in shops_data: tmp = {} tmp['brand'] = i.brand tmp['spuid'] = i.spuid shops_list.append(tmp) shops = request.POST.get('shopname') # 判断该款式是否存在spuid号 if len(spuid_list) > 0: # 查询data并生成图表 over_list = [] if shops == '全部': for shop in shops_list: data = StoreDailyData.objects.filter( spuid=shop['spuid'], brand=shop['brand']).values( 'uv', 'title', 'status', 'spuid', 'conversion_rate_of_order_payment', 'conversion_rate_of_payment', 'number_of_additional_purchases', 'collection_number', 'number_of_order_items', 'date').all() x_list = [] y_list_1 = [] y_list_1_2 = [] y_list_1_3 = [] for i in data: x_list.append(i['date']) y_list_1.append( '%.2f' % (i['conversion_rate_of_payment'] * 100)) if i['uv'] == 0: tmp = '0.00' else: tmp = '%.2f' % (i['collection_number'] / i['uv'] * 100) tmp_2 = '%.2f' % ( i['number_of_additional_purchases'] / i['uv'] * 100) y_list_1_2.append(tmp) y_list_1_3.append(tmp_2) overlap = Overlap() line = Line() line.add('转化率', x_list, y_list_1, yaxis_formatter='%', is_smooth=True) line.add('收藏率', x_list, y_list_1_2, yaxis_formatter='%', is_smooth=True) line.add('加购率', x_list, y_list_1_3, yaxis_formatter='%', is_smooth=True) line_2 = Line(shop['brand'] + '-' + shop['spuid']) y_list_2 = [i['uv'] for i in data] y_list_2_2 = [i['number_of_order_items'] for i in data] line_2.add('UV', x_list, y_list_2, is_smooth=True) line_2.add('成交量', x_list, y_list_2_2, is_smooth=True) overlap.add(line_2) overlap.add(line, is_add_yaxis=True, yaxis_index=1) ds = overlap.render_embed() over_list.append(ds) else: spuid_all = SpuidComparison.objects.filter( batch=batchs, style_coding=style, brand=shops).all() spuid_list = [i.spuid for i in spuid_all] for spuid_ in spuid_list: data = StoreDailyData.objects.filter( spuid=spuid_, ).values( 'uv', 'conversion_rate_of_order_payment', 'conversion_rate_of_payment', 'number_of_additional_purchases', 'collection_number', 'number_of_order_items', 'date').all() x_list = [] y_list_1 = [] y_list_1_2 = [] y_list_1_3 = [] for i in data: x_list.append(i['date']) y_list_1.append( '%.2f' % (i['conversion_rate_of_payment'] * 100)) if i['uv'] == 0: tmp = '0.00' else: tmp = '%.2f' % (i['collection_number'] / i['uv'] * 100) tmp_2 = '%.2f' % ( i['number_of_additional_purchases'] / i['uv'] * 100) y_list_1_2.append(tmp) y_list_1_3.append(tmp_2) overlap = Overlap() line = Line() line.add('转化率', x_list, y_list_1, yaxis_formatter='%', is_smooth=True) line.add('收藏率', x_list, y_list_1_2, yaxis_formatter='%', is_smooth=True) line.add('加购率', x_list, y_list_1_3, yaxis_formatter='%', is_smooth=True) line_2 = Line(shops + '-' + spuid_) y_list_2 = [i['uv'] for i in data] y_list_2_2 = [i['number_of_order_items'] for i in data] line_2.add('UV', x_list, y_list_2, is_smooth=True) line_2.add('成交量', x_list, y_list_2_2, is_smooth=True) overlap.add(line_2) overlap.add(line, is_add_yaxis=True, yaxis_index=1) ds = overlap.render_embed() over_list.append(ds) shops_list.append({'brand': '全部'}) else: err = '该款式没有对应的spuid' else: err = '该批次没有对应的款式' # else: # err = '批次号有误' batch_form = Batch() return render( request, 'index.html', { 'style_coding': style_coding_list, "line_list": over_list, 'err': err, 'batch_form': batch_form, 'batch': batchs, 'style': style, 'style_coding_list': style_coding_list, 'shops_list': shops_list, 'shops': shops, 'batchs_msg_dic': batchs_msg_dic })
def index(request): db = Database_operat() over_list = [] style_coding_list = [] err = '' batch = '' if request.method == 'POST': batch = request.POST.get('batch') # 判断款式号是否有误 if len(batch) > 0: # 查询款式 style_coding_sql = "SELECT DISTINCT style_coding FROM spuid_comparison WHERE batch='%s'; " % batch style_coding_list = db.search_all(style_coding_sql) # 判断是否存在对应款式 if len(style_coding_list) > 0: # 该款式的所有查询spuid的 if request.method == 'POST': style = request.POST.get('style_coding') spuid_sql = "SELECT spuid,brand FROM spuid_comparison WHERE style_coding='%s';" % style else: spuid_sql = "SELECT spuid,brand FROM spuid_comparison WHERE style_coding='%s';" % style_coding_list[ 0] spuid_list = db.search_all(spuid_sql) # print(spuid_list) # 判断该款式是否存在spuid号 if len(spuid_list) > 0: # 查询data并生成图表 over_list = [] for spuid in spuid_list: data_sql = "SELECT UV,conversion_rate_of_payment,number_of_additional_purchases,collection_number,number_of_order_items,date FROM store_daily_data WHERE spuid='%s'" % spuid data = db.search_all(data_sql) print(data) x_list = [i for i in data] y_list_1 = ['%.2f' % (i[2] * 100) for i in data] y_list_1_2 = ['%.2f' % (i[4] / i[1] * 100) for i in data] y_list_1_3 = ['%.2f' % (i[3] / i[1] * 100) for i in data] overlap = Overlap() line = Line(spuid[1] + '-' + spuid[0]) line.add('转化率', x_list, y_list_1, yaxis_formatter='%', is_smooth=True) line.add('收藏率', x_list, y_list_1_2, yaxis_formatter='%', is_smooth=True) line.add('加购率', x_list, y_list_1_3, yaxis_formatter='%', is_smooth=True) line_2 = Line(spuid[1] + '-' + spuid[0]) y_list_2 = [i[1] for i in data] y_list_2_2 = [i[5] for i in data] line_2.add('UV', x_list, y_list_2, is_smooth=True) line_2.add('成交量', x_list, y_list_2_2, is_smooth=True) overlap.add(line_2) overlap.add(line, is_add_yaxis=True, yaxis_index=1) ds = overlap.render_embed() over_list.append(ds) else: err = '该款式没有对应的spuid' else: err = '该批次没有对应的款式' # else: # err = '批次号有误' db.db.close() batch_form = Batch() return render( request, 'index.html', { 'style_coding': style_coding_list, "line_list": over_list, 'err': err, 'batch_form': batch_form, 'batch': batch })