作者 Susan Li
译者 钱亦欣
几乎每个人都有过过在某些网站被个性化推销商品的经历,亚马逊会告诉你购买这本书的读者还购买了…,Udemy则会显示浏览了这些课程的学生也浏览了…。Netfilix于2009年拿出了100万刀的奖金,举办了一个以将公司推荐精确度提高10个百分点为目标的数据大赛。
闲言少叙,如果你想从头学习如何架构一个推荐系统,就接着往下读。
数据
Book-Crossings 是一个由 Cai-Nicolas Ziegler 整理的关于图书评分的数据集。它有由90000位读者对270000本书籍做出了1100000万条评分记录,评分数据再1到10之间。
这个数据集共有三张表:评分表,书籍基本信息表和读者表,可以从此处下载。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
books = pd.read_csv('BX-Books.csv', sep=';', error_bad_lines=False, encoding="latin-1")
books.columns = ['ISBN', 'bookTitle', 'bookAuthor', 'yearOfPublication', 'publisher', 'imageUrlS', 'imageUrlM', 'imageUrlL']
users = pd.read_csv('BX-Users.csv', sep=';', error_bad_lines=False, encoding="latin-1")
users.columns = ['userID', 'Location', 'Age']
ratings = pd.read_csv('BX-Book-Ratings.csv', sep=';', error_bad_lines=False, encoding="latin-1")
ratings.columns = ['userID', 'ISBN', 'bookRating']
评分数据
评分数据集提供了读者对于书籍的评分时候数据,有1149780条记录和3个字段:userID,ISBN,bookRating。
print(ratings.shape)
print(list(ratings.columns))
(1149780, 3)
['userID', 'ISBN', 'bookRating']
评分分布
评分分布非常不均衡,绝大部分都是0。
plt.rc("font", size=15)
ratings.bookRating.value_counts(sort=False).plot(kind='bar')
plt.title('Rating Distribution\n')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.savefig('system1.png', bbox_inches='tight')
plt.show()
图书数据
图书数据集提供了很多细节,它包含了271360条记录,有 ISBN, book title, book author, publisher 等8个字段。
print(books.shape)
print(list(books.columns))
(271360, 8)
['ISBN', 'bookTitle', 'bookAuthor', 'yearOfPublication', 'publisher', 'imageUrlS', 'imageUrlM', 'imageUrlL']
读者数据
这个数据集提供了读者的地域信息,有 user id, location, 和 age 3个字段,共278858条记录。
print(users.shape)
print(list(users.columns))
(278858</