✅ 基于协同过滤与Echarts的新闻推荐与可视化系统 Django全栈 排行榜+猜你喜欢 机器学习 大数据毕业设计
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅
1、项目介绍
技术栈:Python语言、Django框架、协同过滤推荐算法、Echarts可视化、数据分析、排行榜、MySQL数据库
前台用户:登录/注册/找回密码、新闻搜索/浏览/评分/收藏/评论/点赞、个性化推荐、猜你喜欢、个人中心(评分/收藏/点赞/浏览历史)
后台管理员:可视化数据分析(用户偏好Top20/类型饼图)、新闻类型/新闻/用户/评分/收藏/评论/点赞/浏览/偏好/管理员管理
推荐策略:
- 游客:热门推荐(按新闻平均偏好值降序)
- 登录用户:基于用户的协同过滤;若冷启动无结果,回退热门推荐;猜你喜欢取当前类型下高偏好且未浏览新闻
- 可视化:Echarts柱状图+饼图展示用户偏好Top20与类型分布
研究背景:信息过载时代,传统门户“千人一面”导致体验差、留存低;协同过滤+可视化可提升点击与停留时长。
研究意义:将“协同过滤+排行榜+可视化”完整链路封装为Django+Vue全栈系统,为媒体平台、高校大数据课程、毕业设计提供高可用开源方案,助力新闻门户数字化转型。
2、项目界面
(1)系统首页-----新闻分类、新闻预览、新闻推荐

(2)后台可视化分析----用户偏好新闻Top20、用户偏好新闻类型

(3)新闻详情页--------新闻详细内容、点赞、收藏、评分

(4)新闻详情页--------新闻详细内容、点赞、收藏、评分

(5)猜你喜欢新闻、新闻评论

(6)个人中心—个人信息、我的评分、点赞、收藏、浏览历史

(7)后台数据管理—新闻数据管理

(8)用户偏好管理

(9)注册登录

3、项目说明
系统功能模块介绍
1. 用户前台功能模块
-
用户账户管理
- 登录/注册/找回密码/退出登录:支持邮箱验证与JWT令牌,保障账户安全。
- 个人信息修改:头像、昵称、联系方式等;密码独立修改,增强安全性。
-
新闻浏览与交互
- 分类浏览与搜索:支持多级新闻类型与关键词高亮搜索。
- 新闻详情:展示标题、正文、发布时间、作者;提供评分(1-5星)、收藏、点赞、评论功能。
- 用户行为埋点:浏览、评分、收藏、点赞、评论实时写入MySQL,为推荐算法提供原始数据。
-
个性化推荐
- 游客热门推荐:按新闻平均偏好值降序返回Top-N。
- 登录用户-协同过滤:基于用户的协同过滤(UserCF),离线计算用户相似度,在线召回+排序。
- 冷启动回退:若协同过滤无结果,自动切换热门推荐。
- 猜你喜欢:当前新闻类型下高偏好且用户未浏览的20条内容。
-
个人中心
- 我的评分/收藏/点赞/浏览历史:支持分页、按时间筛选、一键取消。
- 偏好画像:用Echarts雷达图展示用户在各类型的偏好分值。
2. 后台管理员功能模块
-
数据可视化大屏
- 用户偏好新闻Top20:柱状图,实时统计平均偏好值最高的20条新闻。
- 用户偏好新闻类型:饼图,展示各类型平均偏好值占比。
-
新闻与类型管理
- 新闻CRUD:支持富文本编辑器、封面图上传、批量导入、定时发布。
- 类型管理:无限级分类,支持拖拽排序、SEO关键词设置。
-
用户与行为管理
- 用户信息管理:查看、编辑、禁用、删除;支持批量导出。
- 行为明细:浏览、评分、收藏、点赞、评论明细表,可筛选、导出CSV。
-
管理员与权限
- RBAC角色管理:超级管理员、编辑、审核员三级角色,菜单级权限控制。
3. 技术实现
- 后端:Python 3.9 + Django 4.2 + Django-REST-Framework + MySQL 8.0
- 推荐算法:基于用户的协同过滤(UserCF)+ 热门回退 + 猜你喜欢混合策略
- 前端:Vue 3 + Element-Plus + Echarts.js(柱状图、饼图、雷达图)
- 部署:Docker-Compose一键启动,Nginx反向代理,支持单机与集群
系统采用Django-REST-Framework提供标准化API,Vue3单页应用实现前后端分离;推荐服务使用Redis缓存用户相似度矩阵,提高并发性能;Echarts可视化组件封装成Vue插件,低代码添加新图表。整体代码开源、文档齐全,是毕业设计、新闻门户、大数据实训的理想模板。
4、核心代码
# 前台用户首页视图
from django.core.paginator import Paginator
from django.shortcuts import render
from app_news.models import News
from app_newstype.models import Newstype
from app_tools.rec.collaborative_filtering_based_user import cfRecommend
from app_tools.tools import ConstantTools
from app_userpreference.models import Userpreference
# 前台用户首页视图函数
def index(request):
# 全部新闻,关联新闻类型分页查询所有新闻数据,新闻id降序(添加时间降序)
newss = News.objects.values("id", "newsname", "imagepic", "sources", "newstypeid__newstypename").order_by("-id")
# 分页查询
paginator = Paginator(newss, ConstantTools.page_size_user)
# 查询第一页
pageBean = paginator.page(1)
# 查询所有新闻类型:id降序排列
newstypes = Newstype.objects.all().order_by("-id")
print("***推荐新闻开始***")
# 定义推荐的新闻列表变量
recommendNewss = None
# 判断用户是否登录
if request.session.get(ConstantTools.session_user, None):
# 获取登录用户id
userid = request.session.get(ConstantTools.session_user).get("id")
# 推荐新闻
recommendNewss = doRecommend(userid)
else:
print("用户未登录,采用热门推荐!")
recommendNewss = hotRecommend()
print("***推荐新闻结束***")
# 返回到页面的数据
return_data = {
"page": 1,
"pageBean": pageBean,
"newstypes": newstypes,
"recommendNewss": recommendNewss,
}
return render(request, "index.html", context=return_data)
# 推荐新闻:游客(用户未登录):
# 热门推荐(推荐用户偏好较高的新闻);
# 用户(用户已登录):基于用户的协同过滤推荐算法,根据用户偏好数据,
# 如果基于用户的协同过滤推荐算法没有推荐结果(冷启动和数据稀疏性问题造成没有推荐结果),采用热门推荐(推荐用户偏好较高的新闻)。
def doRecommend(userid):
# 查询所有用户偏好数据
userpreferences = Userpreference.objects.all()
# 调用基于用户的协同过滤推荐算法
recommendNewsidList = cfRecommend(userid, userpreferences)
# 判断是否有推荐结果
if recommendNewsidList and len(recommendNewsidList) > 0:
# 根据预测偏好值降序查询推荐的新闻
# 将推荐的新闻id列表转新闻id字符串(以逗号分割),新闻id列表中的id是int类型,故需先使用内置函数map将int转str
newsids = ",".join(map(str, recommendNewsidList))
# 根据预测偏好值降序查询新闻列表sql,关联新闻类型
sql = "select m.*, t.newstypename from table_news m " \
"left join table_newstype t on t.id = m.newstypeid " \
"where m.id in (%s) order by field(m.id, %s)" % (newsids, newsids)
print(sql)
# 返回查询的结果
return News.objects.raw(sql)
else:
print("基于用户的协同过滤推荐算法没有推荐结果,采用热门推荐!")
# 热门推荐(推荐用户偏好较高的新闻),同时排除当前登录用户已有偏好的新闻
recommendNewss = hotRecommend(userid=userid)
return recommendNewss
# 热门推荐:推荐用户偏好较高的新闻,同时排除当前登录用户已有偏好的新闻
# 参数userid:当前登录用户id,
# 如果参数为空,即查询所有用户偏好较高的新闻;
# 如果参数不为空,排除登录用户已有偏好的新闻。
def hotRecommend(userid=None):
# sql语句
sql = "select m.*, t.newstypename, " \
"round(avg(w.preference), 1) as avgpreference, count(m.id) as preferencecount " \
"from table_news m " \
"left join table_newstype t on t.id = m.newstypeid " \
"left join table_userpreference w on w.newsid = m.id " \
"where 1 = 1 "
# 判断用户是否登录
if userid: # 登录用户
# 排除登录用户已有偏好的新闻
sql += "and m.id not in ( select newsid from table_userpreference where userid = %s ) " % userid
sql += "group by m.id order by avgpreference desc, preferencecount desc limit 0, 10 "
print(sql)
# 查询
return News.objects.raw(sql)
5、源码获取方式
biyesheji0005 或 biyesheji0001 (绿色聊天软件)
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻
更多推荐



所有评论(0)