I made a data visualisation today showing the top 50 artists I listened to in 2010. The size of the artist photo is proportional to the number of times I listened to any track by that artist in 2010.
This is how I made it…
- Get the listening data from the last.fm API.
- Turn the data into a form suitable for importing into Google Spreadsheets.
- Visualise the data in a tree map.
- Overlay the photos on the tree map.
Get listening data from last.fm API
I use last.fm to store data about my listening habits. Any track I listen to on my iPod, iTunes, Spotify or the last.fm website itself, is “scrobbled” – collected on my computer using the scrobbler tool and sent to my profile on last.fm.
You can access your data using the last.fm API (you’ll need to sign up for an API key, if you haven’t already done so). You get the data by submitting a request (i.e. typing the address in a web browser) to:
…and appending a method, your API key and (if you want) a time period.
To get the data about the top artists I listened to in 2010, I used the
This returns the data as XML, which looks something like this:
<lfm status="ok"> Left Lane Cruiser 179 http://www.last.fm/music/Left+Lane+Cruiser 1 http://userserve-ak.last.fm/ serve/34/13235587.jpg http://userserve-ak.last.fm/ serve/64/13235587.jpg http://userserve-ak.last.fm/ serve/126/13235587.jpg http://userserve-ak.last.fm/ serve/252/13235587.jpg http://userserve-ak.last.fm/ serve/500/13235587/Left+Lane+Cruiser+LLC.jpg Otis Taylor 165 […] Black Stone Cherry 165 […]
Get the data ready for Google Spreadsheets
I wanted to get my data into Google Spreadsheets to use the visualisation tools. However, XML isn’t a supported file format in Google Spreadsheets, so I couldn’t just throw my XML file up there and start visualising. So, I needed to turn my XML into a format suitable for Google Spreadsheets, such as a CSV file.
You can do this with some recent versions of Excel or other Office tools. I needed something free and used Google Refine. It’s handy for cleaning up data and exporting data into different formats.
I opened the XML file in Google Refine and deleted some of the extraneous columns and rows leaving just the following fields (as column titles):
- Image URL
I then saved the data as a CSV file and uploaded it to Google Spreadsheets. Here’s the file.
Visualise the data
To get the basic layout of the visualisation I created a tree map. In Google Spreadsheets:
- I selected the required data fields (
- Chose Insert > Gadget > Tree Map Gadget.
- Placed the tree map in a new sheet.
View full size image (png, 66kb)
The tree map recalculates itself when you change your browser window dimensions. I wanted to make a visualisation with dimensions approximately A4 landscape, and changed the window dimensions until I got a tree map layout that felt right.
Overlay the photos
I took a screenshot of the tree map, opened it in Pixelmator (any image editor will do) and then increased the image dimensions by 50% to create a larger image to work with.
The last.fm data contains URLs for image files. I did use some of these though, where there were odd shapes in the tree map, I looked around for suitable images that would work well in extreme letterbox or elongated shapes.
The final stage involved getting the photo for each artist and cropping the photo to the same dimensions as the underlying shape in the tree map.
So, I started with Left Lane Cruiser and Otis Taylor at the top left of the visualisation and then worked my way through the other artists.
This is the final result: