【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