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])


你可能感兴趣的:(Python数据分析示例-电影评分数据)