Fellow Netflix customer – need help deciding your next Instant Watch? Excel to the rescue. And how I did it.
I am a movie fanatic. I think movies are serious art and movie-watching is my number one hobby.
So Netflix is a good fit for me. And our family watches far more movies using Instant Watch than we do with Blue-Ray and DVD disks.
But in my opinion Netflix has one major weakness. IT does VERY LITTLE to help you SELECT your next movie. And I am indecisive which create in me a a little perfect storm of frustration when I am in the mood for a flic. No kidding, I have spend half the length of a typical movie just trying to FIND the right movie.
I like to consider a lot of things when I want pic a flix…
- What GENRE am I in the mood for or is appropriate for the audience?
- Given the audience (frequently my wife and/or family) what is the MPAA RATING of the movie?
- What is the AVERAGE USER RATING of the movie? (Help me find one that generally doesn’t suck.)
If you want to sort or filter using these criteria it is very difficult.
To solve this problem I created an Excel spreadsheet to help. It list the top 30 movies by GENRE sorted by AVERAGERATING in descending order. Using this you could use the filtering capability of Microsoft Excel to find any movie you want by by Genre, MPAA Rating, and/or User Rating.
I created an Office 2007 version and an Office 2003 version. Here they are:
NOW THE TECHNICAL STUFF
To create this spreadsheet I used a FREE awesome querying tool called LinqPad. You can get it at http://www.linqpad.net/. After downloading (notice you don’t have to install it…tt is an executable you can put on your desktop.) Put the following C# Linq statements into a new query.
var genre = "Thrillers";
var minRating = 3.0;
var topNum = 30;
var query =
(from g in Genres
from t in g.Titles
where g.Name==genre
&& t.Instant.Available==true
&& t.AverageRating >= minRating
orderby t.AverageRating descending
select new {t.Name,
t.Rating,
t.AverageRating,
t.ShortSynopsis,
Genre=genre}
).Take(topNum);
query.Dump(string.Format("Top {0} {1} Instant Watch Movies with a " +
"{2:0.0} minimum average rating sorted " +
"by average rating in descending order.",
topNum,genre,minRating));
Be sure that the Language setting is set to “C# Statement(s)” and that the Database is set to “http://odata.netflix.com/Catalog/”. That is the OData data source that Netflix provides.
Notice that the query can only return results for one Genre at a time. (That is a limitation of the OData data source. There are other Netflix Data source types that are not as limiting, but you can’t use those directly in LinqPad without writing a full program. ) So I had to run the query once for each Genre and aggregate the results into a single spreadsheet. It took me about an hour. Keep in mind that the data in the spreadsheet will go stale (as movies are moved out of Instant Watch and new movies are moved in.) With this LinqPad query you can refresh the data for the genres that interest you the most.
Enjoy.
Seth