没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
10页
数据分析小实例MovieLens 1M数据集测量评价分歧美国1880~2010年婴儿名字分析名字趋势计量命名多样性的增加“最后一个字母”革命男孩的名字变成女孩的名字(以及反向)2012年美国联邦选举委员会数据库按职业和雇主的捐献统计捐赠金额分桶按州进行捐赠统计 小实例内容来自《利用python进行数据分析》。 本文中可能使用的数据集来自:《利用python进行数据分析》数据集。 MovieLens 1M数据集 由GroupLens实验室从MoviesLens收集,内容是20世纪90年代末带21世纪初的电影评分数据。这些数据包含电影的评分、电影的元数据(流派和年份)以及观众数据(年龄、邮编、性别
资源详情
资源评论
资源推荐
几个数据分析的小实例(《使用几个数据分析的小实例(《使用python进行数据分析》)进行数据分析》)
数据分析小实例数据分析小实例MovieLens 1M数据集测量评价分歧美国1880~2010年婴儿名字分析名字趋势计量命名多样性的增加“最后一个字母”革命男孩的名字变成女孩的名字(以及
反向)2012年美国联邦选举委员会数据库按职业和雇主的捐献统计捐赠金额分桶按州进行捐赠统计
小实例内容来自《利用python进行数据分析》。
本文中可能使用的数据集来自:《利用python进行数据分析》数据集。
MovieLens 1M数据集数据集
由GroupLens实验室从MoviesLens收集,内容是20世纪90年代末带21世纪初的电影评分数据。这些数据包含电影的评分、电影的元数据(流派和年份)以及观众数据
(年龄、邮编、性别、职业)。
首先我们可以使用pandas.read_table函数来将数据以DataFrame形式读入(文件读取教程):
import pandas as pd
unames = ["user_id","gender","age","occupation","zip"] users = pd.read_csv("../pydata-book-2nd-
edition/datasets/movielens/users.dat",sep="::",header=None,names=unames)
rnames = ["user_id","movie_id","rating","timestamp"] ratings = pd.read_csv("../pydata-book-2nd-
edition/datasets/movielens/ratings.dat",sep="::",header=None,names=rnames)
mnames = ["movie_id","title","genres"] movies = pd.read_csv("../pydata-book-2nd-edition/datasets/movielens/movies.dat",sep="::",header=None,names=mnames)
print(users.head())
# user_id gender age occupation zip
# 0 1 F 1 10 48067
# 1 2 M 56 16 70072
# 2 3 M 25 15 55117
# 3 4 M 45 7 02460
# 4 5 M 25 20 55455
print(ratings.head())
# user_id movie_id rating timestamp
# 0 1 1193 5 978300760
# 1 1 661 3 978302109
# 2 1 914 3 978301968
# 3 1 3408 4 978300275
# 4 1 2355 5 978824291
print(movies.head())
# movie_id title genres
# 0 1 Toy Story (1995) Animation|Children's|Comedy
# 1 2 Jumanji (1995) Adventure|Children's|Fantasy
# 2 3 Grumpier Old Men (1995) Comedy|Romance
# 3 4 Waiting to Exhale (1995) Comedy|Drama
# 4 5 Father of the Bride Part II (1995) Comedy
为了方便之后的数据处理,我们需要将3个DataFrame合并成为1个DataFrame(DataFrame的合并教程)。观察到users和ratings都有user_id这一项,我们可以将其作为
合并键,来进行合并,之后合并的数据和movies都有movies_id这一项,之后再以此作为键进行合并:
data = pd.merge(pd.merge(ratings,users),movies)
print(data.head())
# user_id movie_id ... title genres
# 0 1 1193 ... One Flew Over the Cuckoo's Nest (1975) Drama
# 1 2 1193 ... One Flew Over the Cuckoo's Nest (1975) Drama
# 2 12 1193 ... One Flew Over the Cuckoo's Nest (1975) Drama
# 3 15 1193 ... One Flew Over the Cuckoo's Nest (1975) Drama
# 4 17 1193 ... One Flew Over the Cuckoo's Nest (1975) Drama
print(data.iloc[0])
# user_id 1
# movie_id 1193
# rating 5
# timestamp 978300760
# gender F
# age 1
# occupation 10
# zip 48067
# title One Flew Over the Cuckoo's Nest (1975)
# genres Drama
# Name: 0, dtype: object
之后我们可以通过数据聚合的方式,来计算出男性和女性对每部电影的平均评分(数据聚合教程):
mean_data = data.groupby(["title","gender"])["rating"].mean()
print(mean_data.unstack().head())
# gender F M
# title
# $1,000,000 Duck (1971) 3.375000 2.761905
# 'Night Mother (1986) 3.388889 3.352941
# 'Til There Was You (1997) 2.675676 2.733333
# 'burbs, The (1989) 2.793478 2.962085
# ...And Justice for All (1979) 3.828571 3.689024
另外我们在数据分析的时候,往往会去掉一些样本不足的项,现在我们可以使用数据聚合的方式将评分数少于250的电影去掉:
ratings_by_title = data.groupby("title").size()
#获取每个分组的大小
print(ratings_by_title.head())
# title
# $1,000,000 Duck (1971) 37
# 'Night Mother (1986) 70
# 'Til There Was You (1997) 52
# 'burbs, The (1989) 303
# ...And Justice for All (1979) 199
# dtype: int64
active_titles = ratings_by_title.index[ratings_by_title >= 250] #删选出评分数大于250的索引
mean_data = mean_data.loc[active_titles] #通过索引选择行,得到筛选后的结果
print(mean_data.head())
# gender F M
# title
# 'burbs, The (1989) 2.793478 2.962085
# 10 Things I Hate About You (1999) 3.646552 3.311966
# 101 Dalmatians (1961) 3.791444 3.500000
# 101 Dalmatians (1996) 3.240000 2.911215
# 12 Angry Men (1957) 4.184397 4.328421
然后我们可以使用sort_values方法来得到女性最受欢迎的电影top10:
weixin_38625192
- 粉丝: 4
- 资源: 943
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0