def search():
    page = Pie()
    bar = get_bar()
    page.add(bar)
    keyword = request.args.get('keyword').replace(' ', '')  # 获得前端传回的keyword
    print(keyword)
    if ':' in keyword:  # 判断是否是高级搜索
        key = keyword.split(':')[0]  # 获取传回的高级搜索关键字,如"诗人:李白",此时获取‘诗人’
        value = keyword.split(':')[1]  # 获取‘李白’
        if key == '诗人' and value:  # 判断高级搜索为‘诗人’,并且搜索内容不为空
            poet = Poet.query.filter_by(
                name=value).first()  # 在数据库中查询姓名为”李白“的诗人数据
            if poet:  # 如果查询到
                context = {
                    'poet': poet,  # 诗人字段信息
                    'poem': poet.poems  # 诗人的是诗的字段信息
                }
                return render_template('search.html',
                                       **context,
                                       chart=page.render_embed())
            else:  # 如果没有查询到
                context = {
                    'message': '没有找到相关内容'  # 返回信息
                }
                return render_template('search.html', **context)  # 渲染页面
        elif key == '诗句' and value:  # 判断高级搜索为‘诗句’,并且搜索内容不为空 如”诗句:清明“
            poem = Poem.query.filter(
                Poem.content.contains(value)).all()  # 获取全部诗句内容中包含”清明“诗句
            if poem:  # 如果查询到
                context = {
                    'poem': poem  # 诗的字段信息
                }
                return render_template(
                    'search.html',
                    **context,
                    chart=page.render_embed(),
                    host='/static/js',
                    script_list=page.get_js_dependencies())  # 渲染页面
            else:  # 如果没有查询到
                context = {'message': '没有找到相关内容'}
                return render_template('search.html', **context)  # 渲染页面
    else:  # 普通搜索,直接搜索诗的名字 如:‘江南’
        poem = Poem.query.filter_by(title=keyword).all()  # 获取所有诗的名字为‘江南’的数据
        if poem:  # 如果查询的到
            context = {
                'poem': poem  # 所有诗的名字为‘江南’字段信息
            }
            return render_template(
                'search.html',
                **context,
                chart=page.render_embed(),
                host='/static/js',
                script_list=page.get_js_dependencies())  # 渲染页面
        else:  # 如果没有查询的到
            context = {'message': '没有找到相关内容'}
            return render_template('search.html', **context)  #渲染页面
