def set_preference(self, user_id, item_id, value): ''' Returns -------- self Sets a particular preference (item plus rating) for a user. ''' if user_id not in self.prefsForUsers: raise UserNotFoundError('user_id not found') if item_id not in self.prefsForItems: raise ItemNotFoundError('item_id not found') self.prefsForUsers[user_id][item_id] = value
def remove_preference(self, user_id, item_id): ''' Returns -------- self Removes a particular preference for a user. ''' if user_id not in self.prefsForUsers: raise UserNotFoundError('user_id not found') if item_id not in self.prefsForItems: raise ItemNotFoundError('item_id not found') userPrefs = self.prefsForUsers[user_id] if item_id in userPrefs: del userPrefs[item_id]
def preferences_for_item(self, item_id, order_by_id=True): ''' Returns ------- preferences: numpy array of shape [(item_id,preference)] Return all existing Preferences expressed for that item, ''' item_id_loc = np.where(self._item_ids == item_id) if not item_id_loc[0].size: #item_id not found raise ItemNotFoundError('Item not found') preferences = self.index[:, item_id_loc] preferences = preferences.flatten() return self._user_ids[preferences]
def preferences_for_item(self, item_id, order_by_id=True): ''' Returns ------- preferences: list of shape [(item_id,preference)] Return all existing Preferences expressed for that item, ''' if item_id not in self.prefsForItems: raise ItemNotFoundError('item_id not found') if order_by_id: return sorted(self.prefsForItems[item_id] ) if item_id in self.prefsForItems else [] else: return sorted( self.prefsForItems[item_id], key=itemgetter(1), reverse=True) if item_id in self.prefsForItems else []
def preference_value(self, user_id, item_id): ''' Returns ------- preference: float Retrieves the preference value for a single user and item. ''' item_id_loc = np.where(self._item_ids == item_id) user_id_loc = np.where(self._user_ids == user_id) if not user_id_loc[0].size: raise UserNotFoundError('user_id in the model not found') if not item_id_loc[0].size: raise ItemNotFoundError('item_id in the model not found') return self.index[user_id_loc, item_id_loc].flatten()[0]
def remove_preference(self, user_id, item_id): ''' Returns -------- self Removes a particular preference for a user. ''' user_id_loc = np.where(self._user_ids == user_id) item_id_loc = np.where(self._item_ids == item_id) if not user_id_loc[0].size: raise UserNotFoundError('user_id in the model not found') if not item_id_loc[0].size: raise ItemNotFoundError('item_id in the model not found') self.dataset[user_id].remove(item_id) self.build_model()
def preference_value(self, user_id, item_id): ''' Returns ------- preference: float Retrieves the preference value for a single user and item. ''' if user_id not in self.prefsForUsers: raise UserNotFoundError('user_id not found') if item_id not in self.prefsForItems: raise ItemNotFoundError('item_id not found') userPrefs = self.prefsForUsers[user_id] if item_id not in userPrefs: return np.nan return userPrefs[item_id]
def preferences_for_item(self, item_id, order_by_id=True): ''' Returns ------- preferences: numpy array of shape [(item_id,preference)] Return all existing Preferences expressed for that item, ''' item_id_loc = np.where(self._item_ids == item_id) if not item_id_loc[0].size: #item_id not found raise ItemNotFoundError('Item not found') preferences = self.index[:, item_id_loc] #think in a way to return as numpy array and how to remove the nan values efficiently. data = zip(self._user_ids, preferences.flatten()) if order_by_id: return [(user_id, preference) for user_id, preference in data \ if not np.isnan(preference)] else: return sorted([(user_id, preference) for user_id, preference in data \ if not np.isnan(preference)], key=lambda user: - user[1])