2015-11-10 38 views
0

我正在推薦系統上工作,我試圖使用scikits.crab包來使用推薦系統中的基本算法。 但是,在每個教程中,在這些示例中,他們只是使用scikits自己的數據集,並且我沒有找到有關如何加載外部數據集的任何信息(例如,從我的計算機) 這是您在每個教程中看到的scikits的內容。螃蟹:如何使用scikits加載數據集

from scikits.crab import datsets 
movies=datsets.load_sample_movies() 
model=MatrixPreferenceDataModel(movies.data) 

然而,正如我所說,我需要從我的機器可以由scikits方法使用

回答

3

Here是蟹教程的相關部分加載datset。

在上面的例子中,您只使用模型的movies.data字段。 movies.data看起來如下:

>>> print movies.data 
{1: {1: 3.0, 2: 4.0, 3: 3.5, 4: 5.0, 5: 3.0}, 
2: {1: 3.0, 2: 4.0, 3: 2.0, 4: 3.0, 5: 3.0, 6: 2.0}, 
3: {2: 3.5, 3: 2.5, 4: 4.0, 5: 4.5, 6: 3.0}, 
4: {1: 2.5, 2: 3.5, 3: 2.5, 4: 3.5, 5: 3.0, 6: 3.0}, 
5: {2: 4.5, 3: 1.0, 4: 4.0}, 
6: {1: 3.0, 2: 3.5, 3: 3.5, 4: 5.0, 5: 3.0, 6: 1.5}, 
7: {1: 2.5, 2: 3.0, 4: 3.5, 5: 4.0}} 

這僅僅是一個字典,其中鍵是用戶和值是另一個(在此由1,2,3,4,5,6,和7表示)字典,其中關鍵是電影ID,值是評級。所以你只需要構造一個嵌套字典。

從源頭上,作者從加載.csv文件導入數據用下面的代碼:

def load_sample_movies(): 

    base_dir = join(dirname(__file__), 'data/') 

    #Read data 
    data_m = np.loadtxt(base_dir + 'sample_movies.csv', 
      delimiter=';', dtype=str) 
    item_ids = [] 
    user_ids = [] 
    data_songs = {} 
    for user_id, item_id, rating in data_m: 
     if user_id not in user_ids: 
      user_ids.append(user_id) 
     if item_id not in item_ids: 
      item_ids.append(item_id) 
     u_ix = user_ids.index(user_id) + 1 
     i_ix = item_ids.index(item_id) + 1 
     data_songs.setdefault(u_ix, {}) 
     data_songs[u_ix][i_ix] = float(rating) 

    data_t = [] 
    for no, item_id in enumerate(item_ids): 
     data_t.append((no + 1, item_id)) 
    data_titles = dict(data_t) 

    data_u = [] 
    for no, user_id in enumerate(user_ids): 
     data_u.append((no + 1, user_id)) 
    data_users = dict(data_u) 

    fdescr = open(dirname(__file__) + '/descr/sample_movies.rst') 

    return Bunch(data=data_songs, item_ids=data_titles, 
       user_ids=data_users, DESCR=fdescr.read()) 

而且.csv文件,該數據位於在形式:

Jack Matthews;Lady in the Water;3.0 
Jack Matthews;Snakes on a Planet;4.0 
Jack Matthews;You, Me and Dupree;3.5 
Jack Matthews;Superman Returns;5.0 
Jack Matthews;The Night Listener;3.0 
Mick LaSalle;Lady in the Water;3.0 
Mick LaSalle;Snakes on a Planet;4.0 
Mick LaSalle;Just My Luck;2.0 
Mick LaSalle;Superman Returns;3.0 
Mick LaSalle;You, Me and Dupree;2.0 
Mick LaSalle;The Night Listener;3.0 

因此,如果你想製作自己的數據集,你有兩個選擇。可以將它自己格式化爲推薦程序需要的字典格式,也可以根據導入的格式編寫一個方法,以便爲您進行格式化。

似乎並不像項目有一個通用的「從csv導入」的方法,我可以找到 - 我可能會錯過它,只能瀏覽它。

幸運的是,由於推薦人只需要字典,因此不需要額外的描述文件,只需正確格式化數據就足夠了。

+0

謝謝你馬特。你能告訴我什麼是sample_movies.rst是什麼?我試圖通過一些修改來運行此代碼,因爲它在修改之前無法編譯。但是,當我運行代碼時,它找不到sample_movies.rst文件。 – HimanAB

+0

這是一個元數據文件。 它只是列出了數據集由託比·西格倫 注 ----- 該數據集包括 稱爲編程集體智慧的書收集* n,其中(1-5)的n個用戶評分到n部電影。 – Matt