LifeCampTO social graph

After LifeCampTO, I asked people to give me the list of people they wanted to talk to (or, well, those people’s primary keys ;) ). I’m still figuring out how to do a great little mail merge that reminds people of the keywords, but along the way, I thought I might I’d learn more about network visualization.

Here’s the resulting graph: (click on it for a larger version)

LifeCampTO social graph

So, what does this graph say?

You can see that most people have quite a lot of follow-up conversations ahead. It wasn’t the kind of event where most people walked away with only two or three conversations, although they might have smaller follow-up conversations with different groups of people. It might be interesting to do some cluster analysis around topics, and maybe someday I’ll figure out how to encode the data in order to make that analysis easier. ;) Based on this, our on-the-fly decision to have three big conversations turned out to have made sense, although it would also be interesting to try having small conversations about both popular and niche topics, and then having people come together at the end (or on a wiki).

Getting to this graph (and to the individualized graphs I’ve just figured out how to produce – it highlights each person’s connections) involved a lot of bubblegum and string.

  1. I typed in the data people had written down, using to form the upper triangle of an adjacency matrix. Two people’s sheets were missing, and one person didn’t have any connections incoming or outgoing. =( Thank you, programming competitions, for all those lovely data structures.
  2. I copied the adjacency matrix and pasted it onto itself using OOo’s Paste Special – Transpose, Skip Empty Cells. This gave me a full adjacency matrix.
  3. I used a really long and hairy OOo formula to concatenate the cells into Emacs Lisp code as an associative list, with extra information and an edge list.
  4. I copied that into Emacs and processed the associative list’s edges. I needed to do that anyway in order to be able to e-mail people personalized e-mail with all of their introductions, instead of sending one e-mail per edge. Along the way, I got the idea of visualizing the network diagram, so I spun off some code to output a full edge list in DOT format for visualization with circo.
  5. I used a command like
    circo -Gsplines=true < -Tpng > lifecampto.png

    to generate the graph shown.

  6. Then I thought it would be cool to personalize the graphs, too, so I wrote some more Emacs Lisp to generate personalized DOT files that highlighted the recipient in green and the recipient’s requested links/nodes in green, too. I used a Bash for loop to turn all those personalized DOT files into PNG files.

Example of a personalized image:

Tomorrow, I’ll work on the mail merge. =)

A little computer science is a dangerous, dangerous thing.

  • Will

    Haha, this is a sick post…! I could barely understand it! It looks exciting though! ;)

  • Francis Ocoma

    Cool graphs, Sacha!

    Awww, poor #6 looks so alone. :(

  • Charles Cave

    The second diagram is more interesting. The first diagram has so many lines at almost looks like everyone is connected to everybody!

    Can you update the diagram to include arrowheads indicating who wants to connect to who?

    For example, 4 and 12 have a connecting line but does this mean 4 wants to talk to 12, or does 12 want to talk to 4 or both? What if 12 does NOT want to connect to 4 but 4 wants to connect to 12???

    Maybe you are analyzing the relationships too much?

    • Charles Cave

      I forgot to say that the reason your post caught my attention was a Scheme
      script I wrote for GIMP to draw Star Polygons

    • Sacha Chua

      We weren’t consistent about asking people to write down numbers whenever they wanted to get in touch with someone, so I decided to make all the arrows undirected (indicating that one or the other or both wanted to get in touch). In the future, it would be very interesting to do a directional analysis – but also, potentially, quite a sensitive thing. ;)

      Also, if you want to do this the easy way, you could use the network diagrams supported by Many Eyes. It might be prettier, too.

      It was actually useful getting this kind of a sense of the relationships, because I can then ask questions about what would change that. For example, if we had gone with lots of small conversations instead of one big introduction-and-conversation round, then we’d see a much less dense network. Or maybe if we could analyze the networks on the fly (maybe during registration) and figure out optimal seating and rearrangement, wouldn’t that be awesome? Physical arrangement and meeting structure affect network structure, and there’s lots to play with. =) If you don’t know what things look like or what to measure, you’re experimenting blindly. It’ll be fun to try different things and see what the results will be!

  • David Ing

    Your social graph reminds me of the icosahedron that is used in the Team Syntegrity approach — see very old description by Markus Schwaniger where it is illustrated, in multiple dimensions.

    This work is rooted in the work of Stafford Beer, whose legacy continues on in the Metaphorum Group. A syntegration is a structured way to ensure that everyone has a voice, and everyone gets a perspective on the views of others. It might not have been appropriate for the meeting you had — it takes time to have work through all of the permutations of people — but it’s helpful to keep in mind as an option.

    Since you live in Toronto, I should let know that probably take the subway past the home of Allenna Leonard, who is one of the world’s experts in Team Syntegrity She’s a former president of the American Society for Cybernetics, and the incoming president (2009-2010) of the International Society for the Systems Sciences. I should really arrange for the two of you to meet.