在Movielens 1M数据集中共三个表:评分、用户信息、电影信息,读取数据后将数据加载到一个 pandas DataFrame中
import pandas as pd
path=r'D:\pydata-book-2nd-edition\datasets\movielens\users.dat'
user_column=['user_id','gender','age','occupation','zip']
user=pd.read_table(path,sep='::',header=None,names=user_column)#sep指的是分隔符为‘::’
path1=r'D:\pydata-book-2nd-edition\datasets\movielens\ratings.dat'
rating_column=['user_id','movie_id','rating','timestamp']
rating=pd.read_table(path1,sep='::',header=None,names=rating_column)
path2=r'D:\pydata-book-2nd-edition\datasets\movielens\movies.dat'
movie_column=['movie_id','title','genres']
movies=pd.read_table(path2,sep='::',header=None,names=movie_column,encoding='ISO-88
(1)考察pd.merge()的用法
data1=pd.merge(user,rating)#user,rating合并,自动识别相同列,笛卡尔乘积式合并,user中user_id=1,rating中user_id=3000,则合并表有1×3000个user_id
##默认inner 不匹配的直接舍弃
data1
data=pd.merge(data1,movies)
(2)pivot_table用法
#按照性别分级的电影平均得分
meaning_ratings=data.pivot_table('rating',index='title',columns='gender',aggfunc='mean')
#为排除极端情况,少于250个电影评分的数据要删除
#先对电影评分数量进行排序得到一个Series
rating_by_title=data.groupby('title').size()
#获取满足条件的
active_titles=rating_by_title.index[rating_by_title>=250]#对值进行筛选
meaning_ratings=meaning_rating.loc[active_titles]
(3)根据性别进行排序
#获取女性观众的top电影,按照F列进行排列
top_female_ratings=meaning_ratings.sort_values(by='F',ascending=False)
(4)两列之差
mean_ratings['diff']=mean_ratings['M']-mean_ratings['F']
sort_by_diff=mean_ratings.sort_values(by='diff')
(5)标准差或者方差的使用
#根据标题分组获得评分异议最大的电影
rating_std_by_title=data.groupby('title')['rating'].std()
rating_std_by_title=rating_std_by_title.loc[active_titles]
rating_std_by_title.sort_values(ascending=False)[:10]
总结:这一节收获最大的是pd.merge()的使用,排序和分组计数是对上一节的回顾和复习。
网友评论