Beispiel #1
0
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()
Beispiel #2
0
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(),
    )
Beispiel #3
0
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())
Beispiel #4
0
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()
Beispiel #5
0
    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
Beispiel #6
0
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
        })
Beispiel #7
0
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
        })