From time to time I like to dabble in social network analysis. Now that Facebook has opened itself up to programmatic access, I thought I’d do some spelunking to see what I could learn. Here are a couple of questions I’d like to answer about the “clubbiness” of tech-company Facebookers:
1. Looking at the tech-company population as a whole, do people socialize within and across corporate networks more than elsewhere?
2. Looking at individual tech companies, which are more or less likely to mingle with other tech companies?
The questions are certainly answerable. Surfing around in Facebook, for example, I can view the profiles of my friends at Microsoft and elsewhere, and find out to what extent they, and their friends, socialize with people in their home corporate networks, with people in other corporate networks, and with people elsewhere. Since Facebook is a web application, the same information is — by definition — available by means of screenscraping, if you want to go to the trouble, which I don’t.
So far as I can see, though, you can’t automate this process using the Facebook API. A Facebook application can enumerate the friends of the logged-in user, but not those friends’ friends. It’s hardly surprising. There’s plenty of risk in allowing that kind of transitive data-mining, and no obvious benefit to Facebook.
I guess the Facebook way of doing this kind of analysis would be to create an application that goes viral, and pools information from the perspective of many different Facebookers. I’m unlikely to do that, but if it’s something you’re considering, here are a few points to consider.
First, in order to avoid the server meltdown problem that Marc Andreessen discusses in his analysis of the Facebook platform, it might be interesting to do a desktop application. I hadn’t known such a thing existed, but I wrote a little one today, using the Python bindings to the Facebook API. In this scenario, client-side code invokes the browser to do an interactive login, and then makes API calls into Facebook. The advantage is that if your application gets more popular than you could support with a service in the cloud, it’s no problem, because users download it and run it locally. The disadvantage, of course, is that they have to download it and run it locally. And especially for an application like this one, which intentionally crosses cultural boundaries, you’d have to be prepared to run on any client OS.
Second, it looks as though, in one respect, the Facebook API doesn’t quite work as advertised. My desktop application should at least be able to report how many of my own friends are in the Microsoft network. But while the documentation says I can query for all of my friends’ affiliations, I’m only seeing one affiliation per friend. So if a Microsoft friend’s primary affiliation is the Seattle network, my application doesn’t know that he’s a Microsoft friend. Am I right in regarding that as either a software or documentation bug?
June 28, 2007 at 8:06 am
I have long wanted to do this, and have written an application that could technically do it. However, it would be against the terms of the Facebook API:
facebook.friends.get
Returns the identifiers of the current user’s Facebook friends. The current user is determined from the session_key parameter. **The values returned from this call are not storable.** (emphasis added)
I haven’t done any work with affiliations, but looking at the documentation if there aren’t multiple affiliation elements under the affiliations element, it’s a bug. Check your code?
June 28, 2007 at 10:17 am
As a bit of background to some of the trends being seen in Facebook on an even broader term of reference (and from more of a sociological rather than programatical viewpoint) you may be interested to read…
“Viewing American class divisions through Facebook and MySpace” an essay written by Danah Boyd.
http://www.danah.org/papers/essays/ClassDivisions.html
June 28, 2007 at 11:27 am
> http://www.danah.org/papers/essays/ClassDivisions.html
Yes, I saw that. It’s one of the things that’s got me thinking (again) about pulling data directly out of these networks in order to see what’s going on.
June 28, 2007 at 2:48 pm
“looking at the documentation if there aren’t multiple affiliation elements under the affiliations element, it’s a bug. Check your code?”
Turns out to be a PyFacebook problem. The JSON rendering works properly, but the XML rendering truncates. I reported it.
June 29, 2007 at 5:47 pm
[...] Social network analysis in Facebook [...]
July 3, 2007 at 10:55 am
[...] were exposed to the web, ‘mine-able’ and mashable - now that would be exciting. But as Jon Udell points out, that would be risky and with “no obvious benefit to [...]
July 18, 2007 at 1:59 pm
“And especially for an application like this one, which intentionally crosses cultural boundaries, you’d have to be prepared to run on any client OS.”
Adobe AIR (http://labs.adobe.com/technologies/air/) would do nicely. Works great with Pownce.
April 17, 2008 at 12:03 pm
[...] also has some valuable links out to relevant commentary from Marc Andreesen, Jon Udell (did I mention that he’s accepted my invitation to join our new Advisory Group?) and [...]
October 20, 2008 at 2:27 pm
Does Facebook allow you to do “snowball sampling” — i.e start with your node and then get friends, FOAFs, etc.? LinkedIn allows you to get all of your friends, but not FOAFs. Without knowing how your friends are connected, and who your FOAFs are and how they are connected, it is hard to read much into your social graph.
Here is a quick social graph I did from my RYZE data [remember them???] when they allowed access to FOAFs…
http://orgnet.com/PersonalNetwork.gif