Currently I’m participating in the Quantified Self summer school at the CIID (Copenhagen Institute for Interaction Design). The focus lies on the visualisation of complex data sets, currently a hot topic in science. As workhorse the Java based environment Processing is used, which is widely known in the visualization community. (For some vivid examples check openprocessing.org).
To get a better grasp of Java in general and processing in particular I wrote a small package that visualizes all the places you have visited with the corresponding color mood (=the most prominent color in the pictures you took).
Since my phone logged the GPS coordinates of every picture (about 3000) I took the last year I should be able to visualize this on the globe. To get this result is used the following libraries:
- Metadata-extractor for GPS data extraction from the pictures
- Toxiclibs for color extraction and manipulation
- worldVis to visualize the globe and merge them with the data points.
By running the data mining part of the program a list is constructed with the GPS coordinates and the corresponding most prominent color in that pictures.
Next step is to cluster the pictures based on the GPS coordinates using a simple cut-off algorithm which just creates a new cluster if a new data point does not fall within the pre-defined cut off value. To visualize this in a more readable way I constructed the picture below. On the top row it shows the final color of the 9 clusters and the other rows represent all the pictures and their dominant color. The black gaps represent a switch to a different place.
Finally the latitude and longitude can be converted into polar coordinates and plotted on a 3D globe. These coordinates are connected using curves that fade from one cluster color to another cluster color to depict the ‘mood shift’.
There are still some improvements to be made:
- Cluster algorithm is doggy and too simple, it should cluster in polar coordinates instead of Cartesian (because of now it does not take the -180 / +180 switch into account for example)
- Color assignment, since just taking the average of all the colors results in a grey/brownish blur (just like mixing up the paint years ago in kindergarten) a more sophisticated algorithm needs to be impended.
- The vertex is on the map are currently distance independent, such that drawing a line from the south to the north pole will likely result in a curve slicing through the earth.
After the improvements are made and the code is cleaned up I’ll certainly post it on openprocessing.org for others to play with.