基于movielens100k的电影评分python
时间: 2023-12-03 13:05:17 浏览: 126
代码:
```python
import pandas as pd
import numpy as np
# 读取数据
ratings_data = pd.read_csv('ratings.csv', sep=',')
movies_data = pd.read_csv('movies.csv', sep=',')
# 合并数据
movie_ratings_data = pd.merge(ratings_data, movies_data, on='movieId')
# 数据预处理
movie_ratings_data.drop(['timestamp'], axis=1, inplace=True)
movie_ratings_data['title'] = movie_ratings_data['title'].str.replace(r"\(.*\)", "").str.strip()
# 创建电影评分矩阵
ratings_matrix = movie_ratings_data.pivot_table(index=['userId'], columns=['title'], values='rating')
# 计算电影之间的相似度
movie_similarity = ratings_matrix.corr(method='pearson', min_periods=10)
# 用户个性化推荐
def get_movie_recommendations(user_ratings):
similar_scores = movie_similarity.corrwith(user_ratings)
similar_movies = pd.DataFrame(similar_scores, columns=['pearson_score'])
similar_movies.dropna(inplace=True)
similar_movies = similar_movies.sort_values('pearson_score', ascending=False)
movie_recommendations = pd.merge(similar_movies, movie_ratings_data, on='title')
return movie_recommendations
# 测试推荐系统
user_ratings = ratings_matrix.loc[1].dropna()
recommendations = get_movie_recommendations(user_ratings)
print(recommendations.head(10))
```
说明:
1. 读取数据:使用Pandas库读取movielens100k的两个数据文件ratings.csv和movies.csv。
2. 合并数据:使用Pandas的merge函数将两个数据集合并为一个。
3. 数据预处理:删除无用的时间戳列,并从电影标题中去除括号和其中的年份。
4. 创建电影评分矩阵:使用Pandas的pivot_table函数创建一个电影评分矩阵,其中行表示用户,列表示电影,值表示用户对电影的评分。
5. 计算电影之间的相似度:使用Pandas的corr函数计算每两部电影之间的皮尔逊相关系数,得到一个电影相似度矩阵。
6. 用户个性化推荐:根据用户历史评分,计算用户与每部电影之间的相似度,得到一个电影相似度列表,按照相似度从高到低排序,再与原始电影数据集合并,得到推荐列表。
7. 测试推荐系统:选择一个用户,获取其历史评分,调用推荐函数得到推荐列表,并输出前10个推荐电影。
阅读全文