def compute_features(self): # graph clique number self.add_feature( "graph_clique_number", lambda graph: clique.graph_clique_number(graph), "The clique number of a graph is the size of the largest clique in the graph", InterpretabilityScore(3), ) # number of maximal cliques self.add_feature( "num_max_cliques", lambda graph: clique.graph_number_of_cliques(graph), "The number of maximal cliques in the graph", InterpretabilityScore(3), ) n_cliques = lambda graph: len([ u for u in list(clique.enumerate_all_cliques(graph)) if len(u) > 1 ]) self.add_feature( "num_cliques", n_cliques, "The number of cliques in the graph", InterpretabilityScore(3), ) clique_sizes = lambda graph: [ len(u) for u in list(clique.enumerate_all_cliques(graph)) if len(u) > 1 ] self.add_feature( "clique_sizes", clique_sizes, "the distribution of clique sizes", InterpretabilityScore(3), statistics="centrality", ) @lru_cache(maxsize=None) def eval_cliques(graph): """this evaluates the main function and cach it for speed up.""" cliques = [ len(u) for u in list(clique.find_cliques(graph)) if len(u) > 1 ] return np.bincount(cliques)[np.nonzero(np.bincount(cliques))] maximal_clique_sizes = ( lambda graph: eval_cliques(graph)[0] / eval_cliques(graph)[-1]) self.add_feature( "clique_sizes_maximal", maximal_clique_sizes, "the ratio of number of max and min size cliques", InterpretabilityScore(3), )
def get_cliques_modular(conn, class_mapping, classes_sorted): degree_frequency = [] max_degree = 0 for clase in classes_sorted: # select rsn idx = np.where(class_mapping == clase)[0] tmp_conn = conn.copy()[np.ix_(idx, idx)] # convert to Graph G = nx.from_numpy_array(tmp_conn) # find cliques cliques = list(clique.enumerate_all_cliques(G)) clique_degrees = [len(clique) for clique in cliques] degrees, counts = np.unique(clique_degrees, return_counts=True) degree_frequency.append(counts) if np.max(degrees) > max_degree: max_degree = np.max(degrees) # all frequencies of the same size ext_degree_frequency = [] for f in degree_frequency: if len(f) != max_degree: new_f = np.zeros(max_degree) new_f[:len(f)] = f ext_degree_frequency.append(new_f) else: ext_degree_frequency.append(f) degree_names = [f'{k}-clique' for k in range(3, max_degree + 1)] return ext_degree_frequency, degree_names
def get_cliques_local(conn): # convert to Graph G = nx.from_numpy_array(conn) # find cliques cliques = list(clique.enumerate_all_cliques(G)) max_degree = len(cliques[-1]) v_counts = [] for degree in range(3, max_degree + 1): cliques_ = [clique for clique in cliques if len(clique) == degree] v, counts = np.unique(np.row_stack(cliques_), return_counts=True) if len(v) != len(conn): new_counts = np.zeros(len(conn)) new_counts[v] = counts else: new_counts = counts v_counts.append(new_counts) clique_names = [f'{k}-clique' for k in range(3, max_degree + 1)] return v_counts, clique_names
def filtered_cliques(graph, condition=None): if condition is None: condition = lambda c: len(c) > 1 return [ c for c in enumerate_all_cliques(graph.to_nx()) if graph.parent_node_id not in c and condition(c) and len(c) < len(graph) - 1 ]
def cliques(net): """Returns the cliques of a network Parameters ---------- net : Graph NetworkX Graph object Returns ------- dict dictionary of cliques of given size """ cliques_list = list(clique.enumerate_all_cliques(net)) cliques_dict = dict() for c in cliques_list: l = len(c) try: cliques_dict[l].append(c) except KeyError: cliques_dict[l] = [c] return cliques_dict
def max_clique(g): cliques = list(cl.enumerate_all_cliques(g)) print("These are cliques in the graph:") #one of the biggest max_clique_graph = g.subgraph(nodes=cliques[-1]) return max_clique_graph
def max_clique(g): cliques = list(cl.enumerate_all_cliques(g)) max_clique_graph = g.subgraph(nodes=cliques[-1]) return max_clique_graph
data = f.readline() x = int(str(data.split(' ')[0])) y = int(str(data.split(' ')[1])) #使用split将字符串以空格符号分开,前一个为x,后一个为y weight = int(str(data.split(' ')[2])) cost = int(str(data.split(' ')[3])) G.add_edge(x, y) G[x][y]['b'] = weight G[x][y]['c'] = cost #G.add_weighted_edges_from([(x,y,weight)]); #在网络中添加x-y这一条边 edgewidth.append(weight * 0.1) factor = factor + 1 if factor == 96: break else: print 'error' pos = nx.fruchterman_reingold_layout(G, dim=2, k=0.8, scale=1.5) #pos=spring_layout(G) nx.draw_networkx_nodes(G, pos, node_size=100, alpha=0.7) nx.draw_networkx_labels(G, pos, font_size=9) edge_labels = nx.get_edge_attributes(G, 'c') nx.draw_networkx_edges(G, pos) nx.draw_networkx_edge_labels(G, pos, font_size=8, clip_on=True, font_color='red') plt.show() #聚类 print enumerate_all_cliques(G)
def clique_sizes(graph): """clique_sizes""" return [len(u) for u in list(clique.enumerate_all_cliques(graph)) if len(u) > 1]
def n_cliques(graph): """n_cliques""" return len([u for u in list(clique.enumerate_all_cliques(graph)) if len(u) > 1])