#Created By: Sarika Padmashali import json import csv from collections import defaultdict import sys #Taking inputs - user ID and restaurant ID from command line user = sys.argv[1] restaurant = sys.argv[2] print "User ID entered: ", user print "Restaurant ID entered: ", restaurant data = [] sum_ratings = 0 count = 0 business_rating = {} user_rating = {} #Calculating Average Rating with open('yelp_academic_dataset_review.json') as f: for line in f: data = json.loads(line) sum_ratings = sum_ratings + data["stars"] count = count + 1 average_rating = sum_ratings/float(count) print "Sum of ratings: ",sum_ratings print "Count of ratings: ",count print "Average Rating of Yelp: ", average_rating #Calculating Restuarant Bias with open('yelp_academic_dataset_review.json') as f: for line in f: data = json.loads(line) business_id = data["business_id"] stars = data["stars"] business_rating[business_id] = business_rating.get(business_id,[0,0]) rate = business_rating.get(business_id) stars = rate[0] + stars count = rate[1] + 1 business_rating[business_id] = [stars, count] #Saving the restaurant id's and biases in a dictionary restaurant_bias = {} for k, v in business_rating.iteritems(): average = v[0]/float(v[1]) bias = float(average - average_rating) restaurant_bias[k] = bias #Writing Restaurant biases in a csv file with open('restaurant_bias.csv', 'wb') as csv_file: writer = csv.writer(csv_file) for key, value in restaurant_bias.items(): writer.writerow([key, value]) #User Bias with open('yelp_academic_dataset_review.json') as f: for line in f: data = json.loads(line) user_id = data["user_id"] stars = data["stars"] user_rating[user_id] = user_rating.get(user_id,[0,0]) rate = user_rating.get(user_id) stars = rate[0] + stars count = rate[1] + 1 user_rating[user_id] = [stars, count] # Saving the user id's and biases in a dictionary user_bias = {} for k, v in user_rating.iteritems(): average = v[0]/float(v[1]) bias = float(average - average_rating) user_bias[k] = bias #Writing the user biases in a csv file with open('user_bias.csv', 'wb') as csv_file: writer = csv.writer(csv_file) for key, value in user_bias.items(): writer.writerow([key, value]) #Predicting ratings current_restaurant_bias = restaurant_bias[restaurant] current_user_bias = user_bias[user] predicted_rating = float(average_rating + current_user_bias + current_restaurant_bias) #Normalizing as rating is in the range [0,6] if predicted_rating > 5.0: predicted_rating = 5.0 if predicted_rating < 0.0: predicted_rating = 0.0 print "Predicted Rating: ", predicted_rating