首先我们先下载一个叫做ml-1m.dat的文件,该文件包含来自6000名用户对于4000部电影的100万条评论数据。它分为三个表:评分,用户信息和电影信息。将该数据通过pandas.read_table将各个表分别读到一个pandas DataFrame对象中:
import pandas as pd
unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
users = pd.read_table('./ml-1m/users.dat', sep='::', header=None, names=unames, engine = 'python')
rnames = ['user_id', 'move_id', 'rating', 'timestamp']
ratings = pd.read_table('./ml-1m/ratings.dat', sep='::', header=None, names= rnames, engine = 'python')
mnames = ['movie_id', 'title', 'genres']
movies = pd.read_table('./ml-1m/movies.dat', sep='::', header = None, names= mnames, engine = 'python')
print(users[:5])
print(ratings[:5])
print(movies[:5])
输出结果:
假设我们要根据性别和年龄计算某部电影的平均得分,可以将所有数据合并到一个表中。
data = pd.merge(pd.merge(ratings, users), movies)
print(data)
输出的结果太长,请各位自行运行。
只要熟悉了pandas,就能轻松地根据任意用户或者电影属性对评分数据进行聚合操作,为了按性别计算每一部电影的评价得分,我们可以使用pivot _table方法:
mean_ratings = data.pivot_table('rating', index=‘movie_id’, columns='gender', aggfunc='mean')
print(mean_ratings[:5])
输出结果:
如果我们打算过滤掉评分不够250条的电影,为了达到这个目的,我们先对movie_id进行分组,然后利用size()得到一个含有各个电影分组大小的series
rating_by_title = data.groupby('movie_id').size()
print(rating_by_title[:10])
输出结果:
然后在分组里面找到评论大于250的电影名称,再对其评分进行计算。
active_title = rating_by_title.index[rating_by_title >= 250]
print(active_title)
mean_ratings = mean_ratings.loc[active_title]
print(mean_ratings[:10])
输出结果:
为了了解女性观众喜欢的电影,可以对F列进行降序排列:
top_female_ratings = mean_ratings.sort_index(by='F', ascending =False)
print(top_female_ratings[:10])
输出结果:
- xiaomiking
-
1148 发帖6357 回复18614 积分
- 私信他 +关注
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