Example of a GitHub user’s social graph. This undirected graph of users which mutually follow each other, contains 7243 nodes and 14484 edges. The video shows the convergence of the Force-based algorithm used to visualize the graph.
June 18, 2010
February 22, 2010
GitHub Social Graph – Part II
Here is a little Python class I made to retrieve a social graph from github. The ffDigraph() method generate a directed graph of a user by examining his followers list and his following list. The ffGraph() method is the most interesting one since it generate a undirected graph by adding only the nodes which mutually follow each other. This most restricted definition of the social graph is more significant then the the first one which often contains an overwhelming number of nodes following very popular project/user (like rails).
February 11, 2010
Now, let’s take a look at your GitHub neighborhood.
The GitHub social graph is an other cool thing to look at. The graph are made exactly the same way as the twitter one. I suspect the “commit” graph to be much more interesting.
import time # Import pygraph from pygraph.classes.graph import graph from pygraph.classes.digraph import digraph from pygraph.algorithms.searching import breadth_first_search from pygraph.algorithms.traversal import traversal from pygraph.readwrite.dot import write # Import pygraphviz from pygraphviz import * # Import github2 api client from github2.client import Github def getUserData(userID): ''' Retrieve the social graph info from the user ''' followingList = github.users.following(userID) followersList = github.users.followers(userID) return [followingList, followersList] def addUserToGraph(Graph, userID): ''' Add the user to the digraph ''' [followingList, followersList] = getUserData(userID) for snUser in followingList: if snUser not in Graph.nodes(): Graph.add_node(snUser) if (userID, snUser) not in Graph.edges(): Graph.add_edge([userID, snUser]) for snUser in followersList: if snUser not in Graph.nodes(): Graph.add_node(snUser) if (snUser, userID) not in Graph.edges(): Graph.add_edge([snUser, userID]) print str(len(Graph)) + ' nodes' # Some Parameters useScreenName = False Depth = 2 github = Github(username='YOURUSERNAME', api_token='YOURAPITOKEN') # List of users to graph myName = 'mlaprise' myID = 'mlaprise' [followingList, followersList] = getUserData(myID) # Graph creation githubGraph = digraph() githubGraph.add_node(myID) addUserToGraph(githubGraph, myID) # Graph traversal for d in range(Depth): retrievalItr = traversal(githubGraph, myID, 'post') try: while 1: userID=retrievalItr.next() ''' Add a user to the graph Waiting 60 sec if we go beyond the API limitation (60 requests/min) ''' try: addUserToGraph(githubGraph, userID) except RuntimeError: time.sleep(60) addUserToGraph(githubGraph, userID) except StopIteration: print 'Depth ' + str(d+1) + ' Done !' # Construct the image of the graph dot = write(githubGraph) githubGraphViz = AGraph(string=dot) githubGraphViz.graph_attr['label']='Twitter Graph of ' + myName githubGraphViz.graph_attr['dpi'] = '5' githubGraphViz.graph_attr['overlap'] = 'scale' githubGraphViz.node_attr['shape']='circle' githubGraphViz.node_attr['label']= '' githubGraphViz.node_attr['color']= 'blue' githubGraphViz.node_attr['style']= 'filled' githubGraphViz.edge_attr['color']='black' githubGraphViz.layout() # Draw as PNG githubGraphViz.draw(myName + '_graph.png') |
