html
使用 Book Crossing 数据集构建推荐系统
目录
欢迎回来,朋友们!在本指南中,我们将深入探讨构建推荐系统,概述所涉及的基本步骤。为了简化我们的流程,一些初步步骤已经涵盖,使我们能够专注于构建系统的核心方面。
1. 选择数据集
对于我们的推荐系统,我们将使用 Book Crossing 数据集,这是一个专为图书推荐量身定制的综合集合。虽然 Movie Lens 数据集因其流行和用户友好性而常在 YouTube 等平台的教程中出现,但我们选择了一个更复杂的数据集,以提供对推荐系统更深入的理解。
数据集访问:
- Book Crossing 数据集: 数据集链接 *(请确保将其替换为实际链接)*
- 格式: 提供 SQL 转储或 CSV 文件。对于我们的目的,我们将使用 CSV 格式。
下载 CSV 文件后,您将找到三个主要文件:
- Books: 大约 75 MB
- Users: 大约 30 MB
- Ratings: 大约 12 MB
鉴于数据集的大小,高效处理它至关重要,但其丰富的数据使其对于构建强大推荐系统来说非常有价值。
2. 理解数据集结构
Books 文件:
- 字段: ISBN、书名、作者、出版年份、出版社、图片 URL 等。
- 关键标识符: ISBN(国际标准书号) 作为每本书的唯一标识符,确保没有重复。
Users 文件:
- 字段: 用户 ID、位置、年龄
- 关键标识符: 用户 ID 唯一标识每个用户。
Ratings 文件(BX Book Rating):
- 字段: 用户 ID、ISBN、图书评分
- 重要性: 该文件将用户与他们评分的图书联系起来,构成我们的推荐系统的基础。
3. 数据准备与探索
我们将使用 Pandas 和 NumPy 进行数据操作,以及 Matplotlib 的 Pyplot 进行可视化。
加载数据:
12345678
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt # 使用适当的分隔符和编码读取数据集books = pd.read_csv('books.csv', sep=';', encoding='ISO-8859-1')users = pd.read_csv('users.csv', sep=';', encoding='ISO-8859-1')ratings = pd.read_csv('ratings.csv', sep=';', encoding='ISO-8859-1')
探索数据:
- Books: 包含每本书的详细信息,以 ISBN 作为唯一标识符。
- Users: 包含用户的人口统计信息。
- Ratings: 将用户与他们评分的书籍及评分分数进行映射。
4. 处理评分数据
Ratings 数据集至关重要,因为它将用户与他们的图书偏好联系起来。然而,在该文件中,用户 ID 和 ISBN 都不是唯一的键,这意味着:
- 一个用户可以评分多本书。
- 一本书可以被多个用户评分。
计算平均评分:
为了了解每本书的总体接受程度,我们将计算平均评分。
12345678
# 按 ISBN 分组并计算平均评分average_ratings = ratings.groupby('ISBN').mean().reset_index() # 统计每本书的评分数量rating_counts = ratings.groupby('ISBN').size().reset_index(name='RatingCount') # 将平均评分与计数合并average_ratings = average_ratings.merge(rating_counts, on='ISBN')
5. 可视化评分分布
理解评分的分布有助于识别潜在的偏差或数据稀疏性问题。
123456
plt.figure(figsize=(10,6))plt.hist(average_ratings['RatingCount'], bins=500, color='skyblue')plt.title('图书评分分布')plt.xlabel('评分数量')plt.ylabel('频率')plt.show()
洞见:
- 数据偏斜: 大量书籍被很少用户评分,而少数书籍则获得了数千次评分。
- 影响: 这种不平衡可能影响推荐系统的性能,导致推荐更偏向于受欢迎的书籍。
6. 为推荐系统做准备
在构建推荐系统之前,创建一个适当结构化数据的 数据透视表 是必不可少的,通常将用户作为行,书籍作为列,评分作为值。
创建数据透视表:
1
pivot_table = ratings.pivot(index='User ID', columns='ISBN', values='Book Rating').fillna(0)
7. 应对数据挑战
- 稀疏性: 由于许多书籍只有很少的评分,实施能够处理或缓解稀疏性的技术至关重要,例如矩阵分解。
- 冷启动问题: 对于新用户或没有评分的书籍,内容推荐或利用用户人口统计信息等策略可能会有帮助。
8. 下一步
在后续的教程中,我们将详细探讨构建数据透视表、应用协同过滤技术,并优化推荐系统,以有效应对数据集的复杂性。
结论
使用 Book Crossing 数据集构建推荐系统提供了全面的学习体验,突显了处理大型真实世界数据集的复杂性。通过理解数据结构,应对稀疏性等挑战,并有条不紊地准备数据,您为创建一个有效且可靠的推荐系统打下了坚实的基础。
编程愉快!