通过爬虫从网上爬取电影数据集,设计一个电影数据推荐系统,要求有数据预处理和模型训练,最后用可视化呈现推荐结果,写出代码
时间: 2024-02-13 11:00:40 浏览: 107
好的,以下是一份实现基于电影数据集的推荐系统并可视化结果的代码。
1. 数据预处理:
首先需要从网上爬取电影数据集,可以使用 Python 的 requests 和 BeautifulSoup 库进行网页爬取。也可以使用已有的公开数据集,如 MovieLens 数据集。
接着需要对数据进行清洗和预处理,包括去重、缺失值处理、数据类型转换等。可以使用 Pandas 库进行数据处理。
2. 模型训练:
推荐系统常用的算法包括基于内容的推荐、协同过滤推荐、深度学习推荐等。这里我们使用基于协同过滤的推荐算法来实现。
使用 Surprise 库来实现协同过滤算法,其中包括基于用户的协同过滤和基于物品的协同过滤。
3. 可视化呈现推荐结果:
使用 Flask 框架来实现 Web 应用程序,使用 HTML、CSS 和 JavaScript 来实现前端页面,将推荐结果呈现为用户友好的形式。
下面是代码示例:
```python
import pandas as pd
from surprise import SVD
from surprise import Dataset
from surprise import Reader
from surprise.model_selection import cross_validate
from flask import Flask, request, render_template
# 读取电影数据集
movies_df = pd.read_csv('movies.csv')
ratings_df = pd.read_csv('ratings.csv')
# 数据预处理
movies_df['year'] = movies_df.title.str.extract('(\(\d\d\d\d\))', expand=False)
movies_df['year'] = movies_df.year.str.extract('(\d\d\d\d)', expand=False)
movies_df['title'] = movies_df.title.str.replace('(\(\d\d\d\d\))', '')
movies_df['title'] = movies_df['title'].apply(lambda x: x.strip())
movies_df = movies_df.drop('genres', 1)
ratings_df = ratings_df.drop('timestamp', 1)
# 模型训练
reader = Reader()
data = Dataset.load_from_df(ratings_df, reader)
svd = SVD()
cross_validate(svd, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)
trainset = data.build_full_trainset()
svd.fit(trainset)
# Web 应用程序
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/recommend', methods=['POST'])
def recommend():
user_input = request.form['user_input']
user_id = int(user_input)
user_movies = ratings_df[ratings_df['userId'] == user_id]
user_unrated_movies = movies_df[~movies_df['movieId'].isin(user_movies['movieId'])]
user_unrated_movies['Estimate_Score'] = user_unrated_movies['movieId'].apply(lambda x: svd.predict(user_id, x).est)
user_unrated_movies = user_unrated_movies.sort_values('Estimate_Score', ascending=False)
recommendations = user_unrated_movies.head(10)
return render_template('recommend.html', recommendations=recommendations)
if __name__ == '__main__':
app.run(debug=True)
```
上面的代码实现了一个基于 Flask 框架的 Web 应用程序,用户可以输入用户 ID,系统会根据该用户的评分记录进行推荐,并将推荐结果以列表形式呈现在页面上。
需要注意的是,由于电影数据集较大,训练模型的时间可能较长。在实际应用中,可以考虑将训练好的模型保存下来,下次使用时直接加载模型,避免重复训练。
阅读全文