Tool meme of the week in the bit of the social web I inhabit seems to be the Nexus Facebook application, which just seems to be a prettier version of friendwheel.
This graph is that subset of the social graph Facebook knows about that I can see...
Possibly of more interest, though, is the "People You May Know" feature that Facebook have just rolled out (Facebook starts suggesting 'People You May Know'�), a clone, apparently, of a Linked In service (People You May Know on Linked In).
Looking at the above, what Facebook appears to be doing is recommending people to me who have a high number of edges in their social graph that connect to nodes (people) that are also in my social graph. Referring back to the Nexus view of my friends netowrk, the recommended friends are people who would not be out of place in my graph, and would be highly connected (i.e. have a high edge count) within it.
I guess one of the simplest (i.e. most literal) ways of identifying these friends is to do something like this:
- over all of my friends, build a list of unique people they have befriended (who are not already my friends);
- count the number of times each person in the list is friended by people who I know;
- if the number is larger than N, recommend that person to me as someone I may know, on the grounds that they know several of the people I know.
I wonder if another way of calculating it would be to look at the Facebook social graph, knock out all the links that connect me to my friends and that connect my friends to each other, and then recommend back to me the people who have the highest closeness, or, err, betweenness on the pruned graph between the people who are my friends?
(I really need to brush up on, extend and deepen my knowledge of graph theory and network analysis! (I have a load of old notes on social bookmark tagging looked at as matrices, somewhere...?) Here are few ways in to the vocab at least, maybe? Graph Theory: Part III (Facebook); Introduction to Network Analysis, Representation of Online Social Networks. Though it pains me to say so, I may need to leave the blogosphere and hit the literature for a bit... now where did I put all those original small world network papers from Newman, Watts et al.? ;-) Anyone interested in getting an informal study group together, maybe? ;-)
Anyway, anyway, just to note it so I don't forget it, when I saw the Facebook 'people you may know' results page, I immediately wondered whether there might be mileage in exploring this approach in the context of Course Profiles, using course codes to identify potential closeness of relationship with people I don't already know? (i.e. offering enhancements to, or refinements of, the current Study Buddy and Course Recommender services?
For example, for students who had declared the same courses and the same presentation dates for more than one course, we might be able to recommend "people you may remember studying with" (we'd have to have a privacy setting to out of this, of course).
For students who had taken, are taking and intend to take the same courses at similar times, we might be able to recommend potentially long lasting study friendships along the lines of "people who may be on the same course pathway as you". Where the courses (and ordered sequence of courses) is the same as someone else, but the dates are different, the recommendations may be of the form "people who have previously taken a similar pathway to you" and "people who are intending to take a similar pathway to the one you took/are taking" (that is, identifying mentoring or 'old hand' relationships between people at opposite ends of a qualification pathway).
[It's important to note here that I see Course Profiles as providing access to a graph, in part through app specific data, in part through access to Facebook data, that has two sorts of node (people and courses) and three sorts of edge (course-course, course-person, person-person), each of which may have several possible flavours. On different views over the graph, some of the edges may be directed (e.g. 'this course taken after that course') and ordered into lists (sequences of courses in the order they are taken, for example), and some may be weighted (e.g. '23 people took this course at the same time as that course, or 'this person is taking that 30 point course' (I don't know if properties of one class of node should be exposed as the weight of an edge when connected to a node of another class, but hey, it's something to learn about, right?!;-).]
Now ,do I start tinkering with my Python/Course Profiles analysis code again and see if I can get some 'people you may have known' code working, or do I fire up the Quattro and catch up on Ashes to Ashes?
Tags: facebook, fb, social graph, nexus, course profiles
Posted by ajh59 at March 28, 2008 10:39 PMIn Here Comes Everybody, Clay Shirky has a good and more, err, accessible :-) , discussion of networks.
Posted by: AJ Cann at March 29, 2008 01:31 PMI don't want accessible - i need practical, implementable and efficient; and that means maths... ;-)
Posted by: Tony Hirst at March 29, 2008 05:22 PMRobin Wilson in the maths department wrote the canonical undergraduate textbook on graph theory. I can lend you a copy if you can't find it. As a mathematician, I'd definitely find it easier to discuss this using the standard terminology of the area :-) The basics aren't too hard to pick up - I think I learned them in the sixth form.
Posted by: Juliette at March 29, 2008 05:22 PM