Open In App

Community detection in social networks using brute-force method

Last Updated : 05 Sep, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

Prerequisite- Python Basics, NetworkX Basics 

We are going to divide the nodes of the graph into two or more communities using the brute force method. The brute force method means we will try every division of nodes into communities and check whether the communities are correctly divided or not. We will use a brute force method for this task.

Algorithm:

  1. Create a graph of N nodes and its edges or take an inbuilt graph like a barbell graph.
  2. Now take two lists as FirstCommunity and SecondCommunity.
  3. Now start putting nodes into communities like put 1st node in FirstCommunity and rest N-1 nodes to SecondCommunity and check its inter and intra edges.
  4. Now we will make combinations using itertools.
  5. Repeat steps 3 and 4 for every combination.
  6. Now check which division is best by taking the ratio of intra/number of inter-community edges.
  7. Now find the value of FirstCommunity and SecondCommunity with maximum ratio and print that value.

Below is the implementation.

Python3




import networkx as nx
import itertools
  
  
def communities_using_brute(gfg):
  nodes = gfg.nodes()
  n = gfg.number_of_nodes()
  first_community = []
    
  for i in range(1, n//2 + 1):
    c = [list(a) for a in itertools.combinations(nodes, i)]
    first_community.extend(c)
  
  second_community = []
  
  for i in range(len(first_community)):
    b = list(set(nodes)-set(first_community[i]))
    second_community.append(b)
  
  # Which division is best...
  intra_edges1 = []
  intra_edges2 = []
  inter_edges = []
      
  # ratio of number of intra/number of inter
  # community edges
  ratio = []  
  
  for i in range(len(first_community)):
    intra_edges1.append(gfg.subgraph(first_community[i]).number_of_edges())
  
  for i in range(len(second_community)):
    intra_edges2.append(gfg.subgraph(second_community[i]).number_of_edges())
  
  e = gfg.number_of_edges()
  
  for i in range(len(first_community)):
    inter_edges.append(e-intra_edges1[i]-intra_edges2[i])
  
  # Calculate the Ratio
  
  for i in range(len(first_community)):
    ratio.append((float(intra_edges1[i]+intra_edges2[i]))/inter_edges[i])
  
  maxV=max(ratio)
  mindex=ratio.index(maxV)
  
  print('[ ', first_community[mindex], ' ] , [ ', second_community[mindex], ' ]')
  
# Example graph
gfg=nx.barbell_graph(5, 0)
communities_using_brute(gfg)


Output:

[ [0,1,2,3,4] ] , [ [8,9,5,6,7] ]


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads