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) #渲染页面
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()
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()
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())
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
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()
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()
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()
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()
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()
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()
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 })
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)