def compare_items_rank(items_pop1, items_pop2, topk=1000):
    arr1 = []
    arr2 = []
    rankdiff = []
    rank = []
    arr1 = sorted(items_pop1.iteritems(), key=operator.itemgetter(1), reverse=True)
    arr2 = sorted(items_pop2.iteritems(), key=operator.itemgetter(1), reverse=True)
    rankdict1 = {}
    rankdict2 = {}
    i = 1
    for k, v in arr1:
        rankdict1[k] = i
        i += 1
    i = 1
    for k, v in arr2:
        rankdict2[k] = i
        i += 1
    count = 0
    t1 = []
    t2 = []
    for k, v in arr1[:topk]:
        if k in rankdict2:
            rankdiff.append(abs(rankdict1[k] - rankdict2[k]))  # /float(rankdict1[k]))
            rank.append(rankdict1[k])
            t1.append(rankdict1[k])
            t2.append(rankdict2[k])
            if rankdict2[k] > topk * 2:
                count += 1
        else:
            print "This rank is not even listed in top", topk, "loved artists", rankdict1[k]
    print count
    plotter.plotLinesXY(t1, t2, "listen", "love", ylim_val=[0, 5000])
    return max(rankdiff), np.mean(rankdiff), np.median(rankdiff), min(rankdiff)
 def plot_early_late_adoption(self, interact_type):
     num_interacts = self.find_early_late_adopters(interact_type)
     prev_users = []; freq=[]
     for k,v in sorted(num_interacts.iteritems(), key=operator.itemgetter(0)):
         prev_users.append(k)
         freq.append(v)
     plotter.plotLinesXY(prev_users, freq, labelx="Fraction of users who have interacted before with an item", 
             labely="Number of interactions", logyscale=True)
def temporal(ta):
    x = ta.create_interactions_stream(interact_type)
    ta.plot_early_late_adoption(interact_type)

    num_friends = ta.count_friends_before_interaction(0)
    prev_users = []; freq=[]
    for k,v in num_friends.iteritems():
        prev_users.append(k)
        freq.append(v)
    plotter.plotLinesXY(prev_users, freq, labelx="Number of friends who have interacted before with an item", 
            labely="Number of interactions", xlim_val=(0,20))
 def plot_early_late_adoption(self, interact_type):
     num_interacts = self.find_early_late_adopters(interact_type)
     prev_users = []
     freq = []
     for k, v in sorted(num_interacts.iteritems(),
                        key=operator.itemgetter(0)):
         prev_users.append(k)
         freq.append(v)
     plotter.plotLinesXY(
         prev_users,
         freq,
         labelx="Fraction of users who have interacted before with an item",
         labely="Number of interactions",
         logyscale=True)
Esempio n. 5
0
def temporal(ta):
    x = ta.create_interactions_stream(interact_type)
    ta.plot_early_late_adoption(interact_type)

    num_friends = ta.count_friends_before_interaction(0)
    prev_users = []
    freq = []
    for k, v in num_friends.iteritems():
        prev_users.append(k)
        freq.append(v)
    plotter.plotLinesXY(
        prev_users,
        freq,
        labelx="Number of friends who have interacted before with an item",
        labely="Number of interactions",
        xlim_val=(0, 20))
def compare_items_rank(items_pop1, items_pop2, topk=1000):
    arr1 = []
    arr2 = []
    rankdiff = []
    rank = []
    arr1 = sorted(items_pop1.iteritems(),
                  key=operator.itemgetter(1),
                  reverse=True)
    arr2 = sorted(items_pop2.iteritems(),
                  key=operator.itemgetter(1),
                  reverse=True)
    rankdict1 = {}
    rankdict2 = {}
    i = 1
    for k, v in arr1:
        rankdict1[k] = i
        i += 1
    i = 1
    for k, v in arr2:
        rankdict2[k] = i
        i += 1
    count = 0
    t1 = []
    t2 = []
    for k, v in arr1[:topk]:
        if k in rankdict2:
            rankdiff.append(abs(rankdict1[k] -
                                rankdict2[k]))  #/float(rankdict1[k]))
            rank.append(rankdict1[k])
            t1.append(rankdict1[k])
            t2.append(rankdict2[k])
            if rankdict2[k] > topk * 2:
                count += 1
        else:
            print "This rank is not even listed in top", topk, "loved artists", rankdict1[
                k]
    print count
    plotter.plotLinesXY(t1, t2, "listen", "love", ylim_val=[0, 5000])
    return max(rankdiff), np.mean(rankdiff), np.median(rankdiff), min(rankdiff)
                     labely="Frequency of Users",
                     xlim_val=[0, 3])
    listen_dict = {}
    for val1, val2 in promisc:
        listen_dict[val1] = listen_dict.get(val1, [])
        listen_dict[val1].append(val2)

    mean_promisc = []
    listen_values = []
    for key, val_arr in listen_dict.iteritems():
        listen_values.append(key)
        mean_promisc.append(np.mean(val_arr))
    plotter.plotLinesXY(listen_values,
                        mean_promisc,
                        labelx="Number of listen interactions",
                        labely="Ratio of love/listen interactions",
                        display=True,
                        logxscale=False,
                        logyscale=False)

    items_pop_listen = na.get_items_popularity2(
        interact_type=na.netdata.interact_types_dict["listen"],
        count_duplicates=True)
    items_pop_love = na.get_items_popularity2(
        interact_type=na.netdata.interact_types_dict["love"],
        count_duplicates=True)
    plotter.plotHist(items_pop_listen.values(),
                     labelx="Total number of Listens for an item",
                     labely="Frequency")
    plotter.plotHist(items_pop_love.values(),
                     labelx="Total number of Loves for an item",
    )
    listen_dict = {}
    for val1, val2 in promisc:
        listen_dict[val1] = listen_dict.get(val1, [])
        listen_dict[val1].append(val2)

    mean_promisc = []
    listen_values = []
    for key, val_arr in listen_dict.iteritems():
        listen_values.append(key)
        mean_promisc.append(np.mean(val_arr))
    plotter.plotLinesXY(
        listen_values,
        mean_promisc,
        labelx="Number of listen interactions",
        labely="Ratio of love/listen interactions",
        display=True,
        logxscale=False,
        logyscale=False,
    )

    items_pop_listen = na.get_items_popularity2(
        interact_type=na.netdata.interact_types_dict["listen"], count_duplicates=True
    )
    items_pop_love = na.get_items_popularity2(
        interact_type=na.netdata.interact_types_dict["love"], count_duplicates=True
    )
    plotter.plotHist(items_pop_listen.values(), labelx="Total number of Listens for an item", labely="Frequency")
    plotter.plotHist(items_pop_love.values(), labelx="Total number of Loves for an item", labely="Frequency")
    sorted_items_listen = sorted(items_pop_listen.iteritems(), key=operator.itemgetter(1), reverse=True)
    sorted_items_love = sorted(items_pop_love.iteritems(), key=operator.itemgetter(1), reverse=True)