Introduction to Computer Science
CompSci 101 : Spring 2014

Recommender

Collaborative filtering and content-based filtering are two kinds of recommender systems that provide users with information to help them find and choose anything from books, to movies, to restaurants, to courses based on their own preferences compared to the preferences of others.

In 2009 Netflix awarded one million dollars to a group that had developed a better-recommender system than Netflix's own system. This NY Times Magazine article describes the competition, the winning teams, and how the movie Napoleon Dynamite caused problems for the algorithms and ranking/rating systems developed by contest participants.

In this assignment, adapted from a Nifty Assignment developed by Michelle Craig, you will develop a program to recommend items based on the responses made by others. You will be reading data from files, using Python dictionaries and lists, and sorting data to find good matches.

The assignment comes in two conceptual parts:

You will need to write a separate Python module to deal with each data file then use the data structures these modules return to develop recommendations. Although the file formats are different, the ratings in each have the same meaning:

Rating
Meaning
5 Really liked it!
3 Liked it!
1 Okay — neither hot nor cold about it
0 Have not read it
-1 Not bad — but nothing really to say about it
-3 Didn't like it
-5 Hated it!

To get started, download this code using Ambient's snarf tool.

Basic Specifications

Here is a high-level overview of the two Python modules you will complete, with links that take you to more information for each module in the HOWTO document.

Module BookReader.py:

Module Recommender.py:

These functions should work for any kind of thing we might want recommendations about, i.e. they should be able to be called with list and dictionary data structures returned by your Reader modules.

README:

In addition to the standard information included in your README file, include an analysis of your project:

Bonus Specifications

Module MovieReader.py:

Submission

Submit your entire PyDev project and a plain text README file electronically from within Eclipse or on the web to the assignment name assign04_recommender.

Please double check that you submitted the correct files. Within Eclipse, this can be done using the Ambient menu item Submit History... and, on the web, the files submitted are printed at the bottom of the page after a successful submission.