GoodMorning! Pinheads

GoodMorning! is a Twitter visualization tool that shows about 11,000 ‘good morning’ tweets over a 24 hour period, rendering a simple sample of Twitter activity around the globe. The tweets are colour-coded: green blocks are early tweets, orange ones are around 9am, and red tweets are later in the morning. Black blocks are ‘out of time’ tweets which said good morning (or a non-english equivalent) at a strange time in the day. Click on the image above to see North America in detail (click on the ‘all sizes’ button to see the high-res version, which is 6400×3600), or watch the video below to see the ‘good morning’ wave travel around the globe:

GoodMorning! Full Render #2 from blprnt on Vimeo.

I’ll admit that this isn’t a particularly useful visualization. It began as a quick idea that emerged out of the discussions following my post about Just Landed, in which several commenters asked to see a global version of that project. This would have been reasonably easy, but I felt that the 2D map made the important information in that visualization a bit easier to see. I wondered what type of data would be interesting to see on a globe, and started to think about something time based; more specifically, something in which you might see a kind of a wave traveling around the earth. I have been neck-deep in the Twitter API for a couple of months now, and eventually the idea trickled up to look at ‘good morning’ tweets.

The first task was to gather 24 hours worth of good morning tweets. Querying the Twitter API is easy enough – I posted a simple tutorial about doing this with Processing and Twitter4J a couple of weeks ago. The issue with gathering this many tweets is that you can only get the most recent 1,500 tweets with any search request. I needed many more than that – there are about 11,000 in the video, and those were only the ones from users with a valid location in their Twitter profile. All told, I ended up receiving upwards of 50,000 tweets. The only way to get this many results was to leave a ‘gathering’ client running for 24 hours. I should have put this on a server somewhere, but I didn’t, so my laptop needed to run the client for a full day to get the results. It ended up taking 5 days – a few false starts (the initial scripts choked on some strange iPhone locations), along with a couple of bone-headed errors on my part. Finally, I ended up with a JSON file which held the messages, users, dates and locations for a day’s worth of morning greetings.

I’d already decided to embrace the visual cliche that is the spinning globe. It’s reasonably easy to place points on a sphere once you know the latitude and longitude values – the first thing I did was to place all 11,000 points on the globe to see what kind of a distribution I ended up with. Not surprisingly, the points don’t cover the whole globe. I tried to include some non-english languages to encourage a more even distribution, but I don’t think I did the best job that I could have (if you have ideas for what to search for for other languages – particularly Asian ones, please leave a note in the comments). Still, I thought that there should be enough to get my ‘good morning wave’ going.

In my first attempts, I coloured the tweet blocks according to the size of the tweet. In these versions, you can see the wave, but it’s not very distinct:

GoodMorning! First Render from blprnt on Vimeo.

I needed some kind of colouring that would show the front of the wave – I ended up setting the colour of the blocks according to how far the time block was away from 9am, local time. This gave me the colour spectrum that you see in the latest versions.

Originally, I wanted to include the text in the tweets, but after a few very messy renders, I dropped that idea. I still think it might be possible to incorporate text in some way that doesn’t look like a pile of pick-up-sticks – I just haven’t found it yet. Here’s a render from the text-mess:


There are some inherent problems with this visualization. As mentioned earlier, it’s certainly not a complete representation of global Twitter users. Also, I’m relying on the location that the user lists in their Twitter profile to plot the points on the globe. It’s very likely that a high proportion of these locations could be inaccurate. Even if the location is correct, it might not be accurate enough to be useful. If you look at the bottom right of the images above, you’ll see a big plume of blocks in the middle of South America. This isn’t some undiscovered Twitter city in the middle of the jungle (El Tworado? Sorry.) – it’s the result of many users listing their location as simply ‘South America’. There’s one of these in every country and continent (this explains the cluster of Canadians tweeting from somewhere near Baker Lake).

On the other hand, it provides a model for how similar visualizations might be made – propagation maps of trending topics, plotting of followers over time, etc. Even in its current form, the tool does provide some interesting data – for example it seems that East Coasters tweet earlier than West Coaters (there’s more green in the East than in the West). I’m guessing that in the hands of people with more than my rudimentary statistics skills, these kinds of data sets could tell us some interesting – and (heaven forbid) useful things.

60 thoughts on “GoodMorning!”

    1. Abraham,

      I am working on a fairly detailed walk-through of the code for Just Landed, which at the root of it is very similar to the codebase for this project. Hopefully that will get finished and see the light of day soon.


      1. Heh, did it see the light of day? ;) Your Access talk has inspired me to learn Processing. So far I have a window and I can set its color! Then email ate my brain again. I'll get back to it, I swear!

        Is the code for this viz open?


  1. Pingback: /PITACO>
  2. Pingback: Twitted by slate
  3. Indeed very inspiring. But the globe view irritates me because I keep wondering what's (not) happening on the back side. It might be interesting to see the wandering daylight/night border and maybe a 'good night' wave following the 'good morning' one… (maybe with some bluish colors?)

    1. Paul,

      I agree! These are the inherent issues with a globe visualization. Even when the earth is dropped out, its hard to sort out what is happening on the 'flip side' from what is happening on the front. A good night wave is a good idea – I'm just dreading another 24 hours of data gathering!


    1. Yes! A line would be good. I thought about this originally but didn't seemnecessaryafter the colour coding. But I will render a version with a time line and see what happens. Thanks for the suggestion.

  4. found this via @monkchips on twitter – it is 7:34 AM here. great way to start my morning! thanks- I find the suggestions slightly amusing; I had to watch the video twice to keep up with the visual information and I think a bar would only detract from the moving wave of green. While a good night wave would be interesting – that too would compete visually and most viewers cannot process both patterns of information at once. It only makes sense that we cannot see what is happening 12 hours different/ other side of the globe if we are looking at a good morning wave.

  5. What about making a screen saver of it ? With the possibility to define a request (hashtag or something) in real time. Just something parsing a RSS feed of a search result on ?

    Make it for mac please :-)

    Great job by the way.

  6. In the second visualization, you have the clouds moving from East to West, exactly in the opposite direction to reality. Why?

    1. To mess with your mind!

      Actually, I didn't think about it too much. It would probably work better the other way – something to think about for the next render.

  7. Have you thought about doing the same kind of visualization for new years eve? Just replace "good morning" with "Happy new year". I've thought about it ever since I saw this blog post but I don't have the time to do it.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>