本项目实现在线电影推荐系统的前后端开发,使用Django2.2+MySQL+spark。其中MySQL部分支持在线计算,spark支持离线计算。
安装指南
数据导入
算法说明
预览
本项目基于ubuntu18.04运行。
如下安装好Django2.0+和最新的xadmin
pip3 install --upgrade pip; pip3 install git+git://github.com/sshwsfc/xadmin.git@django2; pip3 install django; pip3 install Pillow; pip3 show xadmin; pip3 show django;
还需要安装MySQL8.0+,具体过程可参考MySQL8.0环境搭建
Django框架需要通过migrate命令自动构建数据库,但是会生成相应的缓存文件,这里清空所有的缓存文件并保留应有的结构。
cd MovieRecOnline; rm -r ./apps/movies/__pycache__ rm -r ./apps/operation/__pycache__ rm -r ./MovieSizer/__pycache__ rm -r ./apps/movies/migrations/* rm -r ./apps/user/migrations/*; rm -r ./apps/operation/migrations/*; touch ./apps/movies/migrations/__init__.py touch ./apps/user/migrations/__init__.py touch ./apps/operation/migrations/__init__.py
首先修改MovieRecOnline/MovieSizer/settings.py
文件的mysql数据库连接:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'MovieSizer', 'USER': 'root', 'PASSWORD': '你的密码', 'HOST': 'master', 'PORT': '3306' } }
然后在MySQL shell中建立数据库MovieSizer
mysql -u root -p
use mysql; create database MovieSizer;
执行migrate
自动建表:
cd MovieRecOnline; chmod +x manage.py; python3 manage.py makemigrations; python3 manage.py migrate;
输出如下
Migrations for 'operation': MovieSizer-final/apps/operation/migrations/0001_initial.py - Create model Top5Recommend_2 - Create model Top5Recommend - Create model Review - Create model Rating - Create model Default5Recommend . . . Operations to perform: Apply all migrations: admin, auth, contenttypes, movies, operation, sessions, user, xadmin Running migrations: Applying operation.0001_initial... OK . . .
最后创建管理员用户
python3 manage.py createsuperuser
启动项目
python3 manage.py runserver 0.0.0.0:8000
成功则输出如下
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). May 15, 2019 - 00:47:32 Django version 2.2, using settings 'MovieSizer.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C. [15/May/2019 00:47:37] "GET /movieinfo/7641 HTTP/1.1" 200 47740 ^C
本项目提供爬取的猫眼电影网站数据作为DEMO,共1000条,字段对应movies_movieinfo
表,SQL文件,复制到MySQL shell中即可插入数据。
接着使用我们编写的cal_similar_gry.py
文件计算电影相似度,存入movies_moviesimilar
表。注意需要使用pip3 install distance
安装依赖,并将MySQL账号密码的参数设置正确。
到这里我们已经计算好了movies_movieinfo
表和movies_moviesimilar
表,主页已经能显示。
本项目计算两张电影相似度表,分别是movies_moviesimilar
和movies_moviesimilar_fromspark
,对应两张推荐表operation_top5recommend
和operation_top5recommend_2
。第二张相似表由spark计算得出,详情可见'calculate_similarity_mch.ipynb'。spark分布式的安装可以参考Spark全分布式安装