Introduction to Computer Science
CompSci 101 : Fall 2013

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 test three different algorithms for recommending items based on the responses made by others. You will be practicing reading data from files, using Python dictionaries and lists, and sorting data to find good matches.

The assignment comes in two conceptual parts:

Sometimes ratings are stored in a single file, sometimes in more than one file. You will need to write a separate Python module to deal with each data source, then use what 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 day about it
-3 Didn't like it
-5 Hated it!

Base Specifications

This assignment asks you to write several Python modules. Here is a high-level overview of those modules, with links that take you to more information for each module in the HOWTO document. To get started, download this code using Ambient's snarf tool.

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 electronically from within Eclipse or on the web to the assignment name assign05_recommender.