blob: 436af384f614409ad39458c3190d372706f4768b [file] [log] [blame]
# To run this example app
#
# Please execute all commands from repository root.
#
# Step 1. Get sample data and unzip it.
# > wget http://www.grouplens.org/system/files/ml-100k.zip
# > unzip ml-100k.zip
#
# Step 2. Configurate examples/itemrec/movies/appdata.py
#
# Step 3. Run this app:
# python -m examples.itemrec.movies.movie_rec_app
from appdata import AppData
import predictionio
import sys
from app_config import APP_KEY, API_URL
ENGINE_NAME = 'movie-rec'
class App:
def __init__(self):
self._app_data = AppData()
self._client = predictionio.Client(APP_KEY, 1, API_URL)
def run(self):
state = "[Main Menu]"
prompt = "\n"\
"%s\n"\
"%s\n"\
"Please input selection:\n"\
" 0: Quit application.\n"\
" 1: Get Recommendations from PredictionIO.\n"\
" 2: Display user's data." % (state, '-'*len(state))
while True:
print prompt
choice = raw_input().lower()
if choice == '0':
print "\nGood Bye!\n"
break
elif choice == '1':
self.recommend_task(state)
elif choice == '2':
self.display_user_task(state)
else:
print '[Error] \'%s\' is not a valid selection.' % choice
self._client.close()
def recommend_task(self, prev_state):
state = prev_state + " / [Get Recommendations]"
prompt = "\n"\
"%s\n"\
"%s\n"\
"Please enter user id:" % (state, '-'*len(state))
while True:
print prompt
choice = raw_input().lower()
u = self._app_data.get_user(choice)
if u:
n = 10
print "[Info] Getting top %s item recommendations for user %s..." % (n, u.uid)
try:
self._client.identify(u.uid)
rec = self._client.get_itemrec_topn(ENGINE_NAME, n)
u.rec = rec['pio_iids']
self.display_items(u.rec)
except predictionio.ItemRecNotFoundError:
print "[Info] Recommendation not found"
print "[Info] Go back to previous menu..."
break
else:
print "[Error] invalid user id %s. Go back to previous menu..." % choice
break
def display_user_task(self, prev_state):
state = prev_state + " / [Display User]"
prompt = "\n"\
"%s\n"\
"%s\n"\
"Please enter user id:" % (state, '-'*len(state))
while True:
print prompt
choice = raw_input().lower()
u = self._app_data.get_user(choice)
if u:
print "[Info] User %s:" % u.uid
n = 10
topn_rate_actions = self._app_data.get_top_rate_actions(u.uid, n)
print "\n[Info] Top %s movies rated by this user:" % n
self.display_rate_actions(topn_rate_actions)
print "\n[Info] Movies recommended to this user:"
self.display_items(u.rec)
self.wait_for_ack()
print "\n[Info] Go back to previous menu..."
break
else:
print "[Error] invalid user id %s. Go back to previous menu..." % choice
break
def display_items(self, iids, all_info=False):
"""print item info for each iid in the list
"""
if iids:
for iid in iids:
item = self._app_data.get_item(iid)
if item:
if all_info:
print "[Info] %s" % item
else:
print "[Info] %s" % item.name
else:
print "[Error] Invalid item id %s" % iid
else:
print "[Info] Empty."
def display_rate_actions(self, actions):
"""print iid and rating
"""
if actions:
for a in actions:
item = self._app_data.get_item(a.iid)
if item:
print "[Info] %s, rating = %s" % (item.name, a.rating)
else:
print "[Error] Invalid item id %s" % a.iid
else:
print "[Info] Empty."
def wait_for_ack(self):
prompt = "\nPress enter to continue..."
print prompt
choice = raw_input().lower()
if __name__ == '__main__':
print "\nWelcome To PredictionIO Python-SDK Demo App!"
print "============================================\n"
my_app = App()
my_app.run()