Monday, October 28, 2013

Teaching telling stories with data

I wanted to share a new toy, so here's a rare professional-life cameo from Floodlight, the digital storytelling platform I co-founded. We've just updated our embed widget feature so you can now embed lists of stories based on a keyword or topic. Below, I've included the stories (tutorials, really) I've created about data visualization and data storytelling. Enjoy!

Anyone Can Be a Hans Rosling Data Storytelling Tips on Floodlight

Monday, September 23, 2013

Having fun at the Albuquerque Sunport

In case you have trouble reading my handwriting...

Reasons the Albuquerque Airport is Awesome: 
  1. It's a SUNport, not an airport.
  2. It has a bi-plane from 1914 (almost 100 years old!).
  3. There are portraits memorializing drug- and bomb-sniffing dogs (wearing police badges!) mounted on the wall.
  4. It was free WiFi.
  5. There's art (paintings, sculptures, ceramics) everywhere, including 20 giant wooden ceiling beams across the main entry hall, each painted (and carved) with a different animal or design.
  6. The lines are practically non-existent.
  7. It's really colorful (like most of New Mexico).

Friday, September 13, 2013

With all the heft of a grizzly bear

As you may or may not know, I seem to have ended up in Fort Sumner, New Mexico (population: 1,031). I have work to fill my days (and running, and cycling...), but I also have a lot of free time. So I decided to fill it with some exercises from The Daily Create, which is part of a free, online digital media course I stumbled upon.

Instead of doing today's create, I chose a recent one I found more intriguing: Celebrate the 600th Daily Create by expressing "600" in a drawing that doesn't use numbers.

 Some ideas to illustrate 600 as...

  • age (think: Methuselah)
  • ...a crowd of people/insects/deer
  • ...discrete feathers, or frogs, or pieces of popcorn (popped v. unpopped kernels, by volume, could be interesting)
  • ....a weight. Hmmm, what weighs 600 lbs?
A grizzly bear!
He's kind of nervous about getting weighed at the doctor's office, for obvious reasons.

And of course, a grizzle bear would have a driver's license. I used "600" in here but...who cares?

Friday, September 06, 2013

Happiness is Contagious: A playlist for running 100 miles

I recently ran my third 100-mile race. One of my favorite things about running 100 milers - in addition to the pain, the beauty, the heightened emotions and experiences which are inevitably fuzzified by memory's fickle biologic devices, the chafing, the crying out of misery, the crying out of joy, and the dawn light - is the warm fuzzy feeling I get from the selfless, seemingly limitless support my friends, family, loved ones, and total strangers shower on me.

And an overlooked element of that support is the music that, thanks to modern technology, I can take with me up and down mountain passes.

Out of the many races I do - trail, road, relay, ultra - hundred-milers are the only ones where I use headphones. Why? Because 24+ hours is a lot of time to spend with your own head. My prime directive during a 100-miler is to stay happy. If I'm happy, I'm running (or hiking, as is more often the case) well. Trouble starts when my mood dips.

With the help of friends and family (Amy, Robbie, Sarah, Kayanna, Anat, Helen, Kaya, all the Wirfs-Brocks), who shared songs that make them happy, I put together this playlist: 267 songs, 17+ hours of music, an artesian well of happiness. And it worked. This playlist, which has been evolving since my 100-mile debut last year, was an especially important "member of my crew" at Cascade Crest last weekend, where I ran without a pacer until the last four miles (thanks, Mom!).

So, here it is! (Sorry, you'll have to scroll.)

View in Google Drive

I included the years in there because it's mildly interesting to see the chronological distribution of the music. That data is iffy (sometimes it's the year of a re-release, because it's from iTunes), and not available for every song...yet!

Monday, July 15, 2013

Team Funfnip's Adventure Racing Debut

What will your first adventure race look like?

You may find yourself wading across a chest-deep river to get to an island, all so you can punch some holes in a mysterious yet oddly pretty pattern in a tiny piece of Tyvek-paper.

Or standing on railroad tracks while an angry local - who in your paranoid mind has a shotgun at the ready - shouts that he's called the sheriff and you better, "get your ass outta here because you're standing on private property."

Or secretly being thankful that a couple of other racers stopped your teammate to ask for a bike pump, because god that hill was steep and you didn't think you'd be able to keep peddling all the way to the top, anyway.

Or sharing a wet canoe with the biggest, hairiest spiders you've ever seen, which are surely harmless otherwise they wouldn't need to look to intimidating, as your teammate drags you upstream for a mile through the Shenandoah River.

Or picking spiderwebs as thick as rubberbands out of face/arms/legs/ears/hair/everywhere.

Or trying to explain to the race director, as you're about to get up on the podium, that you can't tell him what your team name means* right now, but you'd be happy to tell him later because it's a little bit embarrassing.

If you are me, and you are lucky enough to have Ben (who I'm 86 percent certain is an alien from a planet of athlete-navigator-pun-makers) as your teammate, you'll find yourself doing all of these things.

Whoa, back up, what is adventure racing anyway?

It's a multi-sport, solo or team race that has no specified course, just flags hidden in the woods that you have to find. You get to use a map, compass and your wits to figure out the fastest way to get to as many of the flags as you possibly can in a specified amount of time (in our case, 12 hours). To do that, you bushwhack, run, hike, bike, hike-a-bike, paddle, portage, swim, crawl - whatever is necessary, really. The specific race Team Funfnip did was the Adrenaline Rush AR, in the Shenandoah Valley (which, if you've been following along, is very close to where I recently ran the Massanutten Mountain 100), put on by marvelous people who call themselves Adventure Addicts on June 15, 2013.

*Before you go any further, you gotta explain this Funfnip thing...

I suppose. I did bring this embarrassment on myself, after all. Funfnip is German for "five+nipples." Huh? Well, my team has two people and five nipples on it. You do the rest of the math. I wanted to make it a neat Dutch compound word (because in Dutch you can glom words together and it's perfectly syntactically and semantically acceptable), so next time we might be Vijftepelploeg or Vijftepelteam (Chandler sent me these translations after we'd already registered, so Funfnip it was, thanks to Google translate). Moving on!

Now the part of the race report where I tell you what happened, in roughly chronological order.

One week to go
A big part of adventure racing is mountain biking. A week before the race, I had been mountain biking exactly twice (and the first time I don't think really counted, because it was early-season-biking in Oregon, and there were giant logs every 20 yards or so, so I was basically off my bike the entire time hoisting it over obstacles...and we biked up to the top of the mountain on a road). And I didn't own a mountain bike. So my first pre-race mission was to find a bike to rent. My second pre-race mission was to figure out how to ride it (at least perfunctorily) on some trails.

The Monday before the race we went to College Park Bicycles, who I have to hat-tip because they were super friendly and let me rent the bike for a week and then apply the cost of the rental to purchasing the bike - which I did! (Also, I dig their circa-1998 website.) For those of you out there who care about these things, I got a user (probably mid-2000s, judging from the graphic styling) Trek 8000, which is a front-suspension bike - perfect for a noob like me who doesn't really need anything fancy yet.

The hot-pink duct tape is my handiwork...the mud, too!
Hidden surprise: The cassette is red on the inside!

When I was checking out he bike, a thunderstorm erupted. So I test-rode it in sheets of rain through the University of Maryland quad, getting a stylish mud-strip on my butt. Clearly, this bike and I were going to be fast friends.

The next day, we went to Patapsco State Park to try out some real, "intermediate-level" trails. It Scary? Both? I found out that I swear a lot when I mountain bike, enjoy going up hills (even the steep ones), and am really scared of going downhill (especially the steep ones) - pretty much the opposite of my running personality (except for the swearing). I got my first fall out of the way (into some blackberry bushes), and enjoyed that so much that I fell again. Most important, I came back to the car saying, "We should do more of this crazy mountain biking stuff..."

One day to go
The night before the race, we joined a couple of friends, who are also adventure racers and who volunteered at the Adrenaline Rush event, to camp near the race start. This also served as our race warm-up, because we had to navigate to the campsite in the dark, which consisted of driving on windy, narrow mountain roads with subtle and confusing signage. Despite the three different "Elizabeth Furnace" signs we made it to the campsite - by the cutoff time, no less! We were rewarded with a night full of screaming infants, barking dogs, and snoring neighbors.

Race morning
We had to get up way too early, so I don't have a very good memory of what happened before the race.  There was eating. There was drinking. There was checking in. There was studying of the map. There was nervous eyeing of other teams and their intimidating matching spandex outfits.

Ben, our team's designated navigator (cuz he has the skillz), put the first map (we would use four maps throughout the day, but only got one when we checked-in) in a ziploc bag. We noticed that other teams had these fancy waterproof cases that hung around their necks. Pssh, why would you need that? Well, we'd find out...

My designated role was "person who tries to keep up and not cry." So that I wouldn't feel like complete deadweight, we decided that I would be the keeper of our passport (a tiny piece of Tyvek), and do the glamorous (if glamorous means getting messy/muddy/wet/poison ivy all over you) job of punching in at each checkpoint.

Get to the race part already!
Ok! The race started with an on-foot prologue? What's a prologue? Good question - I didn't know until I found myself in one. Basically, the real first leg of the race was a mountain bike segment, but because everyone starts at the same time (both 6-hour and 12-hour races), they needed to give us a short task to spread us out a bit so we wouldn't be tripping over each other and throwing elbows and playing lemmings. In this case, it was an extra map they handed us about two minutes before that start that had one check-in location on it. We had to run to that point and then run back to our bikes, which were staged next to the starting line.

The check-in point was uphill - good for spreading racers out - and you had some options: You could run up a road, then cut into the woods for a short bushwhack (shortest option), or you could take a trail (longer, but no bush-whacking required). We chose the road. Success! Then it was back down the hill to get our bike gear on. The prologue was also a nice confidence booster. Hey, we can do this!

Stage One: Mountain Biking, 14 checkpoints, must go in order, ~3.5 hours
Map for the first mountain biking leg

The course was set up in such a way that it took us all over the park, through marshes (where we biked on boardwalks), to the top of ridges, down by the river, up into tributaries, etc. Most of the check-points were 100 meters from the trail or closer, so we were on our bikes most of the time. There were also a few points where we took off-trail shortcuts and hiked our bikes. During this stage of the race, we saw lots of teams and got to chat with them.


  • There was a guy biking with kayak paddles strapped to his back (I was scared he would wipe out and impale someone). 
  • For a bit, we were near a female soloist who was kicking butt on a cross bike! 
  • We stopped to help a male two-person team who had gotten their fifth flat tire of the day and needed to borrow our bike pump. They ended up being able to finish the race (and doing really well!) despite the fact that the guilty tube was leaking and one of them had to walk his bike back. 
  • I was, as expected, a wuss on the steep downhills. But on the uphills I schooled lots of people :) 
  • Ben was an amazing navigator.  We ended up getting all the checkpoints on this segment.
  • We had tons of fun...yay!
Stage Two: On-foot Orienteering, 19 checkpoints, can do in any order, can do this section either before the paddling section or after the second biking section
The trekking/orienteering map, with Ben's route penned in blue. (Note that it's the same map as for the mountain biking leg, but with different checkpoints.)

This was our favorite part of the race, and it was an excellent opportunity to put our recent orienteering skills to the test. Ben again served as the navigator, and I was the follower (maybe that will change once I get some more practice?). Unlike the bike section, where we were bumping into other teams and soloists the whole time, racers on this section were sparse. It may be hard to see on the map, but the blue ball-point pen is the route that Ben plotted for us. We were able to get the first 10 checkpoints before we had to run back to the canoe put-in. We were rocking and rolling on this stretch, so we wished we could have just kept doing (and maybe it would have been a better strategy in the long run), but alas we needed to get to the canoe put-in before 3:00 pm or there would be no paddling for us that day.


  • A fire road (not on the map) magically appeared on top of a ridge, right where we wanted to run.
  • We met up with a male soloist around checkpoint seven or eight and finished out the course with him. We got to chat (well, Ben and him chatted, I kind of huffed along behind them), and also we got an extra pair of eyes to help find the last few checkpoints. It was a nice example of how race teams are allowed - and often encouraged - to work together if they so choose.
  • A bit after that, we met up with a female soloist (who would go on to win her division) who finished the final checkpoint with us.
  • One checkpoint (number four, but we got to it last) looked like it was located directly in the middle of a wide stream. Guess what? It was! And guess who got to wade to the middle in rib-deep water to go get it? Me! It felt amazing, because at this point we were at the height of the day's heat and humidity. At least the race organizers were kind enough to put up a rope for us :)
As I mentioned, this is a section we were allowed to come back to later in the day. So stay tuned...

Stage Three: Paddling (in a canoe, kayaks for soloists), 7 checkpoints, must do in order
Paddling and second biking leg map

We arrived at the canoe put-in at around 2:30 pm, and by this point I was feeling pretty exhausted after almost six hours of biking and trekking. So taking a seat in a boat and floating down a river seemed like a nice break, right? Well, that idea flew out the window about 45 seconds into paddling, where both Ben and I realized that we are big wusses and because we run all the time our upper bodies and like flimsy cardboard cutouts. Paddling is hard work. The soloists we had finished the trekking leg with quickly disappeared down the river as we loafed along in our canoe. Here is how most of this section of the race went:

  • We'd paddle along, taking frequently breaks because our arms felt like they wanted to fall off, zig-zagging down the river because I was "steering" the canoe.
  • We'd find a stretch of shore where we could get out of the water.
  • We'd nearly kill ourselves trying to drag our canoe up on said shore.
  • We'd run over land to find a checkpoint.
