예제 #1
0
    def BordaCountMerge(self):
        """
        return: a new DataFrame ranktable, with column=['title', 'rank']
        """
        if self.cnt==0:
            return pd.DataFrame(columns=['title', 'rate', 'rank'])
        ranktable = self.ranktable
        # ignore all the items that have nan as rank
        ranktable = ranktable.dropna()
        methods = ranktable.columns.drop('title')
        candidate_score = np.zeros((ranktable.shape[0], ranktable.shape[1]-1),
                                   np.int32)

        for c in xrange(methods.shape[0]):
            method = methods[c]
            tmprank = ranktable[['title', method]].sort_values(by=method)
            tmprank['_borda_score'] = pd.Series(
                self._get_borda_score(tmprank.loc[:,method].values),
                index=tmprank.index)
            tmprank.sort_index(inplace=True)
            candidate_score[:, c]=tmprank.loc[:,'_borda_score']
        borda_score = candidate_score.sum(axis=1)

        tmpitemlst = pd.DataFrame({'itemid': ranktable.loc[:,'title'],
                                   'index': range(ranktable.shape[0])},
                                  columns=['itemid', 'index'])
        ranker = BaseRank(tmpitemlst)
        rtn = ranker.rank(borda_score)
        return rtn
예제 #2
0
    def AverageRankMerge(self):
        if self.cnt==0:
            return pd.DataFrame(columns=['title', 'rate', 'rank'])
        ranktable = self.ranktable
        ranktable = ranktable.dropna()
        methods = ranktable.columns.drop('title')
        average_score = ranktable[methods].sum(axis=1).values

        tmpitemlst = pd.DataFrame({'itemid': ranktable.loc[:,'title'],
                                   'index': range(ranktable.shape[0])},
                                  columns=['itemid', 'index'])
        ranker = BaseRank(tmpitemlst, ascending=True)
        rtn = ranker.rank(average_score)
        return rtn
예제 #3
0
def same_rate_test():
    ranker = BaseRank(sample_item_list, ascending=True)
    ranktable = ranker.rank(sample_rate)
    ranktable = ranktable[["title", "rate", "rank"]]
    assert_array_equal(ranktable.iloc[:, 2].values, np.array([1, 1, 3], dtype=np.int32))