import networkx
import math
import scipy.optimize
import numpy
from lib.time_graph import *
from lib.time_graph_signal_proc import *
from lib.vis import *
from lib.syn import *
from lib.io import *
from lib.datasets import *
from lib.time_graph import *
from lib.experiments import *
from IPython.display import Image
from datetime import datetime, date, time, timedelta
import statistics
def check_time_range_traffic(file_id, days, hours):
start_time = datetime.strptime("1/04/11 00:00", "%d/%m/%y %H:%M")
file_time = start_time + timedelta(minutes=int(file_id)*5)
check_day = False
for d in days:
if file_time.weekday() == d:
check_day = True
break
if check_day is False:
return False
check_hour = False
for h in hours:
if file_time.hour == h:
check_hour = True
break
return check_hour
friday_snaps = []
days = [4]
hours=range(24)
for i in range(0, 8640):
if check_time_range_traffic(i, days, hours):
friday_snaps.append(i)
friday_snaps = numpy.array(friday_snaps)
friday_snaps = friday_snaps[12*12:12*24]
friday_snaps = friday_snaps[0::36]
sG = read_graph(small_traffic["path"] + "traffic.graph", small_traffic["path"] + "traffic.data")
G = TimeGraph(0.)
for i in range(len(friday_snaps)):
for e in sG.edges():
G.add_edge(e[0], e[1], i)
F = read_time_values(small_traffic["path"]+"traffic", G, friday_snaps)
tc = TemporalCuts("name", "diff-sparse")
c = tc.cut(G)
print(c)
{'cut': array([ 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.]), 'score': 0.0004761904761904762, 'edges': 4.0, 'swaps': 0.0}
draw_time_graph_cut(G, "primary_school_td.svg", c["cut"])
/usr/local/lib/python3.6/dist-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number) if cb.is_numlike(alpha):
c = temporal_graph_transform(G, F, 2, 0.)
#c = temporal_graph_transform(G, numpy.ones(Fshape[0]), .0001)
draw_time_graph_cut_values(G, c["assign"], F, "primary_school_td.svg")
/usr/local/lib/python3.6/dist-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number) if cb.is_numlike(alpha):
{'0': array([ 0.18250847, -0.15794278]), '86': array([ 0.30310487, -0.20965114]), '32': array([ 0.06987987, -0.0838195 ]), '25': array([ 0.4225651 , -0.23740256]), '15': array([-0.03598401, 0.01582715]), '1': array([-0.67924587, 0.32749639]), '12': array([-0.75949408, 0.37252969]), '38': array([-0.63020302, 0.35149615]), '58': array([-0.5970037 , 0.27466767]), '87': array([-0.82077516, 0.42929772]), '17': array([-0.70000208, 0.43649227]), '48': array([-0.54186503, 0.26780126]), '22': array([-0.52596056, 0.23192355]), '2': array([-0.2243784 , 0.13293801]), '72': array([-0.32404565, 0.20205026]), '62': array([-0.12201514, 0.03567913]), '90': array([-0.18259888, 0.1502331 ]), '7': array([-0.25037719, 0.21747988]), '36': array([-0.44670351, 0.22944968]), '43': array([-0.00229913, 0.10767679]), '81': array([-0.16954768, -0.09943115]), '68': array([-0.10839213, 0.05334948]), '3': array([-0.24898908, -0.80134115]), '84': array([-0.30572616, -0.83581881]), '49': array([-0.20588472, -0.88959924]), '14': array([-0.28161772, -0.69364204]), '4': array([-0.33353714, -0.90994779]), '21': array([-0.31168058, -0.74988836]), '28': array([-0.18775438, -0.96405745]), '53': array([-0.30919261, -0.5669643 ]), '5': array([-0.91628616, 0.54044631]), '89': array([-0.9373539 , 0.58321715]), '34': array([-0.86983564, 0.49531281]), '69': array([-0.86241501, 0.54832194]), '79': array([-1. , 0.61287164]), '6': array([-0.09403134, 0.14770653]), '70': array([-0.04916571, 0.0920583 ]), '55': array([-0.04488249, 0.1302277 ]), '73': array([0.06722174, 0.0752563 ]), '51': array([-0.01931539, 0.19806565]), '8': array([0.39341628, 0.5494325 ]), '97': array([0.35205617, 0.47532322]), '67': array([0.299742 , 0.44779107]), '91': array([0.31050551, 0.38817362]), '9': array([0.76207623, 0.20153364]), '23': array([0.72224938, 0.22783425]), '99': array([0.81929201, 0.24897942]), '45': array([0.69356972, 0.14808059]), '11': array([0.79191568, 0.29209617]), '42': array([0.63776714, 0.15868927]), '24': array([0.60806907, 0.09556875]), '10': array([-0.7782612 , 0.50493499]), '66': array([0.84667124, 0.3480361 ]), '13': array([0.40555411, 0.05765848]), '16': array([0.29922913, 0.05629079]), '18': array([0.51337064, 0.06452052]), '44': array([0.40988923, 0.0340194 ]), '30': array([0.19648692, 0.08110081]), '65': array([0.28887517, 0.01837441]), '31': array([0.52556496, 0.09309966]), '46': array([-0.30739898, -0.44271557]), '20': array([-0.31633865, -0.66615772]), '85': array([-0.18030854, -0.07099775]), '19': array([0.1738795 , 0.03667884]), '60': array([0.10659391, 0.1377561 ]), '71': array([-0.28791866, -0.5762822 ]), '94': array([-0.26839832, -0.46705179]), '98': array([-0.49156488, 0.18242478]), '40': array([-0.56610687, 0.14669971]), '95': array([-0.36782521, 0.14225357]), '83': array([-0.42534436, 0.17265405]), '56': array([ 0.53529357, -0.24233811]), '27': array([ 0.60131454, -0.31310825]), '52': array([ 0.57258205, -0.1638762 ]), '26': array([-0.2341893, -0.1942139]), '37': array([-0.21300749, -0.22632152]), '33': array([-0.27702058, -0.31858063]), '47': array([-0.24537887, -0.34643236]), '39': array([ 0.60301813, -0.40214144]), '74': array([ 0.60485702, -0.26165828]), '29': array([ 0.50662661, -0.40174664]), '88': array([ 0.66870426, -0.46005252]), '50': array([ 0.57136335, -0.34435066]), '78': array([ 0.3894977 , -0.43449696]), '80': array([ 0.27711547, -0.45692074]), '76': array([0.06253763, 0.23321054]), '35': array([0.19725101, 0.22547405]), '61': array([0.26974763, 0.3014139 ]), '63': array([0.09328786, 0.18542861]), '93': array([0.17460215, 0.27755079]), '82': array([-0.0573306 , 0.12219849]), '41': array([ 0.1817284 , -0.47988771]), '64': array([ 0.1172176 , -0.51001667]), '96': array([0.16284315, 0.1393929 ]), '57': array([0.00482533, 0.27491996]), '75': array([0.31537127, 0.13355094]), '92': array([ 0.52789467, -0.03963841]), '77': array([0.44309983, 0.07362373]), '54': array([-0.21919693, 0.11622148]), '59': array([0.2513154 , 0.36562967])}
draw_time_graph_partitions(G, "primary_school_td.svg", c["assign"], False)
L2_error(F, c['transform'])
0.19050809628051743
K = [5, 10, 20, 40]
results = compression_experiments(G, F, K, 5)
results
array([[ 0.87305588, 0.70768239, 0.59836889, 0.46158191], [ 0.19189918, 0.17817595, 0.17081546, 0.15817729], [ 0.22343697, 0.21890282, 0.20816496, 0.18720717], [ 0.28669265, 0.27703713, 0.25879688, 0.23989775]])
K = [5, 10, 20, 40]
results = numpy.array([[ 0.87305588, 0.70768239, 0.59836889, 0.46158191],
[ 0.1925559 , 0.17970188, 0.16977256, 0.16329276],
[ 0.23102427, 0.2132812 , 0.19909818, 0.18990198],
[ 0.28271556, 0.27284988, 0.26597022, 0.26199616]])
output_file_name = "figs/compression_traffic.png"
plot_compression_experiments(results, K, output_file_name, .9, 9, 0.1, 1.)
Image(filename=output_file_name)
G = read_time_graph(primary_school["graph"], 0.05)
F = generate_dyn_heat(G, 1, 15.)
F = F.flatten()
F = F - numpy.mean(F)
F = F / numpy.linalg.norm(F)
K = [5, 10, 20, 40]
results = compression_experiments(G, F, K, 5)
output_file_name = "figs/compression_heat.png"
plot_compression_experiments(results, K, output_file_name, .9, 9, 0.05,1.)
Image(filename=output_file_name)