In graph theory, a clustering coefficient is a measure of the degree to which nodes in a graph tend to cluster together. Evidence suggests that in most realworld networks, and in particular social networks, nodes tend to create tightly knit groups characterized by a relatively high density of ties; this likelihood tends to be greater than the average probability of a tie randomly established between two nodes (Holland and Leinhardt, 1971; Watts and Strogatz, 1998).
Two versions of this measure exist: the global and the local. The global version was designed to give an overall indication of the clustering in the network, whereas the local gives an indication of the embeddedness of single nodes.
Global clustering coefficient
The global clustering coefficient is based on triplets of nodes. A triplet consists of three connected nodes. A triangle therefore includes three closed triplets, one centered on each of the nodes (n.b. this means the three triplets in a triangle come from overlapping selections of nodes). The global clustering coefficient is the number of closed triplets (or 3 x triangles) over the total number of triplets (both open and closed). The first attempt to measure it was made by Luce and Perry (1949). This measure gives an indication of the clustering in the whole network (global), and can be applied to both undirected and directed networks.
Local clustering coefficient
A graph
The neighborhood
We define
The local clustering coefficient
An undirected graph has the property that
Let
lue
It is simple to show that the two preceding definitions are the same, since
These measures are 1 if every neighbor connected to
Example local clustering coefficient on an undirected graph. The local clustering coefficient of the green node is computed as the proportion of connections among its neighbours.
Here is the code to implement the above clustering coefficient in a graph. It is a part of the networkx library and can be directly accessed using it.
def average_clustering(G, trials = 1000 ):
"""Estimates the average clustering coefficient of G.
The local clustering of each node in `G` is the
fraction of triangles that actually exist over
all possible triangles in its neighborhood.
The average clustering coefficient of a graph
`G` is the mean of local clusterings.
This function finds an approximate average
clustering coefficient for G by repeating `n`
times (defined in `trials`) the following
experiment: choose a node at random, choose
two of its neighbors at random, and check if
they are connected. The approximate coefficient
is the fraction of triangles found over the
number of trials [1]_.
Parameters

G : NetworkX graph
trials : integer
Number of trials to perform (default 1000).
Returns

c : float
Approximated average clustering coefficient.
"""
n = len (G)
triangles = 0
nodes = G.nodes()
for i in [ int (random.random() * n) for i in range (trials)]:
nbrs = list (G[nodes[i]])
if len (nbrs) < 2 :
continue
u, v = random.sample(nbrs, 2 )
if u in G[v]:
triangles + = 1
return triangles / float (trials)

Note: The above code is valid for undirected networks and not for the directed networks.
The code below has been run on IDLE(Python IDE of windows). You would need to download the networkx library before you run this code. The part inside the curly braces represent the output. It is almost similar as Ipython(for Ububtu users).
>>> import networkx as nx
>>> G = nx.erdos_renyi_graph( 10 , 0.4 )
>>> cc = nx.average_clustering(G)
>>> cc #Output of Global CC 0.08333333333333333 >>> c = nx.clustering(G)
>>> c # Output of local CC { 0 : 0.0 , 1 : 0.3333333333333333 , 2 : 0.0 , 3 : 0.0 , 4 : 0.0 , 5 : 0.0 , 6 : 0.0 ,
7 : 0.3333333333333333 , 8 : 0.0 , 9 : 0.16666666666666666 }

The above two values give us the global clustering coefficient of a network as well as local clustering coefficient of a network.
Next into this series, we will talk about another centrality measure for any given network.
References
You can read more about the same at
.
This article is contributed by Jayant Bisht. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a studentfriendly price and become industry ready.
Recommended Posts:
 Mathematics  Graph theory practice questions
 Proof that Independent Set in Graph theory is NP Complete
 Space and time efficient Binomial Coefficient
 Program to find correlation coefficient
 Maximum binomial coefficient term value
 Fibonomial coefficient and Fibonomial triangle
 Sum of product of r and rth Binomial Coefficient (r * nCr)
 Replace the maximum element in the array by coefficient of range
 Central binomial coefficient
 Binomial Coefficient  DP9
 Eggs dropping puzzle (Binomial Coefficient and Binary Search Solution)
 Graph implementation using STL for competitive programming  Set 2 (Weighted graph)
 Convert the undirected graph into directed graph such that there is no path of length greater than 1
 Maximum number of edges that Nvertex graph can have such that graph is Triangle free  Mantel's Theorem
 Detect cycle in the graph using degrees of nodes of graph
 Convert undirected connected graph to strongly connected directed graph
 Combinatorial Game Theory  Set 2 (Game of Nim)
 Combinatorial Game Theory  Set 4 (Sprague  Grundy Theorem)
 Number Theory  Generators of finite cyclic group under addition
 Number Theory (Interesting Facts and Algorithms)