亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

排名聚合:將本地子排名合并到全球排名

排名聚合:將本地子排名合并到全球排名

慕婉清6462132 2022-07-12 10:12:09
我有一個包含多個本地商店排名的數據集,我希望以編程方式將其聚合/組合成一個國家排名。我知道本地排名是按銷量排名,但我沒有給出銷量,所以必須使用相對排名來創建盡可能準確的全國排名。舉個簡短的例子,假設我們有 3 個本地排名列表,從最佳排名(第一)到最差排名(最后),它們代表可以相互重疊的不同地理邊界。ranking_1 = ['J','A','Z','B','C']ranking_2 = ['A','H','K','B']ranking_3 = ['Q','O','A','N','K']我們知道 J 或 Q 是排名最高的商店,因為它們分別在排名_1 和排名_3 中最高,并且它們出現在排名_2 最高的 A 之上。我們知道 O 是下一個,因為它在ranking_3 中高于 A。接下來是A,依此類推...如果我在紙上正確地做到了這一點,這個簡短示例的輸出將是:global_ranking = [('J',1.5),('Q',1.5),('O',3),('A',4),('H',6),('N',6),('Z',6),('K',8),('B',9),('C',10)]請注意,當我們沒有足夠的數據來確定兩個商店中哪個排名更高時,我們認為它是平局(即我們知道 J 或 Q 之一是排名最高的商店,但不知道哪個更高,所以我們把它們都放在1.5)。在實際數據集中,每個列表中有 100 多個 1000 多個項目。我很高興嘗試解決這個問題,并且很好奇是否有人有任何聰明的方法。
查看完整描述

2 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

修改的合并排序算法將在這里有所幫助。修改應考慮到無與倫比的商店,并通過構建您愿意視為平等的無與倫比的元素組(如 Q 和 J)



查看完整回答
反對 回復 2022-07-12
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

該方法旨在分析排名靠前的所有商店。如果它們在任何其他排名列表中的位置不低于第一位,則它們屬于該前級并被添加到“級別”列表中。接下來,將它們從領先者中刪除,并調整所有列表,以便有新的領先者。重復這個過程,直到沒有商店離開。


def rank_stores(rankings):

    """

    Rank stores with rankings by volume sales with over lap between lists. 

    :param rankings: list of rankings of stores also in lists.

    :return: Ordered list with sets of items at same rankings.

    """


    rank_global = []


    # Evaluate all stores in the number one postion, if they are not below 

    # number one somewhere else, then they belong at this level. 

    # Then remove them from the front of the list, and repeat. 

    while sum([len(x) for x in rankings]) > 0:

        tops = []


        # Find out which of the number one stores are not in a lower position 

        # somewhere else.

        for rank in rankings: 

            if not rank: 

                continue

            else:

                top = rank[0]

                add = True


            for rank_test in rankings:

                if not rank_test:

                    continue

                elif not rank_test[1:]:

                    continue

                elif top in rank_test[1:]:

                    add = False

                    break

                else:

                    continue

            if add: 

                tops.append(top)


        # Now add tops to total rankings list, 

        # then go through the rankings and pop the top if in tops. 

        rank_global.append(set(tops))



        # Remove the stores that just made it to the top.

        for rank in rankings: 

            if not rank:

                continue

            elif rank[0] in tops:

                rank.pop(0)

            else:

                continue


    return rank_global

對于提供的排名:


ranking_1 = ['J','A','Z','B','C']

ranking_2 = ['A','H','K','B']

ranking_3 = ['Q','O','A','N','K']

rankings = [ranking_1, ranking_2, ranking_3]

然后調用函數:


rank_stores(rankings)

結果是:


[{'J', 'Q'}, {'O'}, {'A'}, {'H', 'N', 'Z'}, {'K'}, {'B'}, {'C'}]

在某些情況下,可能沒有足夠的信息來確定明確的排名。試試這個順序。


['Z', 'A', 'B', 'J', 'K', 'F', 'L', 'E', 'W', 'X', 'Y', 'R', 'C']

我們可以得出以下排名:


a = ['Z', 'A', 'B', 'F', 'E', 'Y']

b = ['Z', 'J', 'K', 'L', 'X', 'R']

c = ['F', 'E', 'W', 'Y', 'C']

d = ['J', 'K', 'E', 'W', 'X']

e = ['K', 'F', 'W', 'R', 'C']

f = ['X', 'Y', 'R', 'C']

g = ['Z', 'F', 'W', 'X', 'Y', 'R', 'C']

h = ['Z', 'A', 'E', 'W', 'C']

i = ['L', 'E', 'Y', 'R', 'C']

j = ['L', 'E', 'W', 'R']

k = ['Z', 'B', 'K', 'L', 'W', 'Y', 'R']

rankings = [a, b, c, d, e, f, g, h, i, j, k]

調用函數:


rank_stores(rankings)

結果是:


[{'Z'},

 {'A', 'J'},

 {'B'},

 {'K'},

 {'F', 'L'},

 {'E'},

 {'W'},

 {'X'},

 {'Y'},

 {'R'},

 {'C'}]

在這種情況下,沒有足夠的信息來確定“J”相對于“A”和“B”的位置。只是它在“Z”和“K”之間的范圍內。


當在數百個排名和商店中相乘時,某些商店將無法按絕對數量正確排名。


查看完整回答
反對 回復 2022-07-12
  • 2 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號