Guest User

Untitled

a guest
Dec 11th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1. # CS1300 Fall 2017
  2. # Author: Gerald Robinson
  3. # Recitation: Ganesh 123
  4. # Assignment 10
  5.  
  6.  
  7. #PART_1 functions here
  8. def read_books(file_name):
  9. try:
  10. file=open(file_name)
  11. if file =="":
  12. return []
  13. else:
  14. result=[]
  15. for line in file:
  16. temp = line.strip().split(',')
  17. author = temp[0]
  18. book = temp[1]
  19. list = [book, author]
  20. result.append(list)
  21. return result
  22. except:
  23. return None
  24.  
  25.  
  26. def read_users(file_name):
  27. try:
  28. file=open(file_name)
  29. if file == "":
  30. return {}
  31. else:
  32. mydict={}
  33. listofratings=[]
  34. for line in file:
  35. read = []
  36. line = line.strip().split()
  37. user=line[0]
  38. for i in range(1, len(line)):
  39. listofratings.append(line[i])
  40. read = [user, listofratings]
  41. mydict[read[0]]=list(map(int,line[1:]))
  42. return mydict
  43. except:
  44. return None
  45.  
  46. def calculate_average_rating(ratings_dict):
  47. ratings_list = ratings_dict.values()
  48. rateNumbers = len(ratings_list)
  49. numBooks = len(ratings_list)
  50.  
  51. avg_rates=[]
  52.  
  53. for i in range(numBooks):
  54. index = 0
  55. num = 0.0
  56. for listofratings in ratings_list:
  57. num=num+float(listofratings[i])
  58. if listofratings!=0:
  59. index = index+1.0
  60. if num != 0:
  61. avg=num/index
  62. avg_rates.append(avg)
  63.  
  64. return avg_rates
  65.  
  66. def lookup_average_rating(index, book_dict, avg_ratings_dict):
  67. books = book_dict[index]
  68. rate = "{0: .2f}".format(avg_ratings_dict[index])
  69. titles=books[0]
  70. authors=books[1]
  71. return "(%s) %s by %s"%(rating, titles, authors)
  72.  
  73.  
  74.  
  75.  
  76.  
  77. #PART_2 follow here
  78.  
  79.  
  80. class Recommender:
  81. #Constructor here
  82. def __init__(self, book_filename, ratings_filename):
  83. self.book_list = []
  84. self.user_dictionary = {}
  85. self.average_rating_list = []
  86. self.read_books(book_filename)
  87. self.read_users(ratings_filename)
  88. self.calculate_average_rating()
  89.  
  90.  
  91. def read_books(self, file_name):
  92. try:
  93. file=open(file_name)
  94. if file =="":
  95. return []
  96. else:
  97. for line in file:
  98. temp = line.strip().split(',')
  99. authors = temp[0]
  100. books = temp[1]
  101. list = [books, authors]
  102. self.book_list.append(list)
  103. return self.book_list
  104. except:
  105. return None
  106.  
  107. def read_users(self, file_name):
  108. try:
  109. file=open(file_name,'r')
  110. if file == "":
  111. return {}
  112. else:
  113. listofratings=[]
  114. for line in file:
  115. read = []
  116. line = line.strip().split()
  117. user=line[0]
  118. for i in range(1, len(line)):
  119. listofratings.append(line[i])
  120. read = [user, listofratings]
  121. self.user_dictionary[read[0]]=list(map(int,line[1:]))
  122. return self.user_dictionary
  123. except:
  124. return None
  125.  
  126.  
  127. def calculate_average_rating(self):
  128. ratings_list = self.user_dictionary.values()
  129. rateNumbers = len(ratings_list)
  130. numBooks = len(ratings_list)
  131. for i in range(numBooks):
  132. index = 0
  133. num = 0.0
  134. for listofratings in ratings_list:
  135. num=num+float(listofratings[i])
  136. if listofratings!=0:
  137. index = index+1.0
  138. if num != 0:
  139. avg=num/index
  140. self.average_rating_list.append(avg)
  141. return self.average_rating_list
  142.  
  143. def lookup_average_rating(self, book_index):
  144. books = self.book_list[book_index]
  145. rate = "{0: .2f}".format(self.average_rating_list[book_index])
  146. titles=books[0]
  147. authors=books[1]
  148. average_rating_string="(%s) %s by %s"%(rating, titles, authors)
  149. return average_rating_string
  150. self.average_rating_string = "(%s) %s by %s"%(rating, titles, authors)
  151. return self.average_rating_string
  152.  
  153. def calc_similarity(self, user1, user2):
  154. similar=0
  155. for i in range(1,len(self.user_dictionary[user1])):
  156. similar=similar+(self.user_dictionary[user1[i]]*self.user_dictionary[user2][i])
  157. return similar
  158.  
  159. def get_most_similar_user(self, current_user_id):
  160. highScore=0
  161. best_user_match_id=""
  162. for i in range(1, len(self.user_dictionary)):
  163. if current_user_id == self.user_dictionary.keys()[i]:
  164. continue
  165. similarity=self.calc_similarity(current_user_id, self.user_dictionary.keys()[i])
  166. if similarity>highScore:
  167. highScore=similarity
  168. best_user_match_id=self.user_dictionary.keys()[i]
  169. return best_user_match_id
  170.  
  171. def recommend_books(self, current_user_id):
  172. list=[]
  173. similarUser=self.get_most_similar_user(current_user_id)
  174. for i, rating in enumerate(self.user_dictionary[similarUser]):
  175. if rating and self.user_dictionary[current_user_id][i]==0:
  176. list.append(self.lookup_average_rating(i))
  177. return list
  178.  
  179.  
  180. def main():
  181. name=Recommender("book.txt","ratings.txt")
  182. mylist=name.read_books("book.txt")
  183. print mylist
  184. # print lookup_average_rating(0, read_books('books.txt'),calculate_average_rating('ratings.txt'))
  185. #test your functions and classes here
  186.  
  187.  
  188. if __name__ == "__main__":
  189.  
  190. main()
Add Comment
Please, Sign In to add comment