Skip to content

Instantly share code, notes, and snippets.

@rrobby86
Created February 23, 2022 11:43
Show Gist options
  • Select an option

  • Save rrobby86/7d3722dc3de99d212ebd36dfcb9fa7da to your computer and use it in GitHub Desktop.

Select an option

Save rrobby86/7d3722dc3de99d212ebd36dfcb9fa7da to your computer and use it in GitHub Desktop.
Soluzioni Lab DIA: Recommendation con Python senza librerie
# ESERCIZIO 1
# 1a
with open("items.csv", "r") as f:
items = {int(iid): name for iid, name in csv.reader(f, delimiter=";")}
# 1b
len(items)
# 1c
items[2669]
# ESERCIZIO 2
# 2a
len(purchases)
# 2b
len(purchases) / len(users)
# ESERCIZIO 3
# 3a
purchases_by_item = {}
for uid, iid in purchases:
purchases_by_item.setdefault(iid, set()).add(uid)
# 3b
max(map(len, purchases_by_item.values()))
# 3b
min(map(len, purchases_by_item.values()))
# ESERCIZIO 4
# 4
def user_similarity(uid1, uid2):
"""Count products purchased by both given users."""
return len(purchases_by_user[uid1] & purchases_by_user[uid2])
# ESERCIZIO 5
# 5
def interest(uid, iid):
"""Estimate the interest of given user for given product."""
return sum(
user_similarities[(uid, ouid)]
for ouid in purchases_by_item[iid]
if uid != ouid
)
# ESERCIZIO 6
# 6
max(
interest_value
for user_interests in interests_by_user.values()
for interest_value in user_interests.values()
)
# ESERCIZIO 7
# 7a
suggestions_for_user_84 = set(iid for iid, score in sorted_interests_of_user_84[:N])
# 7b
def suggest(uid):
"""Recommend N products to given user."""
interests = interests_by_user[uid].items()
sorted_interests = sorted(interests, key=lambda x: x[1], reverse=True)
return set(iid for iid, score in sorted_interests[:N])
# ESERCIZIO 8
# 8a
new_purchases_by_user = {}
for uid, iid in new_purchases:
new_purchases_by_user.setdefault(uid, set()).add(iid)
# 8b
max(map(len, new_purchases_by_user.values()))
# 8b
sum(map(len, new_purchases_by_user.values())) / len(users)
# SELEZIONE CASUALE
def suggest_random(uid):
unpurchased_iids = list(interests_by_user[uid].keys())
suggested_iids = random.sample(unpurchased_iids, N)
return set(suggested_iids)
random_suggestions_by_user = {uid: suggest_random(uid) for uid in users.keys()}
randomly_satisfied_users = {uid for uid in users.keys()
if random_suggestions_by_user[uid] & new_purchases_by_user.get(uid, set())}
len(randomly_satisfied_users) / len(users)
results = []
for n in range(1000):
random.seed(n)
random_suggestions_by_user = {uid: suggest_random(uid) for uid in users.keys()}
randomly_satisfied_users = {uid for uid in users.keys()
if random_suggestions_by_user[uid] & new_purchases_by_user.get(uid, set())}
results.append(len(randomly_satisfied_users) / len(users))
sum(results) / len(results)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment