Esempio n. 1
0
def get_rank(request, algorithm, min_radius, max_radius):
	dajax = Dajax()
	user = request.session['fbuser']
	if 'graphwrapper' in request.session:
		G_wrapper = request.session['graphwrapper']
	else:
		G_wrapper = GraphWrapper(user.get_friend_ids(), user.get_friends_links())
		request.session['graphwrapper'] = G_wrapper
	if algorithm=='PageRank':
		#if False:
		if 'pagerank' in request.session:
			rank = request.session['pagerank']
		else:
			#rank = nx.pagerank_numpy(G_wrapper.G)
			print "Calculating pagerank"
			rank = G_wrapper.calculate_pagerank()
			request.session['pagerank'] = rank
	elif algorithm=='Betweenness':
		if 'betweenness' in request.session:
			rank = request.session['betweenness']
		else:
			rank = nx.betweenness_centrality(G_wrapper.G)
			request.session['betweenness'] = rank
	elif algorithm=='Eigenvector':
		if 'eigenvector' in request.session:
			rank = request.session['eigenvector']
		else:
			#rank = nx.eigenvector_centrality(G_wrapper.G)
			rank = G_wrapper.calculate_eigenvector_centrality()
			request.session['eigenvector'] = rank
	elif algorithm=='Degree':
		#if False:
		if 'degree' in request.session:
			rank = request.session['degree']
		else:
			rank = G_wrapper.calculate_degree_centrality()
			request.session['degree'] = rank
	else:
		return dajax.json();

	#Scale nodes' area (not radius!) between the areas of circles with min and max radius
	min_area = np.pi*min_radius**2
	max_area = np.pi*max_radius**2
	area_change = max_area-min_area
	min_rank = min(rank.values())
	max_rank = max(rank.values())
	rank_change = max_rank-min_rank
	node_radii = {}
	for node, rank in rank.iteritems():
		area = (rank-min_rank)/rank_change * area_change + min_area
		radius = (area/np.pi)**0.5
		node_radii[node] = radius
	dajax.add_data(node_radii, 'grapher.resizeNodes')
	result = dajax.json()
	return result
Esempio n. 2
0
def find_groups(request, n):
	dajax = Dajax()
	s = request.session
	user = s['fbuser']
	G_wrapper = GraphWrapper(user.get_friend_ids(), user.get_friends_links())
	#Why does storing this in the session not work...?
	dendogram = community.generate_dendogram(G_wrapper.G)
	level = int(n * (len(dendogram)-1))
	print "Level: %s" % level
	result =community.partition_at_level(dendogram, level)
	groupmap = {}
	for entry in result.iteritems():
		#print entry
		#print groupmap
		if entry[1] in groupmap:
			groupmap[entry[1]].append(entry[0])
		else:
			groupmap[entry[1]] = [entry[0]]
	colors = G_wrapper.get_colorscheme(len(groupmap))
	response=zip(colors, groupmap.values())
	#dajax.alert("Level: %s" % level)
	dajax.add_data(response, 'grapher.colorGroups')
	return dajax.json()