Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. import numpy as np
  2. import math
  3. import itertools
  4.  
  5. history_data_file = open("history.txt", "r")
  6. queries_data_file = open("queries.txt", "r")
  7.  
  8. history_data = [[int(x) for x in line.split()] for line in history_data_file]
  9. queries_data = [[int(x) for x in line.split()] for line in queries_data_file]
  10. custNum = history_data[0][0]
  11. itemNum = history_data[0][1]
  12. transactions = history_data[0][2]
  13.  
  14.  
  15. def calculate_vector(data, vectorList): #works as intended
  16. count = 0
  17. for x in data[1:]:
  18. if vectorList[x[1]-1][x[0]-1] != 1:
  19. vectorList[x[1]-1][x[0]-1] = 1
  20. count+=1
  21. return vectorList, count
  22.  
  23.  
  24. def vector_angle(x, y):
  25. norm_x = np.linalg.norm(x)
  26. norm_y = np.linalg.norm(y)
  27. cos_theta = np.dot(x, y) / (norm_x * norm_y)
  28. theta = math.degrees(math.acos(cos_theta))
  29. return theta
  30.  
  31.  
  32. def averageAngle(angles):
  33. total =0
  34. for x in angles:
  35. total+=x
  36. total = total /len(angles)
  37. return total
  38.  
  39.  
  40. def calc_average_angle(list_vec):
  41. myList =[]
  42. myAverage=[]
  43. myAngles=[[0]*custNum for x in [0]*itemNum]
  44.  
  45. for x in list_vec:
  46. for y in list_vec:
  47. if x!=y:
  48. myAngles[list_vec.index(x)][list_vec.index(y)] = vector_angle(np.array(x), np.array(y))
  49.  
  50. if (x, y) not in myList:
  51. myList.append([x, y])
  52. if x!=y:
  53. myAverage.append(vector_angle(np.array(x), np.array(y)))
  54. return myAverage, myAngles
  55.  
  56.  
  57. def recommendation(query, positive_entries, average_angle, all_angles):
  58. print("Positive entries: " + str(positive_entries))
  59. print("Average angle: " + str(round(average_angle, 2)))
  60.  
  61. valid_nums =set(x for x in range(1, itemNum+1))
  62.  
  63. for i in query:
  64. print("Shopping cart: " + str(i).strip('[]').replace(',',''))
  65. item = {'item': [], 'match': [], 'angle': []}
  66. for j in i:
  67. item['item'].append(j)
  68. min_angle =1000
  69. count =0
  70. for x in all_angles[j-1]:
  71. if x!=0 and x<min_angle:
  72. min_angle=x
  73. count = all_angles[j-1].index(x)
  74. if count in item['item']:
  75. min_angle = 1000
  76.  
  77. item['match'].append(count+1)
  78. item['angle'].append(min_angle)
  79.  
  80. print(item)
  81. """item_angles = sorted(all_angles[j-1])
  82. item['angle'].append(item_angles[1])
  83. min_angle = item_angles[1]
  84. print(min_angle)
  85. print(item_angles)"""
  86.  
  87.  
  88.  
  89.  
  90. #may need to rewrite vector list whenever i need it - changes when passed to
  91. vector_list = [[0]*custNum for x in [0]*itemNum]
  92.  
  93. list_vec, positive_entries = calculate_vector(history_data, vector_list)
  94.  
  95. #print(np.mean(calc_average_angle(list_vec))) #calculates the mean of the angles in list
  96. print(queries_data)
  97. average_angle, all_angles = (calc_average_angle(list_vec))
  98. average_angle = np.mean(average_angle)
  99. print(positive_entries)
  100. print(all_angles)
  101. recommendation(queries_data, positive_entries, average_angle, all_angles)
  102.  
  103. #This is how you can calculate the average angle
  104. """def calc_average_angle(list_vec):
  105. myList =[]
  106. myArray=[]
  107. for x in list_vec:
  108. for y in list_vec:
  109. if (x, y) not in myList:
  110. myList.append([x, y])
  111. if x!=y:
  112. myArray.append(vector_angle(np.array(x), np.array(y)))
  113. return myArray"""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement