Final Project

by Elliott Hauser

29 Apr 2016

Note: the final is due at 11:59pm Friday April 29. It was previously listed as due at 12:00am Friday, which is 24 hours earlier :)

Optional Extension: You can choose to turn in your final by 11:59pm on Sunday May 1. Think of this as the “hard way out”. If you do this, you’ll turn in another snapshot/update by the original deadline on Friday. Also, I’ll have higher expectations for all the details being right in your program. Aka the perfectionists’ special.


Choose one: Make an interactive Turtle game or a text-based data analysis utility. This project should combine most if not all of the knowledge you’ve learned this semester, and, armed with your preferred skills and knowledge, should serve as a testament to your new abilities as a coder! Lift-off here we come! :rocket:

Requirements

Both project types must use:

  • External data files. For Turtle, this can be game settings, character data, or etc. For the data tool, this should be your data.
  • Dictionaries
  • Custom modules
  • definite (for) loops
  • Custom functions

Both must be:

  • readably coded
  • well commented
  • well organized
  • idiomatic
  • error-free
  • (largely) bug free. That is, your core use cases should work. Small bugs are OK but the quality level for the final should be higher than previous projects.

Both must have an extensive (1500 word+) reflection. In it, discuss the program you chose, your process, the skills and attitudes you used, and anything else that will help me evaluate what you’ve done.

Turtle projects must:

  • Have a graphical user interface, responding to key and click events
  • Have a constantly available help dialog. This can take many forms but should allow the user to learn what they can do in the program at any time.
  • Display information about the program’s state such as score or level
  • Have at least 3 levels, increasing in difficulty
  • Extend a custom Turtle Class
  • Have a ‘win’ screen
  • Have an iterative interface. That is, the user should be able to perform any number of supported actions (such as playing the game over and over)
  • Use Trinket
  • Use one or more custom images

For Turtle projects, I recommend building major improvements into your Game App (or reworking it). In your reflection, make sure to note your major improvements.

Data analysis projects must:

  • Include more than one data file
  • Be generalizable to a class of data files. I.e. for any list of transactions, any basketball box scores, etc.
  • Have a text-based interface
  • Have help text available somehow. For instance, if the user types ‘Help’, explain what they program can do.
  • have an iterative interface. That is, the user should be able to perform any number of supported actions and then exit the program.
  • Use a Python 3 Trinket OR Cloud 9. If you use Cloud 9, you must include your code in a public Github repo that I can clone. This is a good option for students who want practice with a pro IDE and git but will involve considerably more work on your part.
  • Visualize data via text printouts. For instance:
# Raw data:

{'Fri': 20, 'Sat': 1, 'Thu': 6}

# Visualized:

Mon
Tue
Wed
Thu    ******
Fri    ********************
Sat    *
Sun
  • (optional) Use a web-bazed API like Google’s Maps API to retrieve and display extra information

For data analysis projects I recommend building an exploratory data analysis tool that will let users construct and print histograms and summary statistics (max, min, mean, etc) of data sets like the ones we’ve used. Email logs are one example, as is transaction data. You can re-use code and concepts from many of our homeworks to do this. When you generalize your program to work on many types of data, you will need to learn from the user which columns map to what kind of data.

Do not use help from classmates on this assignment. Document/cite any help you use that is not me, our class notes, or our text.

Criteria

Beyond the requirements, here are the main things I’m looking for when I assign grades:

  • Completion of intermetiate milestone assignments (to be assigned)
  • Code style
  • Code correctness (i.e. free of errors & bugs)
  • Trajectory of improvement over the semester
  • Usefulness and/or Fun of program
  • Overall ability to make a Python program that does something useful and/or cool

What to Turn in

Submit a pull request with your reflection and your program. Please do not be late!

Elliott Hauser is a PhD Student in information science at UNC Chapel Hill. He's hacking education as one of the cofounders of Trinket.io. Find Elliott Hauser on Twitter, Github, and on the web.