Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import math
- import itertools
- history_data_file = open("history.txt", "r")
- queries_data_file = open("queries.txt", "r")
- history_data = [[int(x) for x in line.split()] for line in history_data_file]
- queries_data = [[int(x) for x in line.split()] for line in queries_data_file]
- custNum = history_data[0][0]
- itemNum = history_data[0][1]
- transactions = history_data[0][2]
- def calculate_vector(data, vectorList): #works as intended
- count = 0
- for x in data[1:]:
- if vectorList[x[1]-1][x[0]-1] != 1:
- vectorList[x[1]-1][x[0]-1] = 1
- count+=1
- return vectorList, count
- def vector_angle(x, y):
- norm_x = np.linalg.norm(x)
- norm_y = np.linalg.norm(y)
- cos_theta = np.dot(x, y) / (norm_x * norm_y)
- theta = math.degrees(math.acos(cos_theta))
- return theta
- def averageAngle(angles):
- total =0
- for x in angles:
- total+=x
- total = total /len(angles)
- return total
- def calc_average_angle(list_vec):
- myList =[]
- myAverage=[]
- myAngles=[[0]*custNum for x in [0]*itemNum]
- for x in list_vec:
- for y in list_vec:
- if x!=y:
- myAngles[list_vec.index(x)][list_vec.index(y)] = vector_angle(np.array(x), np.array(y))
- if (x, y) not in myList:
- myList.append([x, y])
- if x!=y:
- myAverage.append(vector_angle(np.array(x), np.array(y)))
- return myAverage, myAngles
- def recommendation(query, positive_entries, average_angle, all_angles):
- print("Positive entries: " + str(positive_entries))
- print("Average angle: " + str(round(average_angle, 2)))
- valid_nums =set(x for x in range(1, itemNum+1))
- for i in query:
- print("Shopping cart: " + str(i).strip('[]').replace(',',''))
- item = {'item': [], 'match': [], 'angle': []}
- for j in i:
- item['item'].append(j)
- min_angle =1000
- count =0
- for x in all_angles[j-1]:
- if x!=0 and x<min_angle:
- min_angle=x
- count = all_angles[j-1].index(x)
- if count in item['item']:
- min_angle = 1000
- item['match'].append(count+1)
- item['angle'].append(min_angle)
- print(item)
- """item_angles = sorted(all_angles[j-1])
- item['angle'].append(item_angles[1])
- min_angle = item_angles[1]
- print(min_angle)
- print(item_angles)"""
- #may need to rewrite vector list whenever i need it - changes when passed to
- vector_list = [[0]*custNum for x in [0]*itemNum]
- list_vec, positive_entries = calculate_vector(history_data, vector_list)
- #print(np.mean(calc_average_angle(list_vec))) #calculates the mean of the angles in list
- print(queries_data)
- average_angle, all_angles = (calc_average_angle(list_vec))
- average_angle = np.mean(average_angle)
- print(positive_entries)
- print(all_angles)
- recommendation(queries_data, positive_entries, average_angle, all_angles)
- #This is how you can calculate the average angle
- """def calc_average_angle(list_vec):
- myList =[]
- myArray=[]
- for x in list_vec:
- for y in list_vec:
- if (x, y) not in myList:
- myList.append([x, y])
- if x!=y:
- myArray.append(vector_angle(np.array(x), np.array(y)))
- return myArray"""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement