My UP skyline for the week

Jawbone released its public developer API for UP last Thursday, with little fanfare.  I've been wanting to play with alternative visualizations for my own data for a while, and this seemed like a good opportunity.

Full disclosure: I work at Jawbone, but the ideas in this post are my own.  Also, you can do everything I describe in this post for your own UP band using just the public API -- no special access required.

First, I started off by grabbing my personal data.  This is easy with the API.  Here's a ~30-line python script that'll get your last 30 days of data and stash it in local json blobs.

Next, I did a sanity check to make sure I could replicate the step graphs that appear in the app.  I used pandas and matplotlib.  Here's my ugly version of the daily step graphs that appear in the app.  This data comes from last Tuesday (not my greatest day for walking.)  For comparison, I've included the Jawbone-generated step graph for the same day.

Replication, check.  Now we get to the fun part.  What else can we do to make the data tell a story?

I had a hunch that cumulative steps might be interesting, so I graphed them.  Here are cumulative step graphs, by day for the last week.

The x-axis is a little weird: it spans a "day", from your first activity to your last activity.  No matter how many hours elapsed, the API always splits the day into 68 equal chunks and counts steps within each bin.  (The data series does include timestamps, but every day's intervals are different.)

This isn't the format I would have chosen, because it makes the x-axis very hard to interpret.  On the other hand, it maps steps from every day onto a common scale, which makes some operations simpler.  Since I pulled a couple of all-nighters in the last week, the hours for my step graphs would have been pretty crazy.

The overlaid step graph was interesting, but hard to read, so I lined the days up in sequence.

This is more informative: the height of the lines shows a pretty clear visual comparison of total steps by day, and the shape gives you a sense of the pacing: steep vertical lines correspond with intense workouts, flat horizontals correspond with idle time, and sloped lines correspond with smatterings of steps.

At this point, the exploration took an unexpected turn.  My wife pointed out that the shapes of the lines looked a little bit like buildings, so I did some flipping and adjusting to generate this "graph":

Put it that way, and the week looks a lot like a skyline.  Each day, the cumulative step count defines the profile of a building.  It's a nice way to add texture to the visualization without introducing meaningless chartjunk.

Code or it didn't happen:

Retrieve the data

Generate the viz


  1. That is an interesting visualization.

  2. Rockets might be useful, too. Taller, sharper rockets go farther.