【1】从https://grouplens.org/datasets/movielens/上下载数据集,包含6000用户,4000多电影的100万条数据
【读数据】
import pandas as pd import numpy as np users_Name=['user_id','gender','age','work','zip'] ratings_Name=['user_id','movies_id','ratings','timeStamp'] movie_Name=['movie_id','title','calss'] users=pd.read_table('ml-1m/users.dat',sep='::',header=None,names=users_Name) ratings=pd.read_table('ml-1m/ratings.dat',sep='::',header=None,names=ratings_Name) movies=pd.read_table('ml-1m/movies.dat',sep='::',header=None,names=movie_Name) print('用户表记录数:',len(users),'评分表记录数:',len(ratings),'电影表记录数:',len(movies)) print('**********用户表前五条记录**********') print(users.head(5)) print('**********评分表前五条记录**********') print(ratings.head(5)) print('********电影表前五条记录************') print(movies.head(5))
【只需要ratings数据,dataFrame转换成字典,字典的值为产品列表】
#先转成array
d1=np.array(ratings[['user_id','movies_id']]) #再转成列表 listdata=d1.tolist() data={} for i in range(len(listdata)): #获取列表中的第一个元素 用户Id userid=listdata[i][0] movieid=listdata[i][1] #判断用户id是否存在 if userid not in data.keys(): #设置字典值为列表,允许有重复 # 如果没重复,可以写为data.setdefault(userid,{})[movieid]=1 # data.setdefault(userid,[]).append(movieid) data.setdefault(userid, []).append(movieid) else: data[userid].append(movieid) # for user,movie in data.items(): # print('用户ID:',user,' 产品列表:',movie,'\n') # with open('data.txt', 'wb') as f: # pickle.dump(data,f) print('done')
【划分训练集和测试集】
两种方法见:http://mp.csdn.net/postedit/79582513