Executive Summary
This page is about mapping social networks, with the
Ecademy as a case-study. It explores
using a static image & dynamic applet with spring-and-balls model to
render a graphical representation of people's contacts. At present it
uses a flat linear space.
So, rather than read a bunch of dry graph theoretic nonsense you can
immediately skip to see:
(On with the show...)
The full story
The
Ecademy is a London-based
networking organization that has recently partnered with
Ryze and is in the process of
implementing some features specifically to aid the networking process.
One recently released addition is the ability to list other ecademy
members in your Contacts list. Any members can examine another's
Contacts list, and by listing someone in your Contacts you become
automatically listed in their Contacts.
Curious about visualizing these relationships, and their evolution, I
set about attempting to map them somehow. There are a few stages in
this: collecting the data, visualizing it, and navigating through it.
The collection (for a programmer) is straightforward since it's out in
the open: everyone can look at everyone else's network. Visualizing
quickly threw up some problems, but more on that later.
Categorizing maps
Directed and undirected
Graph theory talks of
directed and
undirected graphs.
Directed simply means the connections ("edges") between things ("nodes")
have a direction, either to or from. Two nodes can be connected in both
directions, having an edge in both directions. Undirected of course has
no direction, it's just a connection.
directed |
undirected |
|
|
Ecademy undirected, Ryze directed
Of course, in the graph theory sense
:-)
It's interesting to note that the automatic addition of a reciprocal
connection in Ecademy's Contact model effectively makes it an undirected
graph. It's possible to delete contacts, effectively reversing the
"add", removing the other side of the link as well. Ryze has a similar
outwardly visible mechanism but calls it "friends". Ryze however doesn't
automatically make a connection back, so is a directed graph.
Gathering Data
Data was acquired with a custom program that logged in as me and then
seeded its contact list from the
Top
Networkers page (ecademy login needed). It then, like a tireless
sales rep, slowly wandered around following each lead on each of its
contact's network pages, making a note in its little sales rep book not
to knock on the same door twice. The HTML data was converted into an
abstract graph-like representation serialized on disk.
Tech note: The code was written in Perl and made use of LWP
,
HTTP::*
, MLDBM
, DB_File
,
Storable
, and Memoize
. Source on request!
Visualizing the Map
My initial stab at drawing maps was using
Graphviz an
Open Source graph drawing software suite from AT&T Labs. Graphviz
figures out placement of nodes by assigning a preferred length to edges,
like springs between a bunch of balls, and treating it like a physical
system. The system is two dimensional: imagine the balls jammed between
two sheets of glass, and some weird Harry Potter magic to stop the
springs tangling. Eventually the balls come to rest, or close to it and
you have a graph. It's not always perfect but is generally surprisingly
good; they've put a lot of work into the heuristics and layout - more in
the
Graphviz overview.
Conveniently there is an adept Perl interface to GraphViz by Léon Brocard.
Contacts of contacts
Here's a graph of one person
Kenneth, and contacts
of his contacts (old image, kept because it's readable!). See how
Glenn is in Kenneth's contact list and you see all Glenn's contacts.
Can you spot the other person with someone besides Kenneth in their
address book?
This graph is depth two, walking two levels down the contact
list. You can see who all these people are, albeit as a flat list, in
action by using the ecademy friends of
friends page (requires being logged in).
Too Much Information!
Even the most cursory jaunt through the
networking pages at
ecademy will reveal a very richly connected graph. There are a core
of people that are very heavily connected. Of the set of people who have
contacts listed, this hyperconnected group has connections to almost all
of them. Try to make a mental map of this, a bunch of people with
connections to almost everyone else: a complete rat's nest of edges.
Two hyperconnected people
Let's take a look at this. Two such folk are at time of writing Thomas
and Julian, with about 350 and 100 connections respectively. The
following graph shows Thomas & Julian and
everyone they're connected to. Warning: this is a big 8000x6000 image and
may take a while to load (600KB) & render. Unless your machine is up
to it you may have a hard time. Try clicking your mouse wheel once
and scrolling around with the mouse. The coloring indicates the number
of people in each person's address book, more saturated is a larger
number of people.
Wow. Imagine adding everyone else's connections!
Live physical systems
Graphviz as mentioned uses a virtual physical model to lay out the
graph. It randomizes the initial positions and lets the springs sort
themselves out. What does this actually look like? Not satisfied with
mere static images I went out and found a Java version of such a
physical system:
Petridish by
Gerald de Jong (whom I met while
helping setting up the
N0Time exhibit in San
Francisco). Petridish starts all the points in a random position and you
can watch the springs find their stable positions. It starts out quite
frenetically, as you might imagine!
Kenneth, depth one. And Thomas and Julian, depth one --
this is very CPU-intensive and will probably look a mess.
Try pressing F
to halt the movement, then dragging the hubs
apart and look at the number of mutual connections. Press F
to restart the system. C
centers it and
PgUp/PgDown
zooms. Enjoy!
Java note: It's entirely possible the applet won't run on your
browser, especially if you have a Mac. Good luck anyway, and please let
me know if you have success! Currently known working on Galeon/Linux
using the Blackdown J2RE1.3, and an iBook running OS9.
Please by all means leave feedback, thoughts, interest at
ecademy.com -- thanks!
Navigating
Control + Left mouse button will navigate to a new person on the Java
version. The static graphviz versions are hyperlinked. I find this quite
a pleasant navigation tool. Try the
2D contacts
navigator.
Where next?
Clearly the 2D linear graphs are not satisfactory for visualizing these
relationships. I have been looking into hyperbolic browsers which
effectively distort the view as though pulling the centre of the screen
towards you. This provides a much larger effective area. This idea is
really designed for tree-like structures and it'll be interesting to see
whether it helps with these rat's nests.
Other techniques I'd like to try are clustering locally densely
connected sections. For example, say five people all know each other we
can create a star-shaped hub and then any others connecting to any of
these five can connect to their central hub.
Some phenomena perhaps worth investigating are the representations of
implied connections through continued conversations. This is possibly
where the "real" connections between people exist, with a dimension of
time one can get a sense of the strength, longevity and depth of a bond.
I can see in my mind's eye different thickness of edges, animations
along the edges to describe activity, color changes as long term
movement of relationships happen...
I'd love to chat more - if you have any links, knowledge on dense graph
theory, etc, let's talk.
Further reading & experimenting
A few links that may be of interest. Thanks to Darren Priest, Julian
Bond, Jonathan Greensted and Mike Butcher for suggestions!
Hyperbolic Browsers
General
Online examples