Skip to content
Related Articles

Related Articles

Implementation of Erdos-Renyi Model on Social Networks
  • Last Updated : 01 Oct, 2020

Prerequisite: Introduction to Social Networks, Erdos-Renyi Model

Erdos Renyi model is used to create random networks or graphs on social networking. In the Erdos Reny model, each edge has a fixed probability of being present and being absent independent of the edges in a network.

Implementing a Social Network using the Erdos-Renyi model:

Step 1) Import necessary modules like networkx, matplotlib.pyplot, and random module.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Import Required modules
import networkx as nx
import matplotlib.pyplot as plt
import random

chevron_right


 



Step 2) Create a distribution graph for the model.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Distribution graph for Erdos_Renyi model
def distribution_graph(g):
    print(nx.degree(g))
    all_node_degree = list(dict((nx.degree(g))).values())
  
    unique_degree = list(set(all_node_degree))
    unique_degree.sort()
    nodes_with_degree = []
    for i in unique_degree:
        nodes_with_degree.append(all_node_degree.count(i))
  
    plt.plot(unique_degree, nodes_with_degree)
    plt.xlabel("Degrees")
    plt.ylabel("No. of nodes")
    plt.title("Degree distribution")
    plt.show()

chevron_right


 

Step 3) Take N i.e number of nodes from the user.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Take N number of nodes as input
print("Enter number of nodes")
N = int(input())

chevron_right


 

Step 4) Now take P i.e the probability from the user for edges.

Python3



filter_none

edit
close

play_arrow

link
brightness_4
code

# Take P probability value for edges
print("Enter value of probability of every node")
P = float(input())

chevron_right


 

Step 5) Create a graph with N nodes without any edges.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Create an empty graph object
g = nx.Graph()
  
# Adding nodes
g.add_nodes_from(range(1, N + 1))

chevron_right


 

Step 6) Add the edges to the graph randomly, take a pair of nodes, and get a random number R. If R<P (probability), add an edge. Repeat steps 5 and 6 for all possible pairs of nodes and then display the whole social network (graph) formed.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Add edges to the graph randomly.
for i in g.nodes():
    for j in g.nodes():
        if (i < j):
              
            # Take random number R.
            R = random.random()
              
            # Check if R<P add the edge 
            # to the graph else ignore.
            if (R < P):
                g.add_edge(i, j)
    pos = nx.circular_layout(g)
      
    # Display the social network 
    nx.draw(g, pos, with_labels=1)
    plt.show()

chevron_right


 

Step 7) Display the connecting nodes.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Display connection between nodes    
distribution_graph(g)

chevron_right


Below is the complete program of the above step-wise approach:

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Implementation of Erdos-Renyi Model on a Social Network
  
  
# Import Required modules
import networkx as nx
import matplotlib.pyplot as plt
import random
  
  
# Distribution graph for Erdos_Renyi model
def distribution_graph(g):
    print(nx.degree(g))
    all_node_degree = list(dict((nx.degree(g))).values())
  
    unique_degree = list(set(all_node_degree))
    unique_degree.sort()
    nodes_with_degree = []
    for i in unique_degree:
        nodes_with_degree.append(all_node_degree.count(i))
  
    plt.plot(unique_degree, nodes_with_degree)
    plt.xlabel("Degrees")
    plt.ylabel("No. of nodes")
    plt.title("Degree distribution")
    plt.show()
  
          
# Take N number of nodes from user
print("Enter number of nodes")
N = int(input())
  
  
# Take P probability value for edges
print("Enter value of probability of every node")
P = float(input())
  
  
# Create an empty graph object
g = nx.Graph()
  
  
# Adding nodes
g.add_nodes_from(range(1, N + 1))
  
  
# Add edges to the graph randomly.
for i in g.nodes():
    for j in g.nodes():
        if (i < j):
              
            # Take random number R.
            R = random.random()
              
            # Check if R<P add the edge to the graph else ignore.
            if (R < P):
                g.add_edge(i, j)
    pos = nx.circular_layout(g)
      
    # Display the social network 
    nx.draw(g, pos, with_labels=1)
    plt.show()
  
# Display connection between nodes    
distribution_graph(g)

chevron_right


Output:

Enter number of nodes
10
Enter value of probability of every node
0.4
[(1, 5), (2, 3), (3, 4), (4, 2), (5, 3), (6, 5), (7, 4), (8, 2), (9, 2), (10, 2)]

Adding edges randomly in a graph

Degree Distribution Graph of the implementation of Erdos-Renyi model on the above program:

 

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :