# Modularity¶

Modularity measures strength of division of a network into communities (modules,clusters). Measures takes values from range $$<-1,1>$$. Value close to 1 indicates strong community structure. When $$Q=0$$ then the community division is not better than random.

$$Q=\sum_{i=1}^{k}{(e_{ii}-a_i^2)}$$

Where $$k$$ is number of communities, $$e_{ii}$$ is number of edges that has both ends in community $$i$$ and $$a_i$$ is number of edges with one end in community $$i$$

For further informations please refer to [lecture] and [Newman].

import ml.sparkling.graph.operators.OperatorsDSL._
import org.apache.spark.SparkContext
import org.apache.spark.graphx.Graph

implicit ctx:SparkContext=???
// initialize your SparkContext as implicit value
val graph =???
// load your graph (for example using Graph loading API)

val modularity: Double= graph.modularity()
// Modularity value for graph


References:

 [lecture] Carl Kingsford (2009). Modularity, PDF
 [Newman] Newman, M. E., & Girvan, M. (2004). Finding and evaluating community structure in networks. Physical review E, 69(2), 026113. PDF