# Community Objects¶

cdlib aims at standardizing the representation of network communities. To fulfill such a goal, several Clustering classes are introduced, each one capturing specific community characteristics. All classes inherit from a same interface, thus sharing some common functionalities.

In particular cdlib algorithms can output the following Clustering types:

• NodeClustering: Node communities (either crisp partitions or overlapping groups);
• FuzzyNodeClustering: Overlapping node communities with explicit node to community belonging score;
• BiNodeClustering: Clustering of a Bipartite graphs (with the explicit representation of class homogeneous communities);
• AttrNodeClustering: Clustering of feature-rich (node-attributed) graphs;
• EdgeClustering: Edge communities;
• TemporalClustering: Clustering of Temporal Networks;

For a complete overview of the methods exposed by cdlib clustering objects refer to the following documentation.

## Using Clustering objects with your own algorithm¶

I have a clustering obtained by an algorithm not included in CDlib. Can I load it in a Clustering object to leverage the evaluation and visualization facilities of your library?

Yes you can.

Just transform your clustering in a list of lists (we represent each community as a list of node ids) and then create a NodeClustering (or any other Clustering) object from it.

from cdlib import NodeClustering

communities = [[1,2,3], [4,5,6], [7,8,9,10,11]]
coms = NodeClustering(communities, graph=None, method_name="your_method")


Of course, to compute some evaluation scores/plot community-networks you’ll also have to pass the original graph (as igraph/networkx object) while building the NodeClustering instance.