快速开始¶
CDlib 是一个Python库,允许进行网络分区提取、比较和评估。
我们设计它是为了与用于表示要聚类的网络的数据结构无关:它实现的所有算法都可以互换地接受igraph/networkx对象。
当然,这样的选择既有优势也有缺点。以下是您需要了解的主要几点:
优势 - 易于集成现有/新颖的(Python实现的)CD算法; - 输入和输出的标准化; - 零配置用户界面(例如,您不必重新调整数据!)
缺点 - 算法性能不可比较(执行时间、可扩展性……它们都取决于每个算法的原始实现方式); - 内存(不)效率:根据每种算法所需的结构类型,内存消耗可能很高; - 隐藏的转换时间:通常不是瓶颈,但从一种图表示转换到另一种可能需要“一些”时间(通常与图的大小成线性关系)
最重要的是,请记住 i) 每个算法都能够处理一定大小的图,以及 ii) 不同算法所支持的最大图大小可能会有很大差异。
教程¶
使用 CDlib 提取社区非常简单:
from cdlib import algorithms
import networkx as nx
G = nx.karate_club_graph()
coms = algorithms.louvain(G, weight='weight', resolution=1., randomize=False)
当然,您可以在所有可用的算法中进行选择(注意指定正确的参数)。结果,您将获得一个Clustering对象(或更具体的子类)。
聚类对象暴露了一组用于执行评估和比较的方法。例如,要获取分区模块性,请编写:
mod = coms.newman_girvan_modularity(g)
或者,等价地
from cdlib import evaluation
mod = evaluation.newman_girvan_modularity(g,communities)
此外,您还可以可视化网络和社区,绘制指标和相似性矩阵…请查看模块参考以获取一些示例。
我知道普通的教程被高估了:如果你想探索CDlib的功能,请开始使用我们的互动Google Colab Notebook吧!
常见问题解答¶
Q1. 我开发了一种新颖的社区发现算法/评估/可视化分析方法,并希望将其集成到CDlib中。我该怎么做?
A1. 太好了!只需在项目的GitHub上开一个问题,简要描述该方法(提供首次引入该方法的论文链接)以及Python实现的链接(如果有的话)。我们会尽快回复你,讨论下一步的步骤。
Q2. 你能在你的库中添加方法XXX吗?
A2. 这要看情况。你有Python实现的链接吗,或者你愿意帮助我们实现它吗?如果是这样,那就太好了。如果没有,一切皆有可能,但可能需要一些时间。