You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import json
from django.http import JsonResponse
from django.shortcuts import render, HttpResponse
from django.db.models import Count
from pyecharts.charts import Funnel, Pie, Bar
import pyecharts.options as opts
from comment.models import Comment
from article.models import *
# Create your views here.
def chart_view(request):
return render(request, "data_analysis/data_view.html")
# 分析评论最多的文章
def most_comment_article(request):
comment_count = Article.objects.annotate(comment_count=Count("band_object")).order_by('-comment_count')[0:5]
comment_count = [[article.title, article.comment_count] for article in comment_count]
c = (
Funnel()
.add(
series_name="",
data_pair=comment_count,
gap=2,
label_opts=opts.LabelOpts(
is_show=True,
position="inside",
formatter="{c}",
font_size=18
),
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b} : {c}"),
)
.set_global_opts(
legend_opts=opts.LegendOpts(pos_top="92%", orient="horizontal"),
title_opts=opts.TitleOpts(
title="文章评论数量排行榜",
pos_left="center", # 标题的位置
pos_top="0px",
title_textstyle_opts=opts.TextStyleOpts(
font_size=32, # 大小
font_weight="bold", # 加粗与否
font_family="Arial", # 字体Arial、Times New Roman、FangSong、KaiTi
font_style="normal", # 斜体、下划线、正常 italic
),
)
)
.set_series_opts(
)
.dump_options_with_quotes()
)
return JsonResponse(json.loads(c))
# 分析各个分类的文章数目
def cate_articles_per(request):
cate_articles = Category.objects.annotate(cate_articles=Count("article_category")).order_by("-cate_articles")
cate_articles = [[cate.name, cate.cate_articles] for cate in cate_articles]
c = (
Pie()
.add(
"",
cate_articles,
label_opts=opts.LabelOpts(
is_show=True,
# position="inside",
formatter="{b}:{c}",
font_size=18
),
)
.set_global_opts(
legend_opts=opts.LegendOpts(pos_top="92%", orient="horizontal"),
title_opts=opts.TitleOpts(
title="文章分类数量占比",
pos_left="center", # 标题的位置
pos_top="0px",
title_textstyle_opts=opts.TextStyleOpts(
font_size=32, # 大小
font_weight="bold", # 加粗与否
font_family="Arial", # 字体Arial、Times New Roman、FangSong、KaiTi
font_style="normal", # 斜体、下划线、正常 italic
),
)
)
.dump_options_with_quotes()
)
return JsonResponse(json.loads(c))
# 分析各个标签的文章数目
def article_views_rank(request):
article_views = Article.objects.order_by("-article_views")[:5]
article_title_list = [article.title for article in article_views]
article_views_list = [article.article_views for article in article_views]
c = (
Bar()
.add_xaxis(article_title_list)
.add_yaxis("", article_views_list)
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(
yaxis_opts=opts.AxisOpts(is_inverse=True),
legend_opts=opts.LegendOpts(is_show=True),
title_opts=opts.TitleOpts(
title="文章浏览量排行榜",
pos_left="center", # 标题的位置
pos_top="0px",
title_textstyle_opts=opts.TextStyleOpts(
font_size=32, # 大小
font_weight="bold", # 加粗与否
font_family="Arial", # 字体Arial、Times New Roman、FangSong、KaiTi
font_style="normal", # 斜体、下划线、正常 italic
),
)
)
.dump_options_with_quotes()
)
return JsonResponse(json.loads(c))