python - 正确分组和聚合以避免随机效应问题
问题描述
我正在使用看起来像这样的 Movielens 100k 数据集(它包含有关电影的信息 - 流派和用户 - 性别、年龄等):
item_id title release_date video_release_date \
0 1 Toy Story (1995) 01-Jan-1995 NaN
1 4 Get Shorty (1995) 01-Jan-1995 NaN
Adventure Animation Childrens ... Thriller War Western user_id \
0 0 1 1 ... 0 0 0 308
1 0 0 0 ... 0 0 0 308
rating timestamp age gender occupation zip_code
0 4 887736532 60 M retired 95076
1 5 887737890 60 M retired 95076
我想比较每种电影类型的两种性别(男性和女性)的平均评分。然而,仅仅计算所有女性与所有男性用户的平均评分是不够的,因为男性用户比女性用户多得多。就此而言,我必须以某种方式解决我读到的称为随机效应模型的问题。
我正在考虑通过以某种方式正确分组或应用聚合来计算每个用户为该类型的每部电影给出的平均评分。
到目前为止的代码,但它没有正确捕获和解决问题:
males = data.query("gender == ['M']")
male_movie_genre = males.iloc[:, 6:24]
movie_genre_labels = ['Action', 'Adventure' , 'Animation' , 'Childrens' , 'Comedy' , 'Crime' , 'Documentary' , 'Drama' , 'Fantasy' , 'Film-Noir' , 'Horror' , 'Musical' , 'Mystery' , 'Romance' , 'Sci-Fi' , 'Thriller' , 'War' , 'Western']
males['genre'] = pd.Series(male_movie_genre[labels].columns[np.where(male_movie_genre[labels]!=0)[1]])
avg_rating_per_genre_male_users = males.groupby(['user_id', 'genre'])['rating'].mean().reset_index()
mean_rating_values_male_users = avg_rating_per_genre_male_users.groupby(['genre'])['rating'].mean()
或者有没有更好的方法来做到这一点在统计上是正确的?
非常感谢您!
解决方案
推荐阅读
- android - Android 是批处理 UI 操作还是重新绘制每个命令?
- python - 命名空间是在内存中创建的吗?
- python - 使用 CSV 文件在字典中创建嵌套字典并将值与其他字典进行比较
- delphi - 使用自定义样式时从未调用过表单销毁(OnDestroy)?XE7
- javascript - 单元测试事件处理程序是否一个接一个地调用promise(同步)
- postman - 如何为邮递员(表单数据)中的特定字段传递空数组?
- azure - 无法更改逻辑应用上的身份验证帐户
- google-bigquery - 数据流 SQL 嵌套 JSON 架构面临不明确的字段引用
- python - if *var* == *int*: var 是变量而 int 是数字的代码有什么问题?
- mysql - 无法在mysql的日期时间列中查询空值