Beispiel #1
0
    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
Beispiel #2
0
    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]
Beispiel #3
0
    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]
Beispiel #4
0
    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 []
Beispiel #5
0
    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]
Beispiel #6
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()
Beispiel #7
0
    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]
Beispiel #8
0
    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])