一、项目简介
1.1 介绍
本项目是基于 Python 的 Flask 框架和 MySQL 实现的简单的番剧推荐系统。在课程中我们将学到如何用 Python 连接 MySQL 数据库,如何查询和展示数据及设计推荐算法等知识。
1.2 知识点
本实验中我们将学习并实践以下知识点:Python 语言基础
SQL 语言基础
HTML 与 CSS 基础
数据库表的拆分与设计
Flask 框架的使用
MySQL 的 Python 接口的使用
复杂查询语句的使用
推荐算法的简易设计
1.3 效果图
本课程将最终将实现下面的效果,输入 User Number,这里使用数字代替,页面输出为番剧名称和描述,使用字母代替:
二、基础知识
2.1 认识Flask框架
Flask 是一个 Python 语言的微型网络开发框架。微框架中的 “微” 意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎则很容易替换。
Flask 基于 WerkzeugWSGI 工具箱和 Jinja2 模板引擎。实验中你将会知道 Jinja2 给予我们极大的方便,比如可以传递变量参数等。让我们的表示层动态的展示你想展示的信息,更详细的说明可参考 Python Flask Web框架。
2.2 认识 MySQL 和简单的 SQL 语句
MySQL 作为一种关系型数据库,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。并且实验楼已经安装好 MySQL,故实验时只需使用即可。
我们要用到的 SQL 语句包括 select 语句,insert into 语句,create 语句,order by 子句, Limit限制语法,natural join 语法。由于会涉及到较复杂查询,对于上述 SQL 用法不太熟悉或不会的同学,建议去学习一下实验楼的 SQL 课程。
三、模块设计及环境部署
3.1 代码设计
本课程中我们将代码设计为 app.py与recommend.py 两个模块:app.py 用于根据不同请求来调用不同功能,即 Flask 的主体。
recommend.py 用于完成推荐功能,其中包含了推荐算法的实现,以及与数据库进行交互。
3.2 数据库表设计
由业务逻辑出发,可发现实体类 user(用户) 和 anime(番剧),弱实体类 style,联系集 user_anime(记录用户喜欢的番剧),anime_style(番剧的标签)。
3.3 环境部署及测试
本节内容为实验完成环境的部署,以及对环境进行了简单的测试。并且在 MySQL 中建立了表,插入了相关的测试数据。详细的部署和测试步骤可以在实验一中查看并在线实践。
四、简单推荐算法实现
本节实验中我们实现的推荐算法比较简单,基本思路:找到用户所喜爱的番剧
分析这些番剧的类别(一个番剧可能有多个标签),进行统计排序
找到前三个标签,从数据库中找到同时具有这三个标签的番剧(喜欢的不能再推荐)
将番剧相关信息(name,brief)进行展示
SQL 数据库操作的实现上述的思路1 和 思路2:
下面代码实现得到用户所喜欢top3类型
sql='''
select style_id from
(select user_id,style_id from
(select user_id,anime_id as id from user_anime where user_id=%s) as s
natural join anime natural join
(select anime_id as id,style_id from anime_style) as n
)as temp group by style_id order by count(user_id) desc limit 3;'''%user
其中下图所划去的一行内容对应思路1,即从 user_anime 表中查询用户和喜欢的番剧数据对:
(select user_id,anime_id as id from user_anime where user_id=%s) as s
剩下的两个 select 操作由以下代码共同完成:
上图中的红线部分较重要,其中第二个红线部分用了 Python 的 Set 数据结构以取交集。love 是喜欢番剧的列表,choice() 函数是随机取一个。while 循环中保证不取与喜欢的重复的,这里还考虑一个问题,就是你得到的交集是喜欢集合的子集,如果不加判断将会导致死循环,所以这种情况拿出来判断,如果出现这种情况就从用户最喜欢类别中拿出一个番剧。
更多Python经典项目:Python全部 - 课程