电影评分数据集的分析(案例二)

本文是《python电影数据集分析》系列的第二部分,主要探讨了电影评分的合理性,指出仅考虑平均分可能不准确,应当结合评分人数。通过Python代码展示了如何过滤评分人数少于100的电影并按平均分排序,揭示了《泰坦尼克号》为女性观众的最爱。还使用透视图和标准差分析,进一步深入理解评分分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《python电影数据集的分析(系列一)》分析三个表前两个表的数据,以及对于三个表的数据连接。这里主要是分享三个表连接数据评分的详细分析。在系列一,最后的一个例子中没有考虑到评分者的数量,一个广受评价的电影他的评价满分,这是很有问题的,有可能只有一个观众评价,而这个观众评价的刚好是5.0分,则这部电影平均评分就是5.0分。

  • 代码如下:
import pandas as pd

'''
@Function:连接观众,评分,电影数据进行分析
@Author  :王育红
@Date2020/8/21
'''

# 通过分割符'|',来表示每个列的对应的名称
unames = ['uid', 'age', 'gender', 'occupation', 'zip']
users = pd.read_table('d:\\park01\\ml-100k\\u.user', sep='|', header=None, names=unames)

# 通过分割符'\t',来表示每个列的对应的名称
rnames = ['uid', 'mid', 'rating', 'timestamp']
ratings = pd.read_table('d:\\park01\\ml-100k\\u.data', sep='\t', header=None, names=rnames)

# 这里有19个,要对应到文档中
mnames = ['mid', 'title', 'date1', 'data2', 'url',
          'unknown', 'Action', 'Adventure', 'Animation',
          'Children', 'Comedy', 'Crime', 'Documentary', 'Drama',
          'Fantasy', 'Film-Noir', 'Horror', 'Musical',
          'Mystery', 'Romance', 'Sci-Fi', 'Thriller', 'War', 'Western']
movies = pd.read_table('d:\\park01\\ml-100k\\u.item', sep='|', header=None, names=mnames, encoding='ISO-8859-1')

# 连接三个数据
frame = pd.merge(pd.merge(ratings, users), movies)
# 按性别分析每部电影的平均评分
print(frame['rating'].groupby([frame['gender'],frame['title']]).mean().sort_values(ascending=False))

查看运行结果:
在这里插入图片描述(一)为此我们改变了方法,不仅要考虑平均分,而且还要考虑评分的人数,同时进行两种不同的聚合运算,agg方法来集成分组然后进行过滤和排序,过滤掉评分人数小于100的,然后按照平均分排序

  • 提供代码如下:
# 增加参数设定,显示全部的记录结果
pd.set_option('display.max_rows', None)
# 进行过滤(保留总评价次数大于100的)和排序
frame1 = frame['rating'].groupby([frame['gender'],frame['title']]).agg(['mean','count'])
print(frame1[frame1['count'] > 100].sort_values(by='mean',ascending=False))
  • 查看运行结果:
    在这里插入图片描述
  • 说明:很明显排在前面的是一些高峰电影,分数比较高,而且评分人数有一定的保证。可以很容易看出女性观众最喜欢电影是1997年的《泰塔尼克号》,具有最高的平均分,虽然总观看人数不是最高,但是满足大于100的要求。所以这种分析更为合理一些,因此在很多时候,我们需要利用各种方法来比较分析结果,找到最为合适和最能展示效果的分析结论。

(二)采用透视图,即多维矩阵或按照几个列来分组展示,以性别和电影来分析,按性别来计算每部电影的平均得分。将性别和标题设置为行和列,由于电影很多,更加适合行,这样就构成了一个二维矩阵,每个矩阵单元格就显示对应的平均评分

  • 提供代码如下:
# 增加参数设定,显示全部的记录结果
pd.set_option('display.max_rows', None)
# 过滤筛选,通过标题来分组,size来返回每个组的个数
ratings_by_title = frame.groupby('title').size()
print(frame.pivot_table('rating',index='title',columns='gender',aggfunc='mean').
       loc[ratings_by_title.index[ratings_by_title > 100]].
       sort_values(by=['F','M'],ascending=[False,False]))
  • 查看运行结果:

在这里插入图片描述

  • 说明:用到了size()函数,再调用loc函数选择查寻,显示的条件是一样的大于100的评分人数

(三)采用标准差进行分析,按照性别、电影标题进行分组,计算每组的标准差,并按照降序进行排序

  • 提供代码如下:
# 增加参数设定,显示全部的记录结果
pd.set_option('display.max_rows', None)
# 使用标准差进行分析
frame1 = frame.pivot_table('rating',index='title',columns='gender',aggfunc='mean')
print(frame['rating'].groupby([frame['gender'],frame['title']]).std().sort_values(ascending=False))


  • 查询运行结果:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值