Beispiel #2
0
    def pie_two_html(self, chart_id, title, sub_title1, sub_title2, key1, key2, val1, val2):
        # 实例化饼状图
        pie = Pie(init_opts=opts.InitOpts(width="100%", height="300px"))
        pie.set_global_opts(
            title_opts=opts.TitleOpts(
                title="{}-{}".format(self.dt, title),
                title_textstyle_opts=opts.TextStyleOpts(color="white", font_size=14),
                pos_left="center"
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
        pie.chart_id = chart_id
        # print("key1: %s" % key1)
        # print("val1: %s" % val1)
        pie.add(
            sub_title1,
            [list(z1) for z1 in zip(key1, val1)],
            center=[300, 160],
            radius=[30, 75],
        )
        pie.add(
            sub_title2,
            [list(z2) for z2 in zip(key2, val2)],
            center=[1100, 160],
            radius=[30, 75],
        )

        return pie.render_embed()
Beispiel #3
0
def MutiplePieCharts(datas):
    height_i = '450'
    if len(datas) > 3:
        height_i = height_i + (350 * (len(datas) // 3))
    height = str(height_i) + 'px'
    pie = Pie(init_opts=opts.InitOpts(width="100%", height=height))
    left_i = 1
    right_i = 1
    for data in datas:
        right = str(300 * right_i) + 'px'
        if left_i == 1:
            left = '20%'
            left_i = 2
        elif left_i == 2:
            left = '50%'
            left_i = 3
        else:
            left = '80%'
            right_i += 1
            left_i = 1
        pie.add(
            data[0],
            data[1],
            center=[left, right],
            radius=120,
        )
    pie.set_global_opts(title_opts=opts.TitleOpts(title="磁盘使用率"), )
    pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"), )
    return pie.render_embed()
Beispiel #4
0
def data_visualized(user_id):
    project = Project.query.filter_by(user_id=user_id).first()
    duration = (project.expected_end_date - project.start_date).days
    tasks = Task.query.filter_by(project_id=project.project_id).all()
    task_name = []
    task_duration = []
    for task in tasks:
        task_name.append("task " + str(task.task_id))
        # start_date = datetime.datetime(task.start_date)
        # end_date = datetime.datetime(task.end_date)
        interval = (task.end_date - task.start_date).days
        duration -= interval
        task_duration.append(interval)
    task_name.append('Unused time')
    task_duration.append(duration)
    time_usage_chart = Pie({
        'width': '400px',
        'height': '400px',
        'chart_id': project.project_name + '_usage_chart'
    })
    # time_usage_chart.add_xaxis(task_name)
    # time_usage_chart.add_yaxis('duration', task_duration)
    time_usage_chart.add(
        project.project_name,
        [list(z) for z in zip(task_name, task_duration)],
        radius=["30%", "55%"],
    )
    return render_template('data_visualized.html',
                           time_usage=time_usage_chart.render_embed())
Beispiel #5
0
def generate_pie_html(dict_rows, key, value):
    data = []
    for row in dict_rows:
        data.append([row[key], round(row[value], 2)])

    pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.SHINE))
    pie.add("", data)
    # pie.set_global_opts(title_opts=opts.TitleOpts(title="我的摊大饼策略分布"))
    pie.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
    pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
    pie_html = pie.render_embed('template.html', env)
    return pie_html
Beispiel #6
0
def sentiment_pie(comments_data):

    postive_count = 0
    negative_count = 0
    for item in comments_data:
        if item.sentiment_score > 0.5:
            postive_count += 1
        else:
            negative_count += 1

    pie = Pie()
    pie.add("", [["positve", postive_count], ["negative", negative_count]])
    return pie.render_embed()
Beispiel #7
0
def product_chart():
    view_num = []
    for p in Product.objects.order_by('-view_num')[:30]:
        view_num.append([p.title[:20], p.view_num])

    view_num_pie = Pie(init_opts=opts.InitOpts(js_host='../static/js/', width='1100px')
                       ).add('', view_num).set_global_opts(
        title_opts=opts.TitleOpts(title="查看数"),
        legend_opts=opts.LegendOpts(
            orient="vertical", pos_top="15%", pos_left="100px", type_='scroll'
        ),
    )
    return view_num_pie.render_embed()
Beispiel #8
0
def category_chart():
    category_num = []
    for c in Category.objects.all():
        category_num.append([c.name, c.product_number])

    category_num_pie = Pie(init_opts=opts.InitOpts(js_host='../static/js/', width='1100px')
                           ).add('', category_num).set_global_opts(
        title_opts=opts.TitleOpts(title="类别商品数量"),
        legend_opts=opts.LegendOpts(
            orient="vertical", pos_top="15%", pos_left="100px", type_='scroll'
        ),
    )
    return category_num_pie.render_embed()
Beispiel #9
0
def admin_control():
    '''绘制 电影相关标签饼图'''

    # 获取电影标签
    tags = Tag.query.all()
    tag_id = [i.id for i in tags]
    # print(tag_id)
    tag_name = [i.name for i in tags]
    # print(tag_name)
    t_movie = []
    for i in tag_id:
        # 根据 获取所有电影的标签数量
        try:
            movies_count = Movie.query.filter_by(tag_id=i).count()
            t_movie.append(movies_count)
        except Exception as e:
            t_movie.append(0)

    pie = Pie()
    pie.add("标签-电影数据统计", [list(z) for z in zip(tag_name, t_movie)])

    return pie.render_embed()
Beispiel #10
0
def pie_area2classes(data):
    # TODO: Remove fake data
    pie = Pie(init_opts=opts.InitOpts(width="2400px", height="1200px"))
    root = os.path.join('static', 'spindle')
    for area, defects in data.items():
        y, x = area.split('_')
        if 'A' in y:
            cols = list(
                set([
                    filename.split('_')[0] for filename in sorted(
                        os.listdir(os.path.join(root, 'C8C80')))
                ]))
        else:
            cols = list(
                set([
                    filename.split('_')[0] for filename in sorted(
                        os.listdir(os.path.join(root, 'C9C78')))
                ]))
        pie.add(
            series_name=area,
            data_pair=[[k, v] for k, v in defects.items()],
            center=[
                "{:.2f}%".format(90 / len(rows) * rows.index(int(x)) + 10),
                "{:.2f}%".format(90 / len(cols) * cols.index(y) + 10),
            ],
            radius=[50, 80],
            label_opts=opts.LabelOpts(False),
        )
    pie.set_global_opts(
        title_opts=opts.TitleOpts(title="Area -> Classes 各區域類別分佈"),
        legend_opts=opts.LegendOpts(
            type_="scroll",
            pos_top="5%",  # Label y軸位置
            pos_left="left",  # Label x軸位置
            orient="vertical"  # Label 垂直顯示
        ),
    )
    return pie.render_embed()
Beispiel #11
0
 def pie_two_html(self, chart_id, title, sub_title1, sub_title2, key1, key2,
                  val1, val2):
     # 实例化饼状图
     pie = Pie(self.init_opts)
     # 绑定id
     pie.chart_id = chart_id
     # 绑定属性和值
     pie.add(sub_title1, [list(v) for v in zip(key1, val1)],
             center=["25%", "50%"],
             radius=["30%", "75%"],
             rosetype="area",
             label_opts=options.LabelOpts(is_show=True))
     pie.add(sub_title2, [list(v) for v in zip(key2, val2)],
             center=["75%", "50%"],
             radius=["30%", "75%"],
             rosetype="area",
             label_opts=options.LabelOpts(is_show=True))
     # 全局参数
     pie.set_global_opts(
         title_opts=self.title_opts(title),  # 标题选项
         legend_opts=options.LegendOpts(is_show=False),  # 不显示图例组件
     )
     # 返回图表html代码
     return pie.render_embed()
Beispiel #12
0
def pyecharts(request):
    """dashboard view"""
    # 工单数量统计
    chart_dao = ChartDao()
    data = chart_dao.workflow_by_date(30)
    today = date.today()
    one_month_before = today - relativedelta(days=+30)
    attr = chart_dao.get_date_list(one_month_before, today)
    _dict = {}
    for row in data['rows']:
        _dict[row[0]] = row[1]
    value = [_dict.get(day) if _dict.get(day) else 0 for day in attr]
    bar1 = Bar(init_opts=opts.InitOpts(width='600', height='380px'))
    bar1.add_xaxis(attr)
    bar1.add_yaxis("", value)

    # 工单按组统计
    data = chart_dao.workflow_by_group(30)
    attr = [row[0] for row in data['rows']]
    value = [row[1] for row in data['rows']]
    pie1 = Pie(init_opts=opts.InitOpts(width='600', height='380px'))
    pie1.set_global_opts(title_opts=opts.TitleOpts(title=''),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%",
                                                     is_show=False))
    pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    pie1.add("", [list(z) for z in zip(attr, value)])

    # 工单按人统计
    data = chart_dao.workflow_by_user(30)
    attr = [row[0] for row in data['rows']]
    value = [row[1] for row in data['rows']]
    bar2 = Bar(init_opts=opts.InitOpts(width='600', height='380px'))
    bar2.add_xaxis(attr)
    bar2.add_yaxis("", value)

    # SQL语句类型统计
    data = chart_dao.syntax_type()
    attr = [row[0] for row in data['rows']]
    value = [row[1] for row in data['rows']]
    pie2 = Pie()
    pie2.set_global_opts(title_opts=opts.TitleOpts(title='SQL上线工单统计(类型)'),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%"))
    pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    pie2.add("", [list(z) for z in zip(attr, value)])

    # SQL查询统计(每日检索行数)
    attr = chart_dao.get_date_list(one_month_before, today)
    effect_data = chart_dao.querylog_effect_row_by_date(30)
    effect_dict = {}
    for row in effect_data['rows']:
        effect_dict[row[0]] = int(row[1])
    effect_value = [
        effect_dict.get(day) if effect_dict.get(day) else 0 for day in attr
    ]
    count_data = chart_dao.querylog_count_by_date(30)
    count_dict = {}
    for row in count_data['rows']:
        count_dict[row[0]] = int(row[1])
    count_value = [
        count_dict.get(day) if count_dict.get(day) else 0 for day in attr
    ]
    line1 = Line(init_opts=opts.InitOpts(width='600', height='380px'))
    line1.set_global_opts(title_opts=opts.TitleOpts(title=''),
                          legend_opts=opts.LegendOpts(selected_mode='single'))
    line1.add_xaxis(attr)
    line1.add_yaxis("检索行数",
                    effect_value,
                    is_smooth=True,
                    markpoint_opts=opts.MarkPointOpts(
                        data=[opts.MarkPointItem(type_="average")]))
    line1.add_yaxis("检索次数",
                    count_value,
                    is_smooth=True,
                    markline_opts=opts.MarkLineOpts(data=[
                        opts.MarkLineItem(type_="max"),
                        opts.MarkLineItem(type_="average")
                    ]))

    # SQL查询统计(用户检索行数)
    data = chart_dao.querylog_effect_row_by_user(30)
    attr = [row[0] for row in data['rows']]
    value = [int(row[1]) for row in data['rows']]
    pie4 = Pie(init_opts=opts.InitOpts(width='600', height='380px'))
    pie4.set_global_opts(title_opts=opts.TitleOpts(title=''),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%",
                                                     is_show=False))
    pie4.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    pie4.add("", [list(z) for z in zip(attr, value)])

    # SQL查询统计(DB检索行数)
    data = chart_dao.querylog_effect_row_by_db(30)
    attr = [row[0] for row in data['rows']]
    value = [int(row[1]) for row in data['rows']]
    pie5 = Pie(init_opts=opts.InitOpts(width='600', height='380px'))
    pie5.set_global_opts(title_opts=opts.TitleOpts(title=''),
                         legend_opts=opts.LegendOpts(orient="vertical",
                                                     pos_top="15%",
                                                     pos_left="2%",
                                                     is_show=False))
    pie5.set_series_opts(
        label_opts=opts.LabelOpts(formatter="{b}: {c}", position="left"))
    pie5.add("", [list(z) for z in zip(attr, value)])

    # 可视化展示页面
    chart = {
        "bar1": bar1.render_embed(),
        "pie1": pie1.render_embed(),
        "bar2": bar2.render_embed(),
        "pie2": pie2.render_embed(),
        "line1": line1.render_embed(),
        "pie4": pie4.render_embed(),
        "pie5": pie5.render_embed(),
    }

    # 获取统计数据
    dashboard_count_stats = {
        "sql_wf_cnt": SqlWorkflow.objects.count(),
        "query_wf_cnt": QueryPrivilegesApply.objects.count(),
        "user_cnt": Users.objects.count(),
        "ins_cnt": Instance.objects.count()
    }

    return render(request, "dashboard.html", {
        "chart": chart,
        "count_stats": dashboard_count_stats
    })
Beispiel #13
0
def analyze(request):
    try:
        if request.session['username']==None:
            return HttpResponseRedirect('/login/')
    except KeyError:
        return HttpResponseRedirect('/login/')
    r={}
    r['username'] = request.session['username']
    taskid = request.GET.get('taskid')
    finshed = DoubanSubject.objects.filter(taskid=taskid)
    typelist=[]
    l=[]
    for i in finshed:
        m=i.type.split(' ')
        for k in m:
            if k not in typelist and k!='' :
                typelist.append(k)
                l.append(1)
            elif k!='':
                l[typelist.index(k)]=l[typelist.index(k)]+1
    bar=Bar()
    bar.add_xaxis(typelist)
    print(typelist)
    print(l)
    bar.add_yaxis("数量",l)
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title="类型数量"),
        toolbox_opts=opts.ToolboxOpts(),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    )
    r['myechart'] = bar.render_embed()
    
    data_pair = [list(z) for z in zip(typelist, l)]
    data_pair.sort(key=lambda x: x[1])
    pie=Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#DDDD77"))
    pie.add(
        series_name="类型占比",
        data_pair=data_pair,
        rosetype="radius",
        radius="55%",
        center=["50%", "50%"],
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    )
    pie.set_series_opts(
        tooltip_opts=opts.TooltipOpts(
            trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
        ),
        label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
    )

    r['mypie']=pie.render_embed()
    namelist=[]
    scorelist=[]
    for i in finshed:
        score=i.score
        name=i.name
        namelist.append(name)
        scorelist.append(score)
            
               
    bar=Bar()
    bar.add_xaxis(namelist)
    print(typelist)
    print(l)
    bar.add_yaxis("评分",scorelist)
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title="评分"),
        toolbox_opts=opts.ToolboxOpts(),
        legend_opts=opts.LegendOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    )
    bar.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        ),
    )
    r['score'] = bar.render_embed()
    return render(request,'analyze.html',r)