Beispiel #1
0
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))
Beispiel #2
0
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))
Beispiel #3
0
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))