'Returns
self:
Build the data model'

def build_model(self):

    self._user_ids = np.asanyarray(self.dataset.keys())
    self._user_ids.sort()
    self._item_ids = []
    for items in self.dataset.itervalues():
        self._item_ids.extend(items.keys())
    self._item_ids = np.unique(np.array(self._item_ids))
    self._item_ids.sort()
    self.max_pref = (- np.inf)
    self.min_pref = np.inf
    logger.info(('creating    matrix    for    %d    users    and    %d    items' % (self._user_ids.size, self._item_ids.size)))
    self.index = np.empty(shape=(self._user_ids.size, self._item_ids.size))
    for (userno, user_id) in enumerate(self._user_ids):
        if ((userno % 2) == 0):
            logger.debug(('PROGRESS:    at    user_id    #%i/%i' % (userno, self._user_ids.size)))
        for (itemno, item_id) in enumerate(self._item_ids):
            r = self.dataset[user_id].get(item_id, np.NaN)
            self.index[(userno, itemno)] = r
    if self.index.size:
        self.max_pref = np.nanmax(self.index)
        self.min_pref = np.nanmin(self.index)
