1. 程式人生 > >用MovieLens資料集做推薦(Python推薦系統二)

用MovieLens資料集做推薦(Python推薦系統二)

              思路:下載MovieLens的資料集,對資料集進行函式定義,定義各資料列的名稱,根據上一篇Python寫出簡單的推薦系統(一) 文中的recommendations.py 的使用者相似度進行推薦。

              下載MovieLens的地址:http://grouplens.org/datasets/movielens/ 

(選擇ml-100k.zip), 下載後的路徑可以是和recommendations.py相同,也可是任意Python下面的其他地方,後面會針對兩種情況做相關說明。

將下列Python 程式碼新增到之前recommendations.py 裡面:

def loadMovieLensTrain(filename='u1.base'):
    str1 ='./ml-100k/'     

    #載入資料
    prefs={}
    for line in open(str1+filename,'r'):
        (user,movieid,rating,ts)=line.split('\t')
        prefs.setdefault(user,{})
        prefs[user][movieid]=float(rating)
    return prefs

def loadMovieLensTest(filename='u1.test'):                      
    str1 ='./ml-100k/'

    #載入資料
    prefs={}
    for line in open(str1+filename,'r'):
        (user,movieid,rating,ts)=line.split('\t')
        prefs.setdefault(user,{})
        prefs[user][movieid]=float(rating)
    return prefs             

if __name__=="__main__":
    print ("""這個部分可以進行上面2個函式測試""")

    trainDict= loadMovieLensTrain()
    testDict = loadMovieLensTest()

    print (len(trainDict))
    print (len(testDict))
    print ("""測試通過""")

          這裡的str1=’./ml-100k/’   表明的是相對路徑,此時的ml-100資料夾必須是和recommendations.py 檔案一個路徑。如果不在一個路徑,因為執行的最終是recommendations.py檔案,所以用的是ml-100k 全路徑名,例如:

           str1:’E:/Python/ml-100k’

先執行進行了更新的recommendations.py 檔案,得到測試的結果:

>>>

這個部分可以進行上面2個函式測試

943

459

測試通過

表明函式式正確的,如果出現提示說’u1.base’ 或’u1.test’的格式不能讀取,則可用Notepad++ 修改格式。(具體見
Notepad++修改檔案編碼格式



檢視loadMovieLensTrain裡的列表

>>> import recommendations

>>> prefs =recommendations.loadMovieLensTrain()

>>> prefs['1']

返回所有對應的評分資料列表

對id號為1的使用者推薦三個物品:

>>>recommendations.getRecommendations(prefs,'1')[0:3]

[(5.000000000000001, '1293'), (5.0,'1653'), (5.0, '1599')]