Well, that's how it worked for the boring checkpoints, at least. There was one checkpoint we couldn't find, and as we were looking, about four or five other teams arrived and started looking too. After about 15 minutes we decided it wasn't worth it and headed after the next one. Apparently some teams found it, so it did exist. Where, I have no idea.

Our favorite checkpoint was one where we had to paddle up a narrow, steep-banked inlet to find a check point that was hanging over a slippery bank. It was quiet and peaceful up the inlet, and there were cool rocky mini-gorge-like features. I wanted to stay up there and relax for the rest of the day. But, well, you know that didn't happen...

Instead, we went after the now infamous (in my memory, at least) mega-checkpoint. Most checkpoints are worth one point, but this honker was worth three. Yup. Three. It was begging for us to go after it. Why was it worth so many points? It may be hard to see on the map, but mega-checkpoint #20, innocently named, "Eastern End of Island," is located downstream of checkpoint 21, which is where we had to finish the canoe leg. And not just a little ways downstream - it's a mile or so if you follow the curves of the river. A conundrum, right? There were two strategies we debated: 1) Shore our canoe across the river from where we'd need to eventually take-out, then run along land downstream, then swim over to the island that held the checkpoint; 2) Paddle downstream to the island, get the checkpoint, then paddle back upstream (not an easy feat) to the canoe take-out. We decided to go with strategy 1, which was clearly going to be faster. Except that we ended up doing both.

We found some railroad tracks that would take us overland directly to the bank across from the island we needed to get to. But after we'd run half a mile or so along the tracks, we heard shouts coming from the hillside bordering the railroad tracks. A disgruntled local (what you are probably picturing is very likely accurate, so I'll leave the details out...) was shouting at us that we were on private property. We, calmly of course, asked him if there was public land we could cut over to. Well, maybe there was, but he wasn't going to help us. He shouted that he'd already called the sheriff (and who knows who else - the pitchfork-wielding mob?). It was enough to convince me and Ben that we shouldn't go any further. We didn't really have any other options except to run back up the railroad tracks.

At this point, we had a choice. We could skip the mega-checkpoint entirely, thus missing out on three points, or try to go with strategy 2. Well, being stubborn and in a someone-impaired mental state due to exhaustion, we decided to go for it. Yup. So we paddled downstream, I swam/waded over to the island to punch our passport, and then we were faced with the very difficult task of getting back up the river. After attempting to paddle for a bit and realizing how slow we were going, we decided that the fastest method would be for Ben to get out of the canoe and wade up stream, towing me along. I's kind of embarrassing. But Ben handled it really well, even though low-hanging branches and giant hairy spiders were attacking him with every step. It was a long, hard slog (for Ben, at least - I got to chill and play cheerleader), but we made it.

Our final ordeal on this segment was hauling the canoe up a very steep bank. We had been warned at the pre-race briefing that the volunteers would not help us with this, and true to their word they just stood there and watched us struggle and grunt and grimace.

Stage Four: Biking, 4 checkpoints
As far as I can tell, the purpose of this stage was just to get us back to where we started the race. And to do that, we had to cover miles and miles (and miles and miles! so many miles I don't know how many!) of dirt, gravel and paved roads. This was where my brain really started to melt, and I just wanted to be done, so my description of this segment won't be flowery or flattering. We got lost** a lot. We ran into other lost racers. Everyone was frustrated with the map, because the tiny state roads on it were labeled with tiny numbers, and none of those numbers seemed to match up with the reality of where we were. Some racers gave us bunk directions. We probably shouldn't have listened to them, but we were tired. We found one checkpoint that involved biking up a short gravel hill and then bush-whacking through the woods to a pond. I remember that being kind of fun - or it could have been a hallucination.

**Note: Ben would like to correct this by saying that we weren't ever really lost, we just didn't know where we were for a little bit. I asked, "Isn't that the definition of lost?" 

He replied, "No, to be lost you need to not know where you were and be somewhere you don't want to be." We didn't know where we were, but we never ended up somewhere we didn't want to be (or, at least not for more than 100 meters or so). Thus, not lost. Ok!

Eventually, we ended up on an endless country road that I think I ran on during the Massanutten Mountain 100. That was mildly exciting. We were so tired that we had to walk our bikes up almost all of the hills. That was less exciting. And then we made it back to the starting line, which was really really exciting!

Our reward? We got to finish up as much of the trekking course as we could with 20 minutes or so (minus a few for shoe-changing and watering up) before the race cut-off.

The "rules of travel" -- pretty much equivalent to the rules of a board game

Stage Five: Stage Two Redux - Back to the trekking course

This part was really fun, because we love trekking and running and orienteering! But it was sad, because the race was almost over, and we didn't want to miss the cut-off time because then we'd be docked a point for each five minutes we were late.

(Honestly, I felt like I was a contestant on America's Next Top Model and this was the go-see episode. And if I've learned anything from watching too much reality TV, it's that you better make it back on time, because models can never be late or they'll be fired and shamed by Tyra Banks.)

Even though we didn't have much time, we got to pick up some really exciting trekking checkpoints. One one, I had to swim/wade (yet again) to an island. On another, I had to root around in a ditch. (By now, I was getting pretty good at that.) We tried to pick up one more, which was on a hillside inlet, but it was getting dark and we couldn't find it. I was starting to freak out about the time cutoff, so I told Ben we had to go back. He was sure he would have had it if we'd looked for one more minute 30 more seconds, but we'll never know because we started running back. We made it to the finish line at 8:56, four minutes to spare. This time, our reward was a pint glass and a trays upon trays of buttery Italian food.

So how did you do? This was a race, after all...

Well...we won! Our division, at least. Here are the full results.

We were first in the co-ed two-person division, which had five teams in it. We just squeaked by, getting only one more point than the second place team. You can't really get any closer than that. They arrived four minutes earlier than us. So, if we had one less checkpoint, they would have won. (Ranking is decided by total number of points, then if there is a tie, the faster time wins.) We also got ninth overall, out of 32 starting teams (and 29 finishing teams).

We got these sweet bike-chain/bottle-opener key-chains as our "medals":
Our "trophy" - best medal ever!

Ok, so what did you learn from all of this?

Learning? I was supposed to be learning something? Ok, here's my best shot:

  • Adventure racing is rad because all of the distractions (navigating, strategizing, route-finding, swimming/wading/crawling/hauling) make you forget how tired you are. This makes it fun.
  • Make decisions and stick with them. You won't always be able to predict the best course of action. For example, the overland route that took us straight to a disgruntled local would most definitely have been faster - if it weren't for the disgruntled local. But we had no way of knowing there would be an obstacle that would cost us 30 minutes or so. You can't predict those things, but you can minimize the waffling time.
  • If you want to analyze what went right and what went wrong (which of course, I do), the time to do that is after the race.
  • Navigation is probably the most important skill you can have. Unless you aren't your team's navigator, in which case the most important skill you can have is not-whining.
  • Everything will get wet. Waterproof does not really mean waterproof.
  • Poison ivy is the worst.
  • Ben is much more succinct with his lessons learned: "Just play the cards you're dealt."

Proof! We need proof. Do you have pictures?

There was a professional photographer, Vladimir Bukalo, who was all over the course (seriously) and took lots of amazing photos (1268 of them!). Here are the links (more photos if you want to go a-huntin'):
Are there more adventure races in your future?

Yes! Team Funfnip will compete again. Our next race will be the 10-hour Calleva Adventure Race in Poolesville, Maryland on August 3rd.

Wednesday, February 06, 2013

Moving from brainstorming to doing to learning

Last Friday morning, I found myself with a group of professionals hopping along colored dinosaur tracks strewn along the ground, comparing my standing broad jump mark to a grasshopper’s, and fashioning tiny hand-weights, climbing holds, and stability balls out of clay. This was all in the name of solving real problems real educators face, and it was all before noon.

Welcome to the Schoolyard Scrimmage.

No, it's not a recess brawl or a lunchtime food fight. It's a collaborative problem solving party.

The event, organized by Hi Howard of Front Range BOCES and ReWork, brought professionals from disparate fields (architecture, philanthropy, law) together with education administrators to come up with solutions to real problems using a method called rapid prototyping.

Let’s unpack that a bit. Rapid prototyping is a process for quickly testing out potential solutions and getting real feedback from real people. The central idea is that if you incorporate user feedback (or as I like to call it, real people feedback) into the design process as early as possible, and continue to incorporate it through ideation, refinement, and production, you’ll learn more and get to a good solution more quickly and more efficiently.

Google’s Tom Chi is a rapid prototyping advocate, and we watched a short video where he gave us the hows and whys. Here are a few of his verbal gems:

“Most businesses are just a big guessathon....Don’t guess. Learn.” Chi says that is may feel like guessing is cheaper, but doing is cheaper if you can figure out how to do things quickly.

Don’t fail. Learn. Start-ups like to boast about failing fast, but Chi prefers to call it learning fast. The concept of failure puts you in an uncreative mindset. Ideas that ultimately succeed are often slightly modified versions of things that, technically, were failures.

Don’t argue. Just try it. Chi recommends that if you find yourself discussing whether or not something would work, force yourself to stop talking and start prototyping.
Quotes are better as doodles, right?
Here’s how rapid prototyping works:
  1. As quickly as possible, move from an idea to a working model that approximates it.
  2. Try out the working model on a customer/user (or someone who can stand in for one).
  3. Improve your model based on the feedback and do the process all over again.
For example, you can prototype an interaction by acting out a conversation, you can prototype an information campaign by sketching it up, or you can prototype a physical solution by building it.

Easier said than done, right? At the Schoolyard Scrimmage, we worked in small, pre-determined groups and had a facilitated timeline that forced us to move from the brainstorming/ideation phase to the building phase to the testing phase. We tested and then iterated on two ideas -- so four cycles of rapid prototyping and user feedback. It was fast. And it was difficult. And it was fun.

In my group, working on how an elementary school might offer health and fitness programs in non-traditional spaces, brainstorming came easily. But rapid prototyping is not the same as rapid brainstorming. Finding the right focus that would allow us to prototype, learn, and iterate was the hardest part.

Nonetheless, the event was a success. And we all took home a new challenge: Bring rapid prototyping into our daily work. After few days back at my desk, I’ve found that this process makes sense conceptually, but has been hard to incorporate into my workflow. It’s more of a mental and cultural shift than anything else. But I have become more sensitive to times when we’re steeped in discussion rather than active experimentation, and I’ve been seeking out, and acting on, feedback as much as possible.

Whether it’s hopping along dinosaur tracks, doodling, or simply asking questions and soliciting feedback earlier and more frequently, I hope a rapid prototyping mindset will add a little color and insight to my day.

Best part: Learning - and trying - a new mode of thinking in a group setting.

Hardest part: Moving from ideation into prototyping and testing. For me, the ideation stage is the fun part. But it’s clear the prototyping and testing part is essential for ideas to succeed.

Biggest takeaway: If you find yourself guessing, speculating about, or discussing a problem, that’s great. It’s what we do as humans and it’s part of the creative process. But push yourself to find a quick and dirty way to test your guess. It’ll make your guesses go farther (and it’s also fun).

Monday, January 28, 2013

Playing with Google live forms and beer

I've been taking a course called "Diving Into Data," taught by Lisa Williams, through the Knight Center for Journalism in the Americas. Of course, I've been diving into data for some time now, but class has been fun and I've gotten to play with some fun tools that I haven't had time to experiment on my own, like Processing.

For this week's homework, we're building live forms using Google Drive and creating charts that automatically update based on the responses. I'm pretty predictable, so I made a short survey about craft beer. Click here if you want to take it.

Here are some charts based on the responses I've been getting so far. If everything works (fingers crossed!), these charts should update whenever someone new fills out the survey. This is a good test to see whether Google tools work well together, since Blogger is owned by Google.

I'll be playing with this more (prettifying the charts, adding information like the total number of survey respondents, etc.), but I wanted to get this up there so I can start getting feedback on it. The more interesting data (in my opinion) will be the quantitative data (how much do you spend per week on beer? what do you think is a reasonable price to pay for a beer?). I've set up a spreadsheet that tracks, in real time, the mean, range, and standard deviation of those responses, but haven't yet figured out the best way to display it.

You can see the raw data from the survey here.

And here's the compiled data. Let me know what you think...

Wednesday, December 05, 2012

Playing with D3.js and Beer

For months -- years? yeah years -- I've been telling myself I would learn D3.js. It's just so cool. I dabbled a bit in the past. (Dabbling is perhaps an overstatement. Whatever is smaller than a dabble, that's what I did.) I'm lazy. I'm busy. I'd rather watch an episode of Veronica Mars for the eighth time.

But recently, I finally found something that could motivate me to sit down and play with D3.js:

Some of my homebrew brown ale

Yup. Beer.

Data visualization and beer are two of my favorite things (plus writing plus running), so it makes sense. With the help of Scott Murray's excellent tutorials and a good strain of Brett, I got to work.

Various people have looked at breweries per capita by state in the U.S., but I wanted to show where the quality beer is concentrated. You know, beer you write songs about. Beer you want to share with your best friends. Beer that inspires you to learn some code. So I used data* from the Great American Beer Festival released on the number of medal winners at October's 2012 event. (Sadly, I missed it...) Basic question: Which state has the most, best beer?

Here's my first dataviz with D3, showing the total number of medals won in each state [or view here]:

Main takeaway: California rises above the rest when you look at sheer beer medals won. The other big winners are Colorado and Oregon (my home and my home state), which isn't a surprise if you know your beer.

Ok, it's ugly. It's not that informative. It doesn't have proper labels yet. It has this funky color scheme that doesn't really help you understand the data. There are lots of things I still need to figure out how to do (how do I make the labels for the "zero" states display in black instead of white? how do I make it so when I mouse-over one state, only that state changes from a label to a value? etc.). But bottom line is, the power of this tool is starting to emerge.

From here, I thought, not every state has the same number of breweries. So we still aren't looking at the density of good beer. And here's where I started to realize the beauty of D3. I created the visualization above to read the information from a CSV table. Now I wanted to add a new column to that table - breweries per state - and I could.

Are you impressed yet? Ok, stay with me...

I found that information** from the Brewers Association. Unfortunately, the Brewers Association only has data on the number of breweries per state through 2011. (They have the total breweries in the U.S. as of July 2012, but it isn't broken down by state.) So yes, you're right, there's a big flaw in the next piece of analysis I'm going to do. But remember, this is all a learning exercise so I can become a D3 wizard-in-training. (The upside is now I can go back and get the 2011 data from the Great American Beer Festival and redo my analysis - and in the process figure out a better way to extract/scrape data from a PDF.)

So. Found the breweries per state data, added it to my CSV file, and BOOM! I could redraw my chart so that it now displays the medals per brewery won in each sate. BAM! I only had to change two places in the code. (Values are coming soon - I need to figure out how to round the numbers so they look pretty.)

D3 viz number two, medals per brewery by state [or view here]:

Main takeaway: Wyoming breweries deliver with each earning roughly 2/3 of a medal. And Utah, my favorite unexpected underdog beer state, also cleans up. Uinta? Epic? Irresistible. 

Magic, huh? It's all through the power of scales, which are super nifty things in D3 you can read about here or here or here. Essentially, with D3 you don't have to figure out the scale. You can feed it new data and it will scale everything for you. Seeing as, when I make charts in Illustrator, I spend tons of time making sure the scales are accurate, this is pretty fantastic.

At this point, we're rolling, and doing basic visualization-for-exploration is easier (well, almost) than doing it in Excel. Promise. Because next, I downloaded some population data from the U.S. Census Bureau (again, 2011 data because they haven't released the 2012 ACS yet), and TADA!, now we can re-draw our bar chart to show medals won per 100,000 people. Cool.

D3 viz number three, medals per capita by state [or view here]:

Main takeaway: Wyoming still kills it. But Colorado and Oregon aren't too shabby.

And that's as far as I got. How long did this take me? Even with the steep-as-the-backside-of-Hope-Pass learning curve of D3, and even with me not actually knowing much about Javascript, this was a few hours sprinkled throughout one weekend. The most time was *still* spent finding and liberating the data, although my D3 noobishness evened the score a bit.

Future projects:
  • Figuring out those tweaks and little touches that will make these charts actually useful to someone.
  • D3 is known for having slick as hell transitions and animations. I want to make my charts morph into each other!
  • With D3, you can make maps. It's a natural fit for this dataset...
  • Wouldn't it be cool to be able to search for the nearest medal winner, based on where you are?
  • One year doesn't really give you an accurate picture of the beer scene, because judges are fickle and new breweries pop up all the time. It would be fun to compile several years of GABF data.
  • Not all of the categories have the same number of entries. Some are packed (everyone wants to submit an IPA) and some are relatively esoteric. You could weight the medals by the relative steepness of the competition.
And that's just the beginning. I've got a hunch beer data is exciting enough to keep me motivated.

Public Service Announcement: Hug a bar chart
I recently put together a speed-tutorial on creating bar charts in Fusion Tables for a work event. What I told people was, "Never underestimate the power of the bar chart. It's the workhorse of the data visualization world." I just want to give another shout out to bar charts, because really, they are so simple yet so flexible and powerful. So, go out and hug -- er, create one today.

*Both the GABF and the Brewer Association published their data in PDFs. Yup. But the story of getting it out is a blog post for another day...
**Brewers Association lists 1989 total breweries in 2011, but when I added the state numbers the total was 1987. Maybe the missing 2 are in Puerto Rico?

Wednesday, October 05, 2011

My favorite beers from the Great American Beer Festival

The Great American Beer Festival on Saturday was a blur. A delicious, beery, happy, blur. (See photo.) But! I did manage to scribble down my favorite beers in my beer diary (yes, I have one). The notes are probably not that useful ("yum! tasty! I want to drink it forever!" -- you get the idea...), but something about each of these beers made me fall in love. Oh, and I'm shamelessly biased toward Oregon beers, sour beers, and Belgian-style beers.

The buttons read: "I <3 Oregon beers" and "Oregon gives me wood" (from the Laurelwood Brewery in Portland)

Ching Ching by Bend Brewing, Bend, Oregon
Style: Sour with hibiscus and pomegranate
Notes: Pinky/orange color...simply amazing!
ABV: 9.5% (watch out)

Flemish Kiss by The Commons Brewery, Portland, Oregon
Style: "Bread" ale/pale ale
Notes: Slightly sour (just a hint!), lemony, fresh
ABV: 5.7%

The Stoic by Deschutes, Bend, Oregon
Style: Belgian quadruppel
Notes: Smells like a sour but finishes like a sweet Trappist
ABV: 11% (monastic strength)

Urkontinent by Dogfish Head, Milton, Delaware
Style: Belgian dubbel
Notes: Smells like coffee; brewed with rooibos tea
ABV: 8%

Red and White by Dogfish Head, Milton, Delaware
Style: Belgian wit
Notes: Sour and light, wine-y (aged in Pinot Noir barrels), really drinkable

Abbey's Ale by Seven Brides, Silverton, Oregon
Style: Belgian quadruppel
Notes: A sour quad! Super drinkable, not puckering -- my favorite of the night! I had seconds (and I wasn't the only one...)
ABV: ??

Cockeye Cooper by Uinta, Salt Lake City, Utah
Style: ??
Notes: Light, cherry. Strong flavor but really unique. Delicious.
ABV: 11%

Diamond Kings by Brugge Brasserie, Indianapolis, IN
Style: Belgian quadruppel
Notes: Ages in Cabernet barrels -- tastes heavenly!
ABV: ??

Also of note...
Everything crazy and experimental by Short's, all the tart and tangy fruit beers by Rocky Mountain Brewing in Colorado Springs (think New Glarus' Raspberry Tart, but better), and Laughing Dog's  Anubis imperial coffee porter.

How the Knight-Mozilla Hackfest in Berlin changed the way I think about programming

#Hacktoberfest left me feeling mushier than this plate of potatoes and mystery green goo. I want to give a group hug to the world! (Image credit: Flickr user russeljsmith shared with a Creative Commons license)
At least week’s hackfest, I saw so many people celebrating the simple act of creating something that actually worked. It’s a marvel. But the coolest part about this -- and bear with me as I get all mushy here -- was how the act of making something brought people together.

People are makers. We can’t help it. But why? Why do people write, bake, program or paint? 

Here's my best guess: Our minds are lonely places where our thoughts languish. Until, that is, we can turn them into essays, pies, code, pictures -- something another human being can interact with. Making -- whatever it is you make -- is a way of connecting.

Once we know how to make something, we understand it better. We understand the person who made it better. And we understand ourselves better. By learning new ways to make things, we expand what we are able to imagine. The world of possibilities explodes.

Let me defer to my favorite episode of Radiolab to explain. Words. Go listen to it. Right now. Please.

For those of you disregarding my advice...shame on you! But here’s a quick summary: Words aren’t just words -- they are ideas. Before we have the words for a concept, we don’t have the ability to understand it. This has been shown with spatial concepts, time, empathy, all kinds of things. Our ability to think is inseparably bound to language.

What does this have to do with programming? At last week’s hackfest, I realized that programming is the same as writing. Or rather, I was able to map the programming process -- which, previously, I'd found daunting and unwelcoming -- onto a process of making that I find intuitive: writing.

Writing is thinking. And so is programming.
Language expands our capacity to understand and interact with the world as beings who can write and speak. And new skills -- for example, programming -- expands our capacity to understand and interact with the world as beings who can make and create. Last week, by getting better acquainted with some of the basic building blocks of a program -- code, logic, how different elements interact -- I was able to imagine possibilities that I couldn’t before.

And that’s why I want to learn more. Now I’m hooked.

I’m inspired to continue to expand my skills as a programmer -- which is really just expanding my skills as a thinker and a maker. So what are my next steps?
  1. I’ve been working through Nathan Yau’s new book, Visualize This. I’m about halfway through, and my feet are appropriately wet with some Python, JavaScript and R. I want to keep going. Then go further.
  2. I started an intro to computer science class from MIT’s open courseware. I really enjoyed the first problem set. A lot a lot. But then I stopped. So I’m going to finish it.
  3. I want to apply what I’m learning through real projects. For me, that probably means data visualization.
Any other suggestions?

I’m amazed the diverse backgrounds of the #hacktoberfest participants. As Nicola mentioned in her blog, many people who are verifiable coding ninjas don’t have any formal background in CS or don’t work as programmers. So, it’d be interesting to, as a way of motivating others to take the plunge, collect stories about how people got into programming.

Here comes the audience participation part:
  • How did you first learn to code?
  • What was the first piece of code you wrote that you were really, truly proud of?
Maybe if more people heard those stories from seasoned (and enthusiastic) programmers, they might understand why it's a skill everyone can benefit from learning.