#! /usr/bin/python3
import networkx as nx
from utils import *
import warnings
import time
import random
import argparse
warnings . filterwarnings ( " ignore " )
def random_sample ( graph , k ) :
nodes = list ( graph . nodes ( ) )
n = int ( k * len ( nodes ) )
nodes_sample = random . sample ( nodes , n )
G = graph . subgraph ( nodes_sample )
if not nx . is_connected ( G ) :
print ( " Graph is not connected. Taking the largest connected component " )
connected = max ( nx . connected_components ( G ) , key = len )
G_connected = graph . subgraph ( connected )
print ( nx . is_connected ( G_connected ) )
print ( " Number of nodes in the sampled graph: " , G . number_of_nodes ( ) )
print ( " Number of edges in the sampled graph: " , G . number_of_edges ( ) )
return G_connected
if __name__ == " __main__ " :
parser = argparse . ArgumentParser ( )
parser . add_argument ( " graph " , help = " Name of the graph to be used. Options are ' checkins-foursquare ' , ' checkins-gowalla ' , ' checkins-brightkite ' , ' friends-foursquare ' , ' friends-gowalla ' , ' friends-brightkite ' " )
parser . add_argument ( " k " , help = " Percentage of nodes to be sampled. Needs to be a float between 0 and 1 " )
parser . add_argument ( " niter " , help = " Number of rewiring per edge. Needs to be an integer. Default is 5 " )
parser . add_argument ( " nrand " , help = " Number of random graphs. Needs to be an integer. Default is 5 " )
parser . add_help = True
args = parser . parse_args ( )
# if no input is given for niter and nrand, set them to default values
if args . niter == None :
print ( " No input for niter. Setting it to default value: 5 " )
args . niter = 5
if args . nrand == None :
print ( " No input for nrand. Setting it to default value: 5 " )
args . nrand = 5
# the name of the graph is the first part of the input string
name = args . graph . split ( ' - ' ) [ 1 ]
if ' checkins ' in args . graph :
G = create_graph_from_checkins ( name )
elif ' friends ' in args . graph :
G = create_friendships_graph ( name )
G . name = str ( args . graph ) + " Checkins Graph "
# sample the graph
G_sample = random_sample ( G , float ( args . k ) )
# compute omega
start = time . time ( )
print ( " \n Computing omega for graph: " , G . name )
omega = nx . omega ( G_sample , niter = int ( args . niter ) , nrand = int ( args . nrand ) )
end = time . time ( )
print ( " Omega coefficient for graph {} : {} " . format ( G . name , omega ) )
print ( " Time taken: " , round ( end - start , 2 ) )