def closest_group(req_id): ''' 处理学院聚集度 ---------- parameter req_id 请求编号 return 渲染的模板 ''' global G_igraph, G_nx, nodes_vector, aca_graph, data paramas = request.args # GET 请求参数 if req_id == 0: # 渲染 coefficient 页面 return render_template('new_coefficience.html') elif req_id == 1: # 选择两个学院 # 参数:学院 ID aca1_id = int(paramas['acaId1']) - 1 aca2_id = int(paramas['acaId2']) - 1 # 分别计算两个院的 Cluster Coefficient aca1_graph_json = dp.graph_json( nx.DiGraph(aca_graph[aca1_id].get_edgelist()), nodes_vector) aca1_coefficient = c.cluster_coefficient_calculation( nx.DiGraph( aca_graph[aca1_id]. get_edgelist()).to_undirected(reciprocal=False)) aca2_graph_json = dp.graph_json( nx.DiGraph(aca_graph[aca2_id].get_edgelist()), nodes_vector) aca2_coefficient = c.cluster_coefficient_calculation( nx.DiGraph( aca_graph[aca2_id]. get_edgelist()).to_undirected(reciprocal=False)) # 根据请求返回需要的对应格式的数据 data = {'AcademyGraph1': aca1_graph_json, 'AcademyGraph2': aca2_graph_json, 'AcademyCoefficient1': aca1_coefficient, 'AcademyCoefficient2': aca2_coefficient} return make_response(json.dumps(data))
def student_equivalence(req_id): global G_igraph, G_nx, nodes_vector, data paramas = request.args if req_id == 0: return render_template('/new_equivalence.html') elif req_id == 1: stu_id = int(paramas['studentId']) graph_json = dp.graph_json(G_nx, nodes_vector) # 图信息 G = G_nx.to_undirected(reciprocal=False) matrix = nx.to_numpy_matrix(G) # 分别计算struct-cosine 和 regular-cosine,结果存入字典 array1 = c.select_similar(nodes_vector, matrix, stu_id, 0) array2 = c.select_similar(nodes_vector, matrix, stu_id, 1) top_ten_list = {'structral': array1, 'regular': array2} data = {'Graph': graph_json, 'Rank': top_ten_list} # 封装成 dict return make_response(json.dumps(data))
def top_students(req_id): ''' 处理名人推荐、学院搜索 ---------- parameter req_id 请求编号 return 前端需要的数据 ''' global G_igraph, G_nx, nodes_vector, aca_graph, data paramas = request.args # GET 请求参数 if req_id == 0: # 渲染 Centrality 页面 return render_template('new_centrality.html') elif req_id == 1: # 请求全校学生节点中心度值 ig_list = c.centrality_calculation_by_igraph(G_igraph) nx_list = c.centrality_calculation_by_networkx(G_nx) graph_json = dp.graph_json(G_nx, nodes_vector) # 图信息 c_list = ig_list + nx_list # Centrality 计算结果 # c_list = c.test(G_nx) # 测试:只使用 networkx 进行计算 # 对 Centrality 计算结果进行深度拷贝,用于计算 Top-N centrality_list = copy.deepcopy(c_list) top_n_list, rank_list = top_rank( centrality_list, min(10, len(G_nx.nodes()))) data = {'Centrality': c_list, 'Graph': graph_json, 'Rank': rank_list} # 封装成 dict return make_response(json.dumps(data)) elif req_id == 2: # 请求某个院学生节点中心度值 aca_id = int(paramas['search']) - 1 # 参数:学院 ID ig_list = c.centrality_calculation_by_igraph(aca_graph[aca_id]) nx_list = c.centrality_calculation_by_networkx( nx.DiGraph(aca_graph[aca_id].get_edgelist())) graph_json = dp.graph_json( nx.DiGraph(aca_graph[aca_id].get_edgelist()), nodes_vector) # 图信息 c_list = ig_list + nx_list # Centrality 计算结果 # c_list = c.test(G_nx) centrality_list = copy.deepcopy(c_list) top_ten_list, rank_list = top_rank(centrality_list, 10) print rank_list print top_ten_list data = {'Centrality': c_list, 'Graph': graph_json, 'Rank': rank_list} # 封装成 dict return make_response(json.dumps(data)) elif req_id == 3: # 请求某个学生节点中心度值 stu_id = int(paramas['search']) # 参数:学生 ID ig_list = c.centrality_calculation_by_igraph(G_igraph) nx_list = c.centrality_calculation_by_networkx(G_nx) graph_json = dp.graph_json(G_nx, nodes_vector) # 图信息 c_list = ig_list + nx_list # Centrality 计算结果 # c_list = c.test(G_nx) centrality_list = copy.deepcopy(c_list) rank_list = [] for c_dict in centrality_list: # 构造 Rank c_dict[c_dict.keys()[0]] = [] rank_list.append(c_dict) stu_centrality_list = [] # 取出所有计算该节点 Centrality 算法中对应的值,并以 key-value 存储 for centrality in c_list: stu_centrality = {} centrality_key = centrality.keys()[0] centrality_value = centrality.values()[0][stu_id] stu_centrality[centrality_key] = centrality_value stu_centrality_list.append(stu_centrality) data = {'StudentCentrality': stu_centrality_list, 'Centrality': c_list, 'Graph': graph_json, 'Rank': rank_list} # 封装成 dict return make_response(json.dumps(data))