Down with the
Project due 2/10 at 9:59 pm
Chicago time and 5:59pm Honolulu time
will be an individual project to give people practice with writing
an application in KineticJS and get everyone ready to contribute
to the group projects to come. In this project everyone will learn
how to get data in, how to write an interactive application, how
to create an effective user interface for viewing and analyzing
this data. This will give everyone a common basis for
communication in the later group projects where people will most
likely specialize in different tasks.
The project will focus on a recreation of the John Snow cholera
map but this time focusing on an interactive version of the map
with additional related dynamic data. In this case the data is
already pre-processed to be an appropriate size and in an easily
readable form. You also know what 'the answer' is so you can
concentrate on the visualization side of things. Those assumptions
won't hold true for the later assignments.
files available include a vector map of the area and the
locations of the dead and a set of randomized dates.
datafiles are located at:
More data on the original versions of these files can be
I modified the format a bit and added in a randomized sex and
age of the victims based on data from the Naples cholera
outbreak in 1884.
The data files include:
- gives the coordinates of the streets as a series of line
- gives the locations of the 13 nearby pumps
gives the number of deaths for each day of the outbreak
the location of each death in the deathdays file, in order,
plus information on the age and sex of the victim.
another piece of potentially
useful information is the percentage of people in each age
group in general during that time as the percentages of people
of different ages who died may not be the same as the general
population. I haven't found any data for London at that time,
but US census data from 1850 at
gives the following breakdown, so we will assume the same
breakdown for London:
You will be writing your code to run on a modern Chrome browser
running under all current major operating systems, and you should
test to make sure that your app runs well on current Windows, Mac,
and Linux OSes. The screen size will be 1920 x 1080 (assume a full
screen web browser; you can decide if you want the menu bar, tabs,
etc taking up part of the space or not). The user will be using a
single button mouse to interact (so the app is compatible with
touch-screens). The application should have obvious
and intuitive controls.
The application should show multiple linked visualizations of
the data simultaneously. This will allow the user to dynamically
filter based on age, sex, date of death, and see that filtering
applied to all of the current visualizations at the same time.
a C you need:
a B you need to add:
- a well drawn map of the area (streets and pumps) including
the locations of the deaths
- a timeline graph showing the number of deaths per day
- ability to move the mouse over the timeline graph to
choose which day to visualize - this should affect the
deaths visible on the map and in the graph - at minimum all
cholera deaths prior to that date should be shown on the map
and the graph
- the graph and the map should be stable (i.e. they should
not move when new data is added or removed)
- the graph and the map should be well labelled
- you should check your visualization with a colour
blindness checking web page to see that its OK
- the map and graph should update quickly when the user
- an about screen with details on who wrote the project,
where the data came from, etc.
- instructions to help the user use the application
an A you need to add:
- more data to the map - major street names and the
location of the brewery and the work house
- ability to easily see on the map whether each victim was
male or female
- ability to easily see on the map the age of each
- additional graphs showing the distribution of deaths by
sex and age overall and while brushing
- the timeline graph should mark the day the pump handle was
- the map should be able to show either deaths on this day
or up to this day
- ability to cluster the data on the map into a grid that
shows the number of dead in each grid cell (even with this
small amount of data the points are starting to overwhelm)
and the user should be able to vary the size of the
- ability to show data from a window of days on the timeline
- ability to zoom in/out and pan around the map
Your application should help someone like John Snow conduct an
investigation. It should make it easy to check out various
You should start by getting KineticJS installed, running through
the demos, and doing some initial tests to load in the data and
start displaying it.
Once you have a basic shell working you should then start to draw
some sketches of what the interface might look like and how you
want to arrange and display the data. You can use other software
to generate statistics about the data if you find that useful but
be sure to document that process. Be careful of missing data when
you generate statistics.
Your application should start out showing some data - a blank
screen is not very inviting. In past terms the students have shown
a desire to show an overwhelming amount of the data to the user
right away. You should be careful not to overwhelm the user. As
Schneiderman said "overview first, zoom and filter, details on
demand." Appropriate levels of aggregating data will be very
It is also important to note that 'getting it to work' is just a
prerequisite to using the application to find answers to your
questions. It is that usage that will give you ideas on how to
improve your app to make it easier and more intuitive to find
those things. Writing the application at the last minute pretty
much guarantees that you will not come up with an intuitive
Many of the routines you write for this project will be used again
and expanded upon in the upcoming projects - e.g. all of the
projects will need graphs, so it is a good idea to write your code
in a way that it is reusable.
You should create a set of web
pages that describe your work on the project. This should
- 1 page on how to use your application and the things you can
do with it.
- 1 page on the data you used including where you got it, what
you did to it.
- 1 page with links to the well commented source code and any
instructions necessary to install and run it. These instructions
should start from the assumption that the reader has a web
browser on their computer and tell the user everything else
he/she needs to know to get the code and get it running.
- 1 page on what interesting things you found using your
all of which should have plenty of
screenshots with meaningful captions. Web pages like
this can be very helpful later on in helping you build up a
portfolio of your work when you start looking for a job so
please put some effort into it.
Be sure to document any
external libraries or tools that you make use of - give credit
where credit is due.
should also create a 2-3 minute YouTube video showing the use
of your application including narration with decent audio
quality. That video should be in a very obvious place on your
main project web page. The easiest way to do this is to use a
screen-capture tool while interacting with your application,
though you will most likely find its useful to do some editing
afterwards to tighten the video up. Its also a good idea to
have a video like this available as a backup during your
presentation just in case of gremlins. For the future group
assignments you may want to shoot this video on the wall itself.
page including screen snapshots and video need to be done by the
deadline so be sure to leave enough time to get that work done.
I will be
linking your web page to the course notes so please send me a
nice 1920 x 1080 jpg image of your visualization for the web.
This should be named
student will show his / her visualization to the class on the wall and
describe its features. This allows everyone to see a variety
of solutions to the problem, and a variety of implementations. Rehearse your presentation
... several times.
last revision 1/27/2014 - Project
due Monday evening, not Tuesday evening