Python数据分析示例-电影评分数据

#MovieLens 1M数据集含有来自6000名用户对4000部电影的100万条评分数据。
#它分为三个表:评分、用户信息和电影信息。
#数据来源https://github.com/wesm/pydata-book/tree/2nd-edition/datasets/movielens

import pandas as pd

#使显示的行数少一些
pd.options.display.max_rows=10
#尽量多地显示列
pd.options.display.max_columns=999

#读取.dat文件
unames=['user_id','gender','age','occupation','zip']
users=pd.read_table('C:\\Users\\Xu\\Desktop\\users.dat',sep='::',header=None,names=unames)

rnames=['user_id','movie_id','rating','timestamp']
ratings=pd.read_table('C:\\Users\\Xu\\Desktop\\ratings.dat',sep='::',header=None,names=rnames)

mnames=['movie_id','title','genres']
movies=pd.read_table('C:\\Users\\Xu\\Desktop\\movies.dat',sep='::',header=None,names=mnames)


#验证数据加载是否成功
print(users)
print('=====================================================')
print(ratings)
print('=====================================================')
print(movies)
print('=====================================================')

#合并ratings,users,然后合并movies
data=pd.merge(pd.merge(ratings,users),movies)
print(data)
print('=====================================================')

#查看data第一组数据
print(data.iloc[0])
print('=====================================================')

#按性别计算每部电影平均得分
mean_ratings=data.pivot_table('rating',index='title',columns='gender',aggfunc='mean')
print(mean_ratings[:5])
print('=====================================================')

#过滤掉评分数据不足250条的电影
#1.首先对title分组
ratings_by_title=data.groupby('title').size()
print(ratings_by_title[:10])
print('=====================================================')
#2.找出评分数据大于等于250的电影
active_titles=ratings_by_title.index[ratings_by_title>=250]
print(active_titles)
print('=====================================================')
#查看mean_ratings评分数据大于250条的电影
mean_ratings=mean_ratings.loc[active_titles]
print(mean_ratings)
print('=====================================================')

#了解女性观众最喜欢的电影,对F列降序排列
top_female_ratings=mean_ratings.sort_values(by='F',ascending=False)
print(top_female_ratings[:10])
print('=====================================================')

#找出男性和女性观众分歧最大的电影
#给mean_ratings加上一个用于存放平均得分之差的列
mean_ratings['diff']=mean_ratings['M']-mean_ratings['F']
#对diff列升序排列,可得到分歧最大且女性观众更喜欢的电影
sorted_by_diff=mean_ratings.sort_values(by='diff')
print(sorted_by_diff[:10])
print('=====================================================')
#对排序结果反序并取出前10行,得到的则是男性观众更喜欢的电影
print(sorted_by_diff[::-1][:10])
print('=====================================================')

#找出分歧最大的电影(不考虑性别因素),可以计算得分数据的标准差,降序排列
rating_std_by_title=data.groupby('title')['rating'].std()
rating_std_by_title=rating_std_by_title.loc[active_titles]
print(rating_std_by_title.sort_values(ascending=False)[:10])


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容