基于pandas的电影评分差异分析
实验内容
数据来源
详细步骤
import pandas as pd
import numpy as np
unames = ['user id','age','gender','occupation','zip code']
users = pd.read_csv('ml-100k/u.user',sep ='|',names = unames) # sep定义的是每行数据间的分隔符
rnames = ['user id','item id','rating','timestamp']
ratings = pd.read_csv('ml-100k/u.data', sep = '\t',names = rnames)# names指的是每个表的列名
users_df = users.loc[:,['user id','gender']] # 做数据筛选,users中只使用'user id','gender'这两个属性
ratings_df = ratings.loc[:,['user id','rating']]
rating_df = pd.merge(users_df,ratings_df) # 把两个dataframe都有user id属性,通过merge函数连接起来
# print(rating_df)
# 按gender计算rating的标准差,先对gender进行分组,再对rating属性使用std方法
# 下面是两种计算标准差的方法,区别在于numpy的是有偏估计(使用的是1/n),而pandas的是无偏估计(使用的是1/n-1),更贴近于实际情况
# 1.
std1 = rating_df.groupby("gender").rating.std()
print("第一种计算std的方法")
print(std1)
# 2.
std2 = rating_df.groupby("gender").rating.apply(pd.Series.std)
print("第二种计算std的方法")
print(std2)
# 使用上述的标准差(std)确实证明了女性的评分差异比男性的更大,也说明了女性更主观,男性更逻辑
# 上述做法只是考虑了gender的分组,并没有考虑用户对所有电影打分之间的关系
# 下面采用先计算出用户的综合评分(评分均值),然后按照性别计算出标准差
df1 = rating_df.groupby(["user id", "gender"]).apply(np.mean)
std3 = df1.groupby('gender').rating.std()
print("第三种计算std的方法")
print(std3)
# 如果采用类似Excel的透视表功能(可以实现数据的动态排列和分类汇总),应当这么写,
std4 = pd.pivot_table(df1, values='rating', index='gender', aggfunc=pd.Series.std)
# 第一个参数df1是要透视的dataframe,values是设置要筛选的数据,index是分类依据(可以是多个,用[]),
# aggfunc用来设置聚合数据用的函数,默认是mean,可以是多个函数组合,还有一个参数是columns,设置列层次,对透视后的数据在列上分类
# 容易和values混淆,values设置的是行层次。
print("第四种计算std的方法")
print(std4)
# 下面是第四种方法的整理
print("下面是第四种方法的整理")
t = pd.pivot_table(rating_df, index=['user id', 'gender'], values='rating')
print(t.query("gender == ['F']"))
female = t.query("gender == ['F']")
print(pd.Series.std(female))
源代码和数据集
链接:https://pan.baidu.com/s/1_3jkR-Ob2gGkjh8XhuRWdg
提取码:jxf7
复制这段内容后打开百度网盘手机App,操作更方便哦
实验结果
通过计算标准差,评价男女在电影评分上的理性和感性差异,可见男性的标准差相比于女性更小,继而推断出男性的评分更加的理性
下面是四种不同的标准差计算结果截图
下面是第四种方法的女性标准差的计算过程整理