Cur*_*tLH 4 python clique networkx
我有一个网络,我想受集团约束,但我还没有弄清楚如何正确地做到这一点.我能够使用k-cores执行相同的过程,但不确定创建仅包含clique的图形的正确过程.
我希望如果我使用该k_core函数显示我的查找子图的过程,有人可以帮助我改变我的过程以使用该clique函数查找子图.
首先,我创建一个图表,我将使用空手道俱乐部:
In [1]: import networkx as nx
In [2]: g = nx.karate_club_graph()
Run Code Online (Sandbox Code Playgroud)
在iPython中绘制图表:
In [3]: pylab inline
Populating the interactive namespace from numpy and matplotlib
In [4]: nx.draw(g)
Run Code Online (Sandbox Code Playgroud)

接下来,我找到4核内的所有边(有4个或更多边):
In [5]: g_4k_edges = nx.k_core(g, k=4).edges()
Run Code Online (Sandbox Code Playgroud)
将这些边添加到新图:
In [6]: g_4k = nx.Graph()
In [7]: g_4k.add_edges_from(g_4k_edges)
Run Code Online (Sandbox Code Playgroud)
绘制4核图:
In [8]: nx.draw(g_4k)
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点的任何想法,但不是使用k核来绑定网络,而是使用具有4个或更多顶点的派系?
这是使用cliques生成子图的一种方法.
import networkx as nx
g = nx.karate_club_graph()
Run Code Online (Sandbox Code Playgroud)
查找4个或更多节点的所有派系:
cliques = nx.find_cliques(g)
cliques4 = [clq for clq in cliques if len(clq) >= 4]
Run Code Online (Sandbox Code Playgroud)
g从所有足够大的派系中创建一个子图:
nodes = set(n for clq in cliques4 for n in clq)
h = g.subgraph(nodes)
Run Code Online (Sandbox Code Playgroud)
丢弃h程度小于4的节点:
deg = nx.degree(h)
nodes = [n for n in nodes if deg[n] >= 4]
Run Code Online (Sandbox Code Playgroud)
所需图形k是h这些节点的子图:
k = h.subgraph(nodes)
Run Code Online (Sandbox Code Playgroud)
这是所需图表的图像:
nx.draw(k)
Run Code Online (Sandbox Code Playgroud)
