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)
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)