《利用Python进行数据分析》初阶例题分析-1:MoviesLens 1M数据集

文章目录

    • 题目描述
    • 源数据集
    • 数据分析

题目描述

GroupLens实验室提供了一些从MoviesLens用户那里收集的20世纪90年代末到21世纪初的电影评分数据的集合。浙西额数据提供了电影的评分、流派、年份和观众数据(年龄、邮编、性别、职业)。 MovisLens1M数据集包含6000个用户对4000部电影的100万个评分。数据分布在三个表格之中:分别包含评分、用户信息和电影信息。

测试环境:python3.7,jupyter notebook

源数据集

点此获得该系列1-4数据
提取码:if5a

数据分析

加载数据

import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import pandas as pd
unames = ["user_id", "gender", "age", "occupation", "zip"]
users = pd.read_table("datasets/movielens/users.dat", sep="::",
                      header=None, names=unames, engine="python")

rnames = ["user_id", "movie_id", "rating", "timestamp"]
ratings = pd.read_table("datasets/movielens/ratings.dat", sep="::",
                        header=None, names=rnames, engine="python")

mnames = ["movie_id", "title", "genres"]
movies = pd.read_table("datasets/movielens/movies.dat", sep="::",
                       header=None, names=mnames, engine="python")


users.head(5)
ratings.head(5)
movies.head(5)
ratings
users

在这里插入图片描述
通过merge函数将表格进行合并,而评分表中具有用户id和电影id,
所以通过该函数,我们可以根据id将用户和电影信息引入表中。
根据这个表我们可以知道,什么样的人给什么样电影评了多少分。

data = pd.merge(pd.merge(ratings, users), movies)
data
data.iloc[0]

在这里插入图片描述
pivot函数第一参数是值,即表格中间的数据,index是行,column是列,aggfunc是数据计算的方法。 而这个就是将行列进行分组,之后计算均值。 下面展示了前五个电影中,不同性别对于这些电影的评分的均值:

mean_ratings = data.pivot_table("rating", index="title",
                                columns="gender", aggfunc="mean")
mean_ratings.head(5)

在这里插入图片描述
展示了,评分数大于250的电影:

ratings_by_title = data.groupby("title").size()
ratings_by_title.head()
active_titles = ratings_by_title.index[ratings_by_title >= 250]
active_titles

在这里插入图片描述
下面展示了在评分数大于250的电影中,不同的性别对于电影的评价。

mean_ratings = mean_ratings.loc[active_titles]
mean_ratings

在这里插入图片描述
下面展示了最受女性欢迎的五个影片:

top_female_ratings = mean_ratings.sort_values("F", ascending=False)
top_female_ratings.head()

在这里插入图片描述
下面展示了男女喜爱度偏差较大的电影中,更受女性喜欢,而不受男性喜欢的电影。

mean_ratings["diff"] = mean_ratings["M"] - mean_ratings["F"]
sorted_by_diff = mean_ratings.sort_values("diff")
sorted_by_diff.head()

在这里插入图片描述
这个相反,为更受男性喜欢,而不受女性喜欢。

sorted_by_diff[::-1].head()

在这里插入图片描述
下面展示了电影评分的标准化数据

rating_std_by_title = data.groupby("title")["rating"].std()
rating_std_by_title = rating_std_by_title.loc[active_titles]
rating_std_by_title.head()

在这里插入图片描述
下面展示了电影评分最高的10个电影中的标准化后的评分。

rating_std_by_title.sort_values(ascending=False)[:10]

movies["genres"].head()
movies["genres"].head().str.split("|")
movies["genre"] = movies.pop("genres").str.split("|")
movies.head()

在这里插入图片描述
在这里插入图片描述
利用explode函数将电影的性质进行分行,即每个性质会有一行数据。

movies_exploded = movies.explode("genre")
movies_exploded[:10]

在这里插入图片描述
利用merge,根据id连接三个表。之后根据年龄和性质分组,计算每一组评分的平均数。展示前十组数据。 利用unstack将行转到列。这样就生成了一个表格。 下面展示了不同年龄段中,对于不同类别的电影的评分数据。

ratings_with_genre = pd.merge(pd.merge(movies_exploded, ratings), users)
ratings_with_genre.iloc[0]
genre_ratings = (ratings_with_genre.groupby(["genre", "age"])
                 ["rating"].mean()
                 .unstack("age"))
genre_ratings[:10]

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值