In [132]:
    
import numpy as np
from numpy.linalg import matrix_rank
from random import randint
import random 
import matplotlib.pyplot as plt
import networkx as nx
import pandas as pd
    
In [127]:
    
number_of_layers=100
matrix_size=50
#------------------------------
Status=[ 1] #1 is increasing sparsity
prob_init= [0.25]#a vector of probability
Low_Layer= np.array([])
High_Layer= np.array([])
for s in range(len(Status)):
    for ini in range(len(prob_init)):
        init=prob_init[ini]
        print('ppp',prob_init[ini])
        M=np.eye(matrix_size, dtype=int)
        Probability_of_zero=init
        for i in range(number_of_layers):
            #print ('i',i)
            matrix=np.random.choice([0, 1], size=(matrix_size,matrix_size), p=[Probability_of_zero, 1-Probability_of_zero])
            matrix=Have_atleast_one_connection(matrix)
            #print(matrix)
            Non_zero_indexes=np.nonzero(matrix)
            #print(((i*matrix_size)+Non_zero_indexes[0]+1))
            #print((((i+1)*matrix_size)+Non_zero_indexes[1]+1))
            Low_Layer=np.append(Low_Layer,((i*matrix_size)+Non_zero_indexes[0]+1))
            High_Layer=np.append(High_Layer,(((i+1)*matrix_size)+Non_zero_indexes[1]+1))
            prob_prev=Probability_of_zero
            if Status[s]==1:
                Probability_of_zero+=((1-init)/number_of_layers)
            elif Status[s]==2:
                #Probability_of_zero=random.uniform(0,prob_prev)
                Probability_of_zero-=((init-0)/number_of_layers)
        Low_Layer.astype(int)
        High_Layer.astype(int)
        Low_Layer=list(Low_Layer)
        High_Layer=list(High_Layer)
    
    
In [5]:
    
def Have_atleast_one_connection(matrix):
    SUM=sum(matrix)
    index=np.where( SUM==0 )
    num = (index[0]).shape[0]
    make_a_connection_index=np.random.randint(matrix.shape[1], size=num)
    matrix[make_a_connection_index,index[0]]=1
    return matrix
    
In [130]:
    
#Wrting tsrget nodes and adjacency list in the file.
TargetNodes=((number_of_layers)*matrix_size)+Non_zero_indexes[1]+1
TargetNodes=np.sort(TargetNodes).T
np.savetxt('../PCen_2/target.txt', TargetNodes ,fmt="%d")
#===========================================
dat = np.array([Low_Layer, High_Layer])
dat = dat.T
np.savetxt('../PCen_2/toy.txt', dat, delimiter = ' ',fmt="%d")
    
In [137]:
    
data = pd.read_csv('../PCen_2/path_centrality.txt', sep="\t", header=None)
data.columns = ["NodeID", "UNnorPathCen", "NorPathCen"]
    
In [203]:
    
data = data.sort_values(['NodeID'], ascending=[1])
plt.figure()
data['NorPathCen'].plot.hist(stacked=True, bins=100)
plt.xlabel('Path Centrality Value')
plt.ylabel('Frequency')
#plt.savefig('Topological View(Path Centrality )/Overall_PathCentrality_Distribution.png')
plt.show()
    
    
In [209]:
    
plt.figure()
data['LayerNUmber']=np.ceil(data['NodeID']/50)
data['LayerNUmber'] = data['LayerNUmber'].astype(int)
Layer_Max_PC_Value=data.groupby(['LayerNUmber'], sort=False)['NorPathCen'].max()
Layer_Max_PC_Value =Layer_Max_PC_Value.to_frame().reset_index()
Layer_Max_PC_Value.columns=['LayerID','MaxPC']
plt.plot(Layer_Max_PC_Value['LayerID'], Layer_Max_PC_Value['MaxPC'], 'ro')
plt.axis([1, number_of_layers, 0, 0.18])
plt.xlabel('Layer_NUmber')
plt.ylabel('Maximum Path Centrality in the Layer')
#plt.savefig('Topological View(Path Centrality )/MaximumPCperLayer.png')
plt.show()
    
    
In [210]:
    
plt.figure()
data['LayerNUmber']=np.ceil(data['NodeID']/50)
data['LayerNUmber'] = data['LayerNUmber'].astype(int)
Layer_Max_PC_Value=data.groupby(['LayerNUmber'], sort=False)['NorPathCen'].min()
Layer_Max_PC_Value =Layer_Max_PC_Value.to_frame().reset_index()
Layer_Max_PC_Value.columns=['LayerID','MaxPC']
plt.plot(Layer_Max_PC_Value['LayerID'], Layer_Max_PC_Value['MaxPC'], 'ro')
plt.axis([1, number_of_layers, 0, 0.020])
plt.xlabel('Layer_NUmber')
plt.ylabel('MInimum Path Centrality in the Layer')
#plt.savefig('Topological View(Path Centrality )/MinimumPCperLayer.png')
plt.show()
    
    
In [216]:
    
data['NorPathCen'].plot.hist(stacked=True, bins=100)
plt.xlabel('Path Centrality Value')
plt.ylabel('Frequency')
#plt.savefig('Topological View(Path Centrality )/Overall_PathCentrality_Distribution.png')
plt.show()
    
    
In [250]:
    
data[data['LayerNUmber']==15]['NorPathCen'].plot.hist(stacked=True, bins=10, alpha=0.5,label="Layer 15")
data[data['LayerNUmber']==50]['NorPathCen'].plot.hist(stacked=True, bins=10, alpha=0.5,label="Layer 50")
data[data['LayerNUmber']==95]['NorPathCen'].plot.hist(stacked=True, bins=20, alpha=0.5 ,label="Layer 95")
plt.xlabel('Path Centrality Value')
plt.ylabel('Frequency')
plt.legend()
#plt.savefig('Topological View(Path Centrality )/DistributionPerLayer.png')
plt.show()
    
    
In [238]:
    
    
    
In [ ]: