博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到🔎百套Python实战项目持续更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系、项目参考文档分享❤️ ⚠️一定要先收藏⚠️
第四章 系统设计
4.1系统详细设计
4.1.1功能设计
基于Python的个性化电影推荐系统包括前后台两个方面,而功能上主要包括用户管理、电影资讯管理、评论管理、电影推荐、电影爬取、系统管理、可视化大屏分析。
其中系统功能结构图如4.1所示:
图4.1 系统功能结构图
在前台主要包括首页、查看电影资讯、电影信息,电影评论。
基于Python的个性化电影推荐系统的首页包括了logo信息、导航信息、电影信息推荐和底部信息。在首页中通过导航栏可以跳转到对应的功能页面,在电影信息推荐中,通过后台的推荐信息查看对应的电影。
前台用户可以查看电影资讯,在电影资讯模块中包括电影资讯,图片资讯内容和标题。
后台管理员通过管理权进行登录,然后进行电影管理、评分管理、资讯管理、会员信息管理、电影排名榜管理、系统管理。
在电影管理中,选择电影的分类信息后,填写电影基本内容,通过语句生成数据库记录。在电影信息列表中,也可以对电影的信息进行修改或者删除。
电影资讯管理员发布相关热播电影的拍摄信息、宣传片、主演的情况等等。
会员信息管理,管理员可以查看前台注册的会员记录,注册日期等。
可视化大屏分析,通过对电影数据分析,得出可视化大屏信息,包括电影类型统计、地区分布统计、语言分类统计、电影总数统计、每日上映数量统计、电影时长统计。
4.2.2电影推荐设计
本基于Python的个性化电影推荐系统使用协同过滤算法为用户推荐合适的电影。从注册的用户信息中挖掘和自己有相同兴趣爱好,然后分析相似用户的喜好,再把他们喜欢的电影推荐给注册用户。
协同过滤推荐算法和的关键问题是计算相似度问题,相似度的推荐方法通常包括三个方面:欧几里德距离、皮尔森相关系数、余弦相似度。
欧几里得距离也称为欧几里得杜良。在数学方法中,欧几里得距离指的是在空间中计算两点间直线距离。
欧几里德距离的数学公式,如图4-1所示。
图4-1欧几里德距离数学公式
皮尔森相关系数用于度量两个变量X和Y之间的线性相关,其值介于-1与1之间。使用数学公式来表示,如图4-2所示。
图4-2 皮尔森相关系数数学公式
余弦相似度是通过计算两个向量内积空间的夹角的余弦值来度量它们之间的相似性。余弦相似度的数学公式如图4-3所示。
图4-3 余弦相似度数学公式
系统需要计算用户的相似度,就需要反映用户对电影的喜好,首先对用户的权重值进行计算,权重并不是固定的,对权重进行量化,从而得到用户对电影喜爱的量化表,如4.1所示。
表4-1用户操作行为量化表
用户操作行为 | 量化值 |
搜索电影 | 30 |
评分大于5 | 50 |
收藏电影 | 40 |
踩电影 | -10 |
浏览时跳过1(进度[0,1%]) | -20 |
浏览时跳过2(进度[0,20%]) | 10 |
浏览时跳过3(进度[80%,100%]) | 20 |
评论电影 | 40 |
量化表中包括拉用户操作行为和量化值。不同的行为对应的量化值不同,比如评论电影和评分的权重最高,如果查看某一个电影时跳过,将减去相应的量化值。
4.2 数据库设计
4.2.1逻辑结构设计
基于Python的个性化电影推荐系统的ER图如4.6所示:
图4.6 系统ER图
4.2.2物理结构设计
基于Python的个性化电影推荐系统中包括多个信息表。
表: dianyingfenlei数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_dianyingfenlei | nvarchar(400) | Yes | 电影分类 |
表: forum数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_title | nvarchar(400) | Yes | 帖子标题 | |
4 | col_content | text(16) | Yes | 帖子内容 | |
5 | col_parentid | bigint(8) | Yes | 父节点id | |
6 | col_userid | bigint(8) | No | 用户id | |
7 | col_username | nvarchar(400) | Yes | 用户名 | |
8 | col_isdone | nvarchar(400) | Yes | 状态 |
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_dianyingmingcheng | nvarchar(400) | No | 电影名称 | |
4 | col_dianyingfenlei | nvarchar(400) | No | 电影分类 | |
5 | col_fengmian | nvarchar(400) | Yes | 封面 | |
6 | col_zuoci | nvarchar(400) | Yes | 导演 | |
7 | col_zhuyan | nvarchar(400) | Yes | 主演 | |
8 | col_redu | int(4) | Yes | 热度 | |
9 | col_shipin | nvarchar(400) | Yes | 视频 | |
13 | col_shangyingshijian | datetime(8) | Yes | 发行时间 | |
14 | col_dianyingjieshao | text(16) | Yes | 电影介绍 | |
15 | col_thumbsupnum | int(4) | Yes | 赞 | |
16 | col_crazilynum | int(4) | Yes | 踩 | |
17 | col_clicktime | datetime(8) | Yes | 最近点击时间 | |
18 | col_clicknum | int(4) | Yes | 点击次数 |
表: dianyingpaimingbang数据表
表: users数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_username | nvarchar(200) | No | 用户名 | |
3 | col_password | nvarchar(200) | No | 密码 | |
4 | col_role | nvarchar(200) | Yes | 角色 | |
5 | col_addtime | timestamp(8) | No | 新增时间 |
表: storeup数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_userid | bigint(8) | No | 用户id | |
4 | col_refid | bigint(8) | Yes | 收藏id | |
5 | col_tablename | nvarchar(400) | Yes | 表名 | |
6 | col_name | nvarchar(400) | No | 收藏名称 | |
7 | col_picture | nvarchar(400) | No | 收藏图片 | |
8 | col_type | nvarchar(400) | Yes | 类型(1:收藏,21:赞,22:踩) | |
9 | col_inteltype | nvarchar(400) | Yes | 推荐类型 |
表: dianyingxinxi数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_dianyingmingcheng | nvarchar(400) | No | 电影名称 | |
4 | col_dianyingfenlei | nvarchar(400) | No | 电影分类 | |
5 | col_fengmian | nvarchar(400) | Yes | 封面 | |
11 | col_yuyan | nvarchar(400) | Yes | 语种 | |
12 | col_shangyingshijian | datetime(8) | Yes | 发行时间 | |
13 | col_dianyingjieshao | text(16) | Yes | 电影介绍 | |
14 | col_thumbsupnum | int(4) | Yes | 赞 | |
15 | col_crazilynum | int(4) | Yes | 踩 | |
16 | col_clicktime | datetime(8) | Yes | 最近点击时间 | |
17 | col_clicknum | int(4) | Yes | 点击次数 |
表: yonghu数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_zhanghao | nvarchar(400) | No | 账号 | |
4 | col_mima | nvarchar(400) | No | 密码 | |
5 | col_xingming | nvarchar(400) | No | 姓名 | |
6 | col_nianling | int(4) | Yes | 年龄 | |
7 | col_xingbie | nvarchar(400) | Yes | 性别 | |
8 | col_shouji | nvarchar(400) | Yes | 手机 | |
9 | col_zhaopian | nvarchar(400) | Yes | 照片 |
表: dianyingzixun数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_biaoti | nvarchar(400) | No | 标题 | |
4 | col_jianjie | text(16) | Yes | 简介 | |
5 | col_fabushijian | datetime(8) | Yes | 发布时间 | |
6 | col_fengmian | nvarchar(400) | Yes | 封面 | |
7 | col_neirong | text(16) | Yes | 内容 | |
8 | col_thumbsupnum | int(4) | Yes | 赞 | |
9 | col_crazilynum | int(4) | Yes | 踩 | |
10 | col_clicktime | datetime(8) | Yes | 最近点击时间 | |
11 | col_clicknum | int(4) | Yes | 点击次数 |
表: dianyingpingfen数据表
字段 | 列名 | 类型 | 是否主键 | 是否空 | 说明 |
1 | col_id | bigint(8) | 主键 | No | 主键 |
2 | col_addtime | timestamp(8) | No | 创建时间 | |
3 | col_dianyingmingcheng | nvarchar(400) | Yes | 电影名称 | |
4 | col_fengmian | nvarchar(400) | Yes | 封面 | |
5 | col_dianyingpingfen | nvarchar(400) | Yes | 电影评分 | |
6 | col_pingfenriqi | datetime(8) | Yes | 评分日期 | |
7 | col_zhanghao | nvarchar(400) | Yes | 账号 | |
8 | col_xingming | nvarchar(400) | Yes | 姓名 |
本章节对基于Python的个性化电影推荐系统的系统进行设计,包括体系结构设计、功能结构设计、数据库设计。
第五章 系统实现
5.1 运行环境
基于Python的个性化电影推荐系统前台技术包括vue、css、div、html等,后台使用django框架,数据库mysql技术,开发平台为Pychare。
其中,基于Python的个性化电影推荐系统的硬件要求见表5-1所示。
表5.1 基于Python的个性化电影推荐系统环境硬件表
硬件名称 | 数量要求 | 性能要求 | 等级要求 |
开发主机 | 1 | I5/8G DDR3/硬盘500G | 高 |
数据库 | 1 | I5/4G DDR3/硬盘100G | 中 |
客户端 | 多个 | 无要求 | 低 |
基于Python的个性化电影推荐系统的软件要求如下面5.2所示。
表5.2 基于Python的个性化电影推荐系统服务器环境硬件表
类型名称 | 软件要求 | 系统要求 |
开发主机 | python | Windows 11 |
数据库 | MySQL | Windows 11 |
客户端 | 浏览器 | Windows 11 |
5.2 后台管理功能实现
5.2.1管理员登录
使用脚本把数据库导入到mysql中,配置python,运行程序。其中用户登录的界面如下所示。
图5.1 管理员登录
使用form表单设计了用户名和密码输入框,点击登录到后台controller的方法中进行信息查询,在login中先获取用户名和密码的参数,然后查询管理员信息表,得出是否具有该用户。一般返回的结果有两个可能,一个是正确查询到用户,另外一种是查询不到用户,如果正确查询到用户,则提示登录成功,跳转到后台首页。如果查询不到,用户就提示用户名和密码输入错误。
5.2.2管理主界面
主界面主要包括了系统管理菜单,通过菜单对系统功能进行管理。每一个功能包括基本的查询、添加等操作。其中主界面如下所示。
图5.2 管理主界面
5.2.3电影类型管理
电影类型管理包括编号、名称、内容信息。其中电影类型管理如下所示。
图5.3 电影类型管理界面
创建一个信息录入的表单,页面分为两个状态,通过当前页面是否存在主键ID为依据。如果存在ID,就说明该页面是修改页面,如果ID为空,说明该页面是一个数据新增的页面。该页面提供了所有的电影类型信息表单,用户点击保存信息后,提交信息到后台电影类型的controller的方法中,该方法通过@RequestBody方法获取了所有的电影类型实体信息,然后调用电影类型的service方法的insert方法,将当前的实体进行数据库保存。service方法因为定义了相应的保存操作接口,所以直接将信息保存到数据库中,最后返回保存成功的提示。修改页面通过调用电影类型的uupdateById方法,将数据一次性全部更新,最终返回修改成功的状态。
5.2.3电影管理
电影管理包括电影编号、名称、类别、图片内容信息。电影信息可以通过点击数据爬取到豆瓣网站进行爬取获取。其中电影管理如下所示。
图5.3电影管理界面
分析豆瓣网站的静态代码,获取对方文本,通过BeautifulSoup. find_all方法查找a链接下的信息,样式为post-item-title。于是得到所有a链接,并且样式名称为post-item-title的内容。该内容就是本系统需要的爬取内容,包括了电影数据的标题、URL地址和内容。再通过for语句循环爬取到的对象结果,使用MySQL的cursor.execute方法进行数据保存,最后commit提交方法把数据插入到数据库。
5.2.4用户管理
用户管理包括用户信息查看和用户删除功能,管理员对过期的用户进行删除。其中用户管理如下所示。
图5.5 用户管理界面
在用户信息管理页面先通过查询条件,获取对应的用户列表,然后在用户管理页面通过标签,把所有的用户信息绑定到列表中。
5.2.5可视化大屏实现
点击可视化看板,显示可视化大屏的内容信息,包括电影类型统计、地区分布统计、语言分类统计、电影总数统计、每日上映数量统计、电影时长统计。其中可视化大屏管理如下所示。
图5.5 可视化大屏管理界面
5.3 前台用户功能实现
5.3.3电影查看
用户登录后,进入系统的主界面,能够看到所有电影公司电影信息,包括成电影公司电影分类信息,电影公司电影信息。其中电影公司电影类别如5.8所示:
图5.8 主界面
点击电影公司电影列表,跳转到电影公司电影详情的界面,用户可选择进行查看。在电影公司电影详情界面,点击首页,返回到主界面。
图5.9电影信息查询界面
在电影公司电影页面加载时,页面首先获取到电影公司电影的ID,然后到controller的方法中查询该电影公司电影的信息,参数是当前操作的ID主键值,然后调用controller的getAllbyID方法,将一条记录绑定到电影公司电影实体对象中,并将该对象返回到界面,对电影公司电影对象进行绑定,然后显示出来。
源码获取
大家点赞、收藏、关注 ,让更多需要的同学看到
不同开发语言专栏推荐订阅:
👇下方有我的微信名片👇