J'essaie de construire une matrice de transition d'utilisateur de la chaîne de Markov à partir de zéro, mais je suis resté coincé dans les attributions de valeurs de dictionnaire. Ci-dessous, l'exemple de codeNombre de transitions pour les achats de produits utilisateur dans la vente au détail en ligne
## user purchase sequence seperated by '|' at different time intervals
## lets say in first purchase user bought 3 4 12 23 45 41 25 these products then 4 5 12 17 19 25 46 3 and so on
user_purchase = '3 4 12 23 45 41 25|4 5 12 17 19 25 46 3|39 12 3 23 50 24 35 13|42 34 17 19 46'
## I need to find the transition count from first purchase to second and so on
## e.g 3-1 is 0 , 3-2 is 0 , 3-3 is 0 , 3-4 is 1
## hence output should be {...,2:[(0,0),(0,0),.....], 3:[(0,1),(0,1),(0,1),(1,1), ...], 4:[...]} its a dictionary of list with tuples
### lets say its the total no of products ranging from 1 to 50 that user can buy
prod = range(1,51)
### initializing a dictionary of list with tuples
t = (0,0)
list1= []
for _ in range(len(prod)):
list1.append(t)
user_tran = {}
for p in prod:
user_tran[p]= list1
# def trans_matrix(prod_seq):
basket_seq = user_purchase.split('|')
iteration = len(basket_seq)
for j in range(iteration-1):
trans_from = basket_seq[j]
trans_to = basket_seq[j+1]
tfrom = map(int,trans_from.split(' '))
print tfrom
tto = map(int,trans_to.split(' '))
for item in tfrom:
### problem here is in each iteration the default value for all keys is updated from [(0,0),(0,0),....] to item_list
item_list = user_tran[item] ### seems problem here
for i in range(len(prod)):
if i+1 in tto:
temp = item_list[i]
x = list(temp)
x[0] = x[0] +1
x[1] = x[1] +1
item_list[i] = tuple(x)
else:
temp = item_list[i]
x = list(temp)
x[0] = x[0]
x[1] = x[1] + 1
item_list[i] = tuple(x)
user_tran[item] = item_list ### list updation should only be for item specified as key in user_tran but all keys are updated with same value
sortie désiréuser_tran [3] [1: 5]
Out [38]: [(0, 23), (15, 23), (7, 23) (7, 23)]
0 de transition de 3 à 1,2 en 3 séquences d'achats à un moment différent et produit trois étant présent dans la première séquence de trois achat. Mais il y a deux transition de 3-3
[(0,3), (0,3), (2,3), ... jusqu'à ce que le produit 50]
Pouvez-vous expliquer plus en quoi consiste votre dictionnaire de liste de tuples? –
ce que j'essaye de faire est, disons qu'il y a 5 produits dans un magasin et l'utilisateur achète 1,3,4 dans la première visite et 3,2,5 dans la prochaine donc la transition de la 1ère visite à la 2ème donnée par une matrice de probabilité . par exemple pour le produit 1 transitions possibles ici sont 1-1,1-2,1-3,1-4,1-5 et transitions réelles 1-3,1-2,1-5 donc sortie dict de la liste des tuples doit ressembler à {1: [(0,1), (1,1), (1,1), (0,1), (1,1)], 2: [...]} voici la liste des tuples premier tuple (0,1) signifie transition de 1-1, 0 implique 1-1 ne se produit pas et 1 transition d'indication du 1er au 2ème achat. –
Le problème ici est le je ne suis pas capable d'attribuer une valeur au dictionnaire sélectivement basé sur la clé chaque fois que j'essaye de mettre à jour la valeur de liste dans le dictionnaire spécifique à une clé toutes les clés sont mises à jour avec les mêmes valeurs. Je ne sais pas Si j'affecte incorrectement le dictionnaire de la liste 'user_tran'. –