构建一个 基于项目相似度的推荐系统,使用到Movielens数据集,中的较小的数据集(MovieLens 100K Dataset),其中用到的是u.data文件。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
其中涉及warning模块的使用
和exception异常要求用户立刻进行处理不同,warning通常用于提示用户一些错误或者过时的用法
如:scrapy源码中用到了继承了Warning类创建了一个提醒对象ScrapyDeprecationWarning,用于提醒过时的用户操作,在新版本可能会直接去除支持。
用户感知warnings
- python参数控制warning输出
python3 -W all example.py
python3 -W error example.py
python3 -W ignore example.py
- python脚本控制
import warnings
warnings.simplefilter('ignore')
warnings.simplefilter('always')
warnings.simplefilter('error')
开发输出warnings
import warnings
warnings.warn('warning message', OwnDeprecationWarning)
查看数据
df=pd.read_csv('E:\\1_download\\ml-100k\\u.data', sep='\t', names=['user_id', 'item_id', 'rating', 'timestamp'])
print(df.head())
print(df.describe())
user_id item_id rating timestamp
0 196 242 3 881250949
1 186 302 3 891717742
2 22 377 1 878887116
3 244 51 2 880606923
4 166 346 1 886397596
user_id item_id rating timestamp
count 100000.00000 100000.000000 100000.000000 1.000000e+05
mean 462.48475 425.530130 3.529860 8.835289e+08
std 266.61442 330.798356 1.125674 5.343856e+06
min 1.00000 1.000000 1.000000 8.747247e+08
25% 254.00000 175.000000 3.000000 8.794487e+08
50% 447.00000 322.000000 4.000000 8.828269e+08
75% 682.00000 631.000000 4.000000 8.882600e+08
max 943.00000 1682.000000 5.000000 8.932866e+08
获取每一个电影(item_id)的平均分和评价的数目
ratings=pd.DataFrame(df.groupby('item_id')['rating'].mean())
ratings.rename(columns={'rating':'average_rating'},inplace=True)
ratings['number_of_ratings']=df.groupby('item_id')['rating'].count()
# print(ratings.columns.values.tolist())
print(ratings.head())
average_rating number_of_ratings
item_id
1 3.878319 452
2 3.206107 131
3 3.033333 90
4 3.550239 209
5 3.302326 86
作图,使更清晰的表示数据分布
plt.hist(ratings['average_rating'],bins=50)
plt.show()
plt.hist(ratings['number_of_ratings'],bins=50)
#bins规定柱状图中柱的数量
plt.show()