【番剧推荐系统设计】基于 Flask 与 MySQL 实现番剧推荐系统(Python代码)(1)
实验框架的设计
一、实验简介
1.1 实验介绍
本次实验将基于 Flask 框架与 MySQL 数据库,使用 Python 语言实现一个简单的番剧推荐系统。
1.2 知识点
本实验中我们将学习并实践以下知识点:
- Python 语言基础
- SQL 语言基础
- HTML 与 CSS 基础
- 数据库表的拆分与设计
- Flask 框架的使用
- MySQL 的Python 接口的使用
- 复杂查询语句的使用
- 推荐算法的简易设计
1.3 效果图
二、基础知识
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 课程。
2.3 软件开发平台
- 数据库开发软件:MySQL Workbench
数据库软件MySQL Workbench建立数据库过程可参看网上其他教程。最后得到的数据库登陆界面如下。输入数据的密码即可登陆创建的数据库:
- Python开发软件:Spyder
需要提前下载好需要的python包,如包MySQLdb,包random等。
三、模块的设计
3.1 代码设计
本课程中我们将代码设计为 app.py与recommend.py 两个模块:
- app.py 用于根据不同请求来调用不同功能,即 Flask 的主体。
- recommend.py 用于完成推荐功能,其中包含了推荐算法的实现,以及与数据库进行交互。
3.2 数据库表设计
由业务逻辑出发,可发现实体类 user(用户) 和 anime(番剧),弱实体类 style,联系集 user_anime(记录用户喜欢的番剧),anime_style(番剧的标签)。
四、实验内容
4.1 安装 Flask
同安装python包MySQLdb,random一样。
编写最简单的 Python 代码来测试 Flask:
from flask import Flask app=Flask(__name__) @app.route('/') def index(): return "hello" if __name__=="__main__": app.run(debug=True)
使用浏览器访问
localhost:5000查看 Flask Web 服务是否已经启动。网址打开如下:
至此 Flask 安装成功。
4.2 测试 MySQL
首先,需要启动 MySQL 服务,进入
MySQL 8.0 Command Line Client - Unicode进去类似于DOS界面的后的MySQL入口端,如下图。启动并进入 MySQL 命令行(密码为1234):
4.3 安装连接 MySQL 的 Python 包
进入 MySQL 创建一个数据库
recommend(必须先创建一个数据库才可以在python下进行操作):(之前我已经创建好了)
在spyder中使用python连接数据库,编写测试连接数据库代码:
import MySQLdb db=MySQLdb.connect("localhost","root","1234","recommend") cursor=db.cursor() sql="create table user_anime(user int,anime int)" cursor.execute(sql) db.close()
简单说明一下上面的代码:
- 第一行导入连接 MySQL 的库
- 第二行通过指定参数(ip,用户名,密码,数据库)连接到某一个数据库
- 第三行使用
cursor()
方法获取操作游标 - 第四行为要执行的 SQL 语句,这句是创建一个名为
user_anime
表 - 第五行为执行 SQL 语句
回数据库查看一下:
可以发现数据库表创建成功,连接成功。
4.4 创建表以及填入数据
在 MySQL 提示符后输入相关命令,首先需要删除上述步骤的测试表,开始正式创建数据库。
依次完成下列的创建过程:
- 创建 user 表存储 id,姓名,用 id 为主键,即 id 不能重复。
- 创建 anime 表存储 id,名称,介绍信息,同样用 id 为主键,即 id 不能重复。
因为创建数据比较多,在mysql中添加数据会比较繁琐,所以我们在spyder中使用python来创建,过程如下图所示:
import MySQLdb db=MySQLdb.connect("localhost","root","1234","recommend") cursor=db.cursor()# 使用cursor()方法获取操作游标 cursor.execute("create table user(id int,name varchar(20),primary key(id))") cursor.execute("create table anime(id int,name varchar(20),brief varchar(100),primary key(id))") cursor.connection.commit()#执行commit操作,插入语句才能生效 db.close()
插入数据:
- 用insert into 语句插入一个人,id为1,名为Tom
- 用select 语句查询一下,插入成功
数据操作如下图:
cursor.execute("insert into user values(1,'Tom')")
结果如下:
- 同样向anime表中插入数据
cursor.execute("insert into anime values(279,'a','A')") cursor.execute("insert into anime values(279,'b','B')") cursor.execute("insert into anime values(279,'c','C')") cursor.execute("insert into anime values(279,'d','D')") cursor.execute("insert into anime values(279,'e','E')") cursor.execute("insert into anime values(279,'f','F')") cursor.execute("insert into anime values(279,'g','G')")
结果如下:
下面创建联系集,首先创建番剧和对应类型的表。这里需要用到外键。对于
foreign key解释一下,这个定义的是外键,其约束是
anime_id的值域在
anime表的
id值域之中,其对于保持数据库的一致性很重要。
cursor.execute("create table anime_style(anime_id int,style_id int,foreign key(anime_id) references anime(id))")
继续插入数据,插入关联数据,这里比较多,希望大家不要反感。
cursor.execute('insert into anime_style values(279,26)') cursor.execute('insert into anime_style values(279,30)') cursor.execute('insert into anime_style valu 20000 es(279,32)') cursor.execute('insert into anime_style values(279,8)') cursor.execute('insert into anime_style values(279,7)') cursor.execute('insert into anime_style values(3494,9)') cursor.execute('insert into anime_style values(3494,19)') cursor.execute('insert into anime_style values(3494,29)') cursor.execute('insert into anime_style values(3494,46)') cursor.execute('insert into anime_style values(3377,34)') cursor.execute('insert into anime_style values(3377,7)') cursor.execute('insert into anime_style values(3377,18)') cursor.execute('insert into anime_style values(3452,30)') cursor.execute('insert into anime_style values(3452,32)') cursor.execute('insert into anime_style values(3452,7)') cursor.execute('insert into anime_style values(3452,22)') cursor.execute('insert into anime_style values(782,30)') cursor.execute('insert into anime_style values(782,32)') cursor.execute('insert into anime_style values(782,7)') cursor.execute('insert into anime_style values(782,1)') cursor.execute('insert into anime_style values(782,50)') cursor.execute('insert into anime_style values(3421,30)') cursor.execute('insert into anime_style values(3421,32)') cursor.execute('insert into anime_style values(3421,7)') cursor.execute('insert into anime_style values(3421,22)') cursor.execute('insert into anime_style values(2730,11)') cursor.execute('insert into anime_style values(2730,30)') cursor.execute('insert into anime_style values(2730,22)')
结果如下:
插入完成后,下面创建另一个联系集,user_anime 表:
cursor.execute('create table user_anime(user_id int,anime_id int,foreign key(user_id) references user(id),foreign key(anime_id) references anime(id))') cursor.execute('insert into user_anime values(1,782)') cursor.execute('insert into user_anime values(1,3421)') cursor.execute('insert into user_anime values(1,2730)')
结果如下:
完成后,我们本实验测试所需要的数据库建立完毕。
五、总结
本节说明了实验所需知识内容,并做实验完成了环境的部署,以及对环境进行了简单的测试。并且在 MySQL 中建立了表,插入了相关的测试数据。虽然过程有些艰难,但相信大家都能克服,在接下的试验中我们将会编写相关的 Python 代码,完成大家期待的推荐算法,和进行复杂的查询操作,最后完成推荐系统的搭建。
- 【番剧推荐系统设计】基于 Flask 与 MySQL 实现番剧推荐系统(Python代码)(2)
- 基于 Flask 与 MySQL 实现番剧推荐系统(2)
- 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)
- [20180313智慧餐厅推荐系统02]基于python的socket编程代码,实现PC与服务器的简单通信
- 基于 Flask 与 MySQL 实现番剧推荐系统(2)
- 基于 Flask 与 MySQL 实现番剧推荐系统(1)
- 基于 Flask 与 MySQL 实现番剧推荐系统(1)
- 游戏任务成就体系的实现(附三):成就系统基于Mysql+Cache的数据库访问设计实现
- 毕业设计5:基于MicroPython的智能火灾报警器系统的设计与实现
- RBM算法模型应用在推荐系统 Python代码实现
- 基于Spark MLlib平台和基于模型的协同过滤算法的电影推荐系统(二)代码实现
- 推荐系统实践--基于用户的协同过滤算法和python实现
- 基于用户协同过滤的推荐系统算法,python 实现
- 基于python实现jenkins自动发布代码平台 推荐
- 基于Spring MVC+Hibernate+Spring Security+Mysql 的B/S应用系统平台设计与实现
- 推荐系统中的相似度计算方法总结及实现代码(python)
- 矩阵分解在推荐系统的应用以及python代码的实现
- Python基于mysql实现学生管理系统
- Python用户推荐系统曼哈顿算法实现完整代码
- MM-001 25 基于SVD的推荐系统代码实现