[分享] Python Pandas之学习(Lesson_4)
661 查看
2 回复
 楼主 | 发布于 2018-05-05 | 只看楼主
分享到:

首先我们先下载一个叫做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])


输出结果:

屏幕快照 2018-05-05 10.48.10.png

假设我们要根据性别和年龄计算某部电影的平均得分,可以将所有数据合并到一个表中。

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])

输出结果:

屏幕快照 2018-05-05 11.36.29.png

如果我们打算过滤掉评分不够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])

输出结果:



(0 ) (0 )
回复 举报

楼主 | 回复于 2018-05-05 沙发

上传图片挺麻烦,希望支持。
(0 )
评论 (0) 举报

回复于 2018-05-05 2#

多谢分享!!!
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部