Commit eab8c906 authored by Bogdan's avatar Bogdan

Created Test (Assertion) + other minor changes

parent 3b390ffb
...@@ -4,3 +4,5 @@ ...@@ -4,3 +4,5 @@
*.log *.log
**/env **/env
**/venv **/venv
src/data-hub/role-stage-discovery-microservice/app/resultSimilarityDictN14992C221.json
...@@ -328,36 +328,51 @@ definitions: ...@@ -328,36 +328,51 @@ definitions:
type: string type: string
example: "5efdc04ac43add0aba567d76" example: "5efdc04ac43add0aba567d76"
cluster_containedNodesDict: cluster_containedNodesDict:
$ref: "#/definitions/ConnectedNode" type: array
items:
type: string
example: "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568"
cluster_connNodesDict: cluster_connNodesDict:
$ref: "#/definitions/ConnectedNode" type: array
items:
$ref: "#/definitions/ConnectedNode"
cluster_connClustDict: cluster_connClustDict:
type: object type: array
additionalProperties: items:
type: number $ref: "#/definitions/ConnectedClusterAux"
example:
"cluster_label": nrOfConnectedNodes
#"-1": 42
"0": 39
"6969": 1
#not used, should be removed?
#cluster_connectionsNr ConnectedClusterAux:
type: object
properties:
cluster_label:
type: string
example: "-1"
cluster_layer:
type: string
example: "FinishedTime_Layer"
connectionWeight:
type: number
example: 42
ConnectedNode: ConnectedNode:
type: object type: object
properties: properties:
cluster_label: node_id:
type: string type: string
node_layer: node_cluster:
type: string type: string
uniqueID: node_layer:
type: string type: string
example: example:
"cluster_label": "2230" "node_id": "27a08ed0facc7d68a0818c7695dad391cf48d6095e57ec9159bc0668543f159b"
"node_cluster": "2230"
"node_layer": "Destination_Layer" "node_layer": "Destination_Layer"
"uniqueID": "a95075f5042b1b27060080156d87"
#not used, should be removed? #not used, should be removed?
#finished_time #finished_time
#latitude_Destination #latitude_Destination
...@@ -373,18 +388,16 @@ definitions: ...@@ -373,18 +388,16 @@ definitions:
ClusterSimilarityDictionary: ClusterSimilarityDictionary:
properties: properties:
clusterTuple: cluster1_label:
type: array type: string
items: example: "0"
type: string cluster2_label:
minItems: 2 type: string
maxItems: 2 example: "1"
example: [ cluster_layer:
#cluster_label1 type: string
0, example: "Price_layer"
#cluster_label2
319
]
similarityValues: similarityValues:
type: object type: object
additionalProperties: additionalProperties:
......
...@@ -7,7 +7,7 @@ class ClusterC: ...@@ -7,7 +7,7 @@ class ClusterC:
:param cluster_layer: The layer name of the 'source' cluster :param cluster_layer: The layer name of the 'source' cluster
:param cluster_runId: The run which calculated the connections :param cluster_runId: The run which calculated the connections
:param cluster_containedNodesDict: Ids of nodes contained in the 'source' cluster :param cluster_containedNodesDict: Ids of nodes contained in the 'source' cluster
:param cluster_connNodesDict: Ids of nodes contained in 'dest' clusters, where the 'dest' cluster is uniquely identifiable by layer name and cluster label :param cluster_connNodesDict: Node Objects contained in 'dest' clusters, where the 'dest' cluster is uniquely identifiable by layer name and cluster label
:param cluster_connClustDict: Layer name, cluster label and weight for each 'dest' cluster :param cluster_connClustDict: Layer name, cluster label and weight for each 'dest' cluster
''' '''
...@@ -16,7 +16,6 @@ class ClusterC: ...@@ -16,7 +16,6 @@ class ClusterC:
self.cluster_label = cluster_label self.cluster_label = cluster_label
self.cluster_layer = cluster_layer self.cluster_layer = cluster_layer
self.cluster_runId = cluster_runId self.cluster_runId = cluster_runId
self.cluster_containedNodesDict = cluster_containedNodesDict ###RENAME TO curClNodesDict #Keys are frozensets(touples) uniqueID and cluster # self.cluster_containedNodesDict = cluster_containedNodesDict #Keys are frozensets(touples) == frozenset(uniqueID, cluster and layer) Value is the Node UniqueId
self.cluster_connNodesDict = cluster_connNodesDict #Keys are frozensets(touples) uniqueID and cluster #problem if you remove newNodes and oldNodes lists.. there may be duplicates self.cluster_connNodesDict = cluster_connNodesDict #Keys are frozensets(touples) (uniqueID:str,node_cluster:str,node_layer:str) Values are NodeC Objects
self.cluster_connClustDict = cluster_connClustDict #dictionary: layer -> (dict2: cluster_label -> nrOfConnections ) OR dictionary: cluster_label -> nrOfConnections self.cluster_connClustDict = cluster_connClustDict #dictionary: (dict[(cluster_label,clusterlayer)] -> nrOfConnections/weightOfTheConnection )
#cluster_connClustDict ------> look at both newNodes and oldNodes
class LayerC: class LayerC:
def __init__(self,layer_name,cluster_Dict): def __init__(self,layer_name:str,cluster_Dict):
self.layer_name = layer_name '''
self.cluster_Dict = cluster_Dict This class represents the Layer which contains the connected clusters.
\ No newline at end of file
:param layer_name: The layer name which contains the clusters
:param cluster_Dict: The connected_clusters contained in this layer.
'''
self.layer_name = layer_name
self.cluster_Dict = cluster_Dict # Dict[cluster_label] --> ClusterC object
\ No newline at end of file
class NodeC: class NodeC:
'''
This class represents the Node data contained in a Cluster.
:param node_layer: The layer name which contains the node
:param node_cluster: The connected_cluster.cluster_label which contains in this layer.
:param uniqueID: Id of the node. Only unique in inside a single cluster. NOT unique between multiple clusters/layers.
'''
def __init__(self, cluster_label, node_layer, uniqueID): def __init__(self, node_cluster, node_layer, uniqueID):
self.cluster_label = cluster_label self.node_cluster = node_cluster # str
self.node_layer = node_layer self.node_layer = node_layer # str
self.uniqueID = uniqueID self.uniqueID = uniqueID # str
\ No newline at end of file \ No newline at end of file
from datetime import datetime from datetime import datetime
class ConnectedRun: class ConnectedRun:
'''
This class represents the RunId and Time when the Connecting of the Clusters and Calculating the Similarity between clusters is executed.
:param run_id: The MongoDB _id of the Run to uniquely identify it.
:param timeOfExec: Datetime object containing info when the run was finished.
'''
def __init__(self,run_id,timeOfExec): def __init__(self,run_id,timeOfExec):
self.run_id = run_id self.run_id = run_id
self.timeOfExec = timeOfExec self.timeOfExec = timeOfExec
\ No newline at end of file
...@@ -14,6 +14,7 @@ LOGGER = logging.getLogger(__name__) ...@@ -14,6 +14,7 @@ LOGGER = logging.getLogger(__name__)
############################# #############################
import connexion import connexion
# load swagger config # load swagger config
app = connexion.App(__name__, specification_dir='configs/') app = connexion.App(__name__, specification_dir='configs/')
app.add_api('swagger.yml') app.add_api('swagger.yml')
......
...@@ -29,13 +29,18 @@ def minMaxFunction(iIndex,jIndex,clusterList) -> Dict[str,int]: ...@@ -29,13 +29,18 @@ def minMaxFunction(iIndex,jIndex,clusterList) -> Dict[str,int]:
#calculate th #calculate th
for curCluster in clusterList: #jCluster.cluster_layer == iCluster.cluster_layer, so i only compare to one for curCluster in clusterList: #jCluster.cluster_layer == iCluster.cluster_layer, so i only compare to one
iClusterTuple = (iCluster.cluster_label,iCluster.cluster_layer)
jClusterTuple = (jCluster.cluster_label,jCluster.cluster_layer)
#iClusterKey = frozenset(iClusterTuple)
#jClusterKey = frozenset(jClusterTuple)
curLayer = curCluster.cluster_layer curLayer = curCluster.cluster_layer
if(( curLayer != iCluster.cluster_layer) if(( curLayer != iCluster.cluster_layer)
and ( curCluster.cluster_connClustDict.__contains__(iCluster.cluster_label)) and ( curCluster.cluster_connClustDict.__contains__(iClusterTuple))
and ( curCluster.cluster_connClustDict.__contains__(jCluster.cluster_label))): and ( curCluster.cluster_connClustDict.__contains__(jClusterTuple))):
# min part # min part
curMin = min(curCluster.cluster_connClustDict[iCluster.cluster_label],curCluster.cluster_connClustDict[jCluster.cluster_label]) curMin = min(curCluster.cluster_connClustDict[iClusterTuple],curCluster.cluster_connClustDict[jClusterTuple])
if(outputDict.__contains__(curLayer) == False): if(outputDict.__contains__(curLayer) == False):
outputDict[curLayer]= curMin outputDict[curLayer]= curMin
else: # max part else: # max part
...@@ -68,28 +73,32 @@ def calcEuclideanDist(iIndex,jIndex,clusterList) -> Dict[str,float]: ...@@ -68,28 +73,32 @@ def calcEuclideanDist(iIndex,jIndex,clusterList) -> Dict[str,float]:
#calculate the distance //paralelizable #calculate the distance //paralelizable
for curCluster in clusterList: #jCluster.cluster_layer == iCluster.cluster_layer, so i only compare to one for curCluster in clusterList: #jCluster.cluster_layer == iCluster.cluster_layer, so i only compare to one
iClusterTuple = (iCluster.cluster_label,iCluster.cluster_layer)
jClusterTuple = (jCluster.cluster_label,jCluster.cluster_layer)
#iClusterKey = frozenset(iClusterTuple)
#jClusterKey = frozenset(jClusterTuple)
curLayer = curCluster.cluster_layer curLayer = curCluster.cluster_layer
#considering only clusters from other layers for distance calc #considering only clusters from other layers for distance calc
if( curLayer != iCluster.cluster_layer): if( curLayer != iCluster.cluster_layer):
######BUUUG, WHAT IF THEY DON'T SHARE A CONNECTION?
###### if in a layer both cluster don't have a connection --> distance of 0. Identical in regard to that layer. correct or false? ###### if in a layer both cluster don't have a connection --> distance of 0. Identical in regard to that layer. correct or false?
iVal = 0 iVal = 0
jVal = 0 jVal = 0
connectedClusters = False connectedClusters = False
if(curCluster.cluster_connClustDict.__contains__(iCluster.cluster_label)): if(curCluster.cluster_connClustDict.__contains__(iClusterTuple)):
iVal = curCluster.cluster_connClustDict[iCluster.cluster_label] iVal = curCluster.cluster_connClustDict[iClusterTuple]
connectedClusters = True connectedClusters = True
if(curCluster.cluster_connClustDict.__contains__(jCluster.cluster_label)): if(curCluster.cluster_connClustDict.__contains__(jClusterTuple)):
jVal = curCluster.cluster_connClustDict[jCluster.cluster_label] jVal = curCluster.cluster_connClustDict[jClusterTuple]
connectedClusters = True connectedClusters = True
if (connectedClusters == False): if (connectedClusters == False):
#clusters aren't connected => assign the max int value if there are no prior elements in list #clusters aren't connected => assign the max int value if there are no prior elements in list
if(outputDict.__contains__(curLayer) == False): if(outputDict.__contains__(curLayer) == False):
outputDict[curLayer]= 2147483647 #notConnected outputDict[curLayer]= 2147483647 #notConnected to that particular layer at all
else: else:
#clusters ARE connected => add the squares part of the euclid distance to the value of the similarity #clusters ARE connected => add the squares part of the euclid distance to the value of the similarity
if(outputDict.__contains__(curLayer) == False): if(outputDict.__contains__(curLayer) == False):
...@@ -140,10 +149,10 @@ def calculateSimilarity(inputLayerDict): ...@@ -140,10 +149,10 @@ def calculateSimilarity(inputLayerDict):
while ( j<len(clusterList)): while ( j<len(clusterList)):
jCluster = clusterList[j] jCluster = clusterList[j]
if (iCluster.cluster_layer == jCluster.cluster_layer): #calculate similarity only from the same layer if (iCluster.cluster_layer == jCluster.cluster_layer): #calculate similarity only from the same layer
tuplekey = (clusterList[i].cluster_label,clusterList[j].cluster_label) tuplekey = (clusterList[i].cluster_label,clusterList[j].cluster_label,iCluster.cluster_layer)
key = frozenset(tuplekey)
#### EUCLIDEAN DISTANCE /minMax #### EUCLIDEAN DISTANCE /minMax
similarityDict[key]=calcEuclideanDist(i,j,clusterList) similarityDict[tuplekey]=calcEuclideanDist(i,j,clusterList)
#print("#### similarityDict i:"+str(i)+" j:"+str(j)) #print("#### similarityDict i:"+str(i)+" j:"+str(j))
#print("#### "+str(similarityDict)) #print("#### "+str(similarityDict))
......
...@@ -7,7 +7,7 @@ def sortFunctByNode(node): ...@@ -7,7 +7,7 @@ def sortFunctByNode(node):
try : try :
return node.uniqueID return node.uniqueID
except: except:
print(node.cluster_label) print(node.node_cluster)
print(node.node_layer) print(node.node_layer)
print(node.uniqueID) print(node.uniqueID)
...@@ -55,35 +55,37 @@ def calculateWeights(inputLayerDict) -> Dict[str,LayerC]: ...@@ -55,35 +55,37 @@ def calculateWeights(inputLayerDict) -> Dict[str,LayerC]:
#Compute a connection #Compute a connection
if (iNode.node_layer != jNode.node_layer) and (iNode.uniqueID == jNode.uniqueID): if (iNode.node_layer != jNode.node_layer) and (iNode.uniqueID == jNode.uniqueID):
iOldTuple = (iNode.uniqueID,iNode.cluster_label) iNodeTuple = (iNode.uniqueID,iNode.node_cluster,iNode.node_layer)
jOldTuple= (jNode.uniqueID,jNode.cluster_label) jNodeTuple= (jNode.uniqueID,jNode.node_cluster,jNode.node_layer)
iOldKey = frozenset(iOldTuple) iNodeKey = frozenset(iNodeTuple)
jOldKey = frozenset(jOldTuple) jNodeKey = frozenset(jNodeTuple)
#iForeignKey = iClusterTuple = (iNode.node_cluster,iNode.node_layer)
#jForeignKey = jClusterTuple = (jNode.node_cluster,jNode.node_layer)
#iClusterKey = frozenset(iClusterTuple)
#jClusterKey = frozenset(jClusterTuple)
#Check if old node dicts has this node: if not add to ConnDictionary and to OldNodesDict #Check if old node dicts has this node: if not add to ConnDictionary and to OldNodesDict
# Layer . Cluster . OldNodesDict . Does not contain the OTHER node # Layer . Cluster . OldNodesDict . Does not contain the OTHER node
if (inputLayerDict[iNode.node_layer].cluster_Dict[iNode.cluster_label].cluster_connNodesDict.__contains__(jOldKey) == False): if (inputLayerDict[iNode.node_layer].cluster_Dict[iNode.node_cluster].cluster_connNodesDict.__contains__(jNodeKey) == False):
#add node j at cluster i #add node j at cluster i
if (inputLayerDict[iNode.node_layer].cluster_Dict[iNode.cluster_label].cluster_connClustDict.__contains__(jNode.cluster_label)): if (inputLayerDict[iNode.node_layer].cluster_Dict[iNode.node_cluster].cluster_connClustDict.__contains__(jClusterTuple)):
inputLayerDict[iNode.node_layer].cluster_Dict[iNode.cluster_label].cluster_connClustDict[jNode.cluster_label]+=1 inputLayerDict[iNode.node_layer].cluster_Dict[iNode.node_cluster].cluster_connClustDict[jClusterTuple]+=1
else: else:
inputLayerDict[iNode.node_layer].cluster_Dict[iNode.cluster_label].cluster_connClustDict[jNode.cluster_label]=1 inputLayerDict[iNode.node_layer].cluster_Dict[iNode.node_cluster].cluster_connClustDict[jClusterTuple]=1
#add node to old nodes #add node to old nodes
inputLayerDict[iNode.node_layer].cluster_Dict[iNode.cluster_label].cluster_connNodesDict[jOldKey]=jNode inputLayerDict[iNode.node_layer].cluster_Dict[iNode.node_cluster].cluster_connNodesDict[jNodeKey]=jNode
if (inputLayerDict[jNode.node_layer].cluster_Dict[jNode.cluster_label].cluster_connNodesDict.__contains__(iOldKey) == False): if (inputLayerDict[jNode.node_layer].cluster_Dict[jNode.node_cluster].cluster_connNodesDict.__contains__(iNodeKey) == False):
#add node i at cluster j #add node i at cluster j
if (inputLayerDict[jNode.node_layer].cluster_Dict[jNode.cluster_label].cluster_connClustDict.__contains__(iNode.cluster_label)): if (inputLayerDict[jNode.node_layer].cluster_Dict[jNode.node_cluster].cluster_connClustDict.__contains__(iClusterTuple)):
inputLayerDict[jNode.node_layer].cluster_Dict[jNode.cluster_label].cluster_connClustDict[iNode.cluster_label]+=1 inputLayerDict[jNode.node_layer].cluster_Dict[jNode.node_cluster].cluster_connClustDict[iClusterTuple]+=1
else: else:
inputLayerDict[jNode.node_layer].cluster_Dict[jNode.cluster_label].cluster_connClustDict[iNode.cluster_label]=1 inputLayerDict[jNode.node_layer].cluster_Dict[jNode.node_cluster].cluster_connClustDict[iClusterTuple]=1
#add node to old nodes #add node to old nodes
inputLayerDict[jNode.node_layer].cluster_Dict[jNode.cluster_label].cluster_connNodesDict[iOldKey]=iNode inputLayerDict[jNode.node_layer].cluster_Dict[jNode.node_cluster].cluster_connNodesDict[iNodeKey]=iNode
j+=1 j+=1
i+=1 i+=1
......
...@@ -8,15 +8,15 @@ from typing import Dict ...@@ -8,15 +8,15 @@ from typing import Dict
#from db.repository import Repository #from db.repository import Repository
import json import json
import requests import requests
from routes.clustersets import get_by_name
#Only used for testing from db.repository import *
from routes.connClusters import get_conn_clusters repo = Repository()
from routes.similarity import get_similarity
from routes.connRun import get_connected_run
def getClusterDataFromSwagger(limitNrCluster,limitNrNodes):
def getClusterDataFromSwagger(limitNrCluster:int,limitNrNodes:int,listURLs:List[str] = None):
''' Calculates the nr of connections/weights between the clusters contained in the "inputLayerDict". Connections are made between clusters from DIFFERENT layers. ''' Calculates the nr of connections/weights between the clusters contained in the "inputLayerDict". Connections are made between clusters from DIFFERENT layers.
...@@ -24,22 +24,26 @@ def getClusterDataFromSwagger(limitNrCluster,limitNrNodes): ...@@ -24,22 +24,26 @@ def getClusterDataFromSwagger(limitNrCluster,limitNrNodes):
:param int limitNrNodes: Limits Clusters considered. None or <0 values == No limit :param int limitNrNodes: Limits Clusters considered. None or <0 values == No limit
:param List[str] listURLs : Specifies from which URLs to download data. If not provided/None => uses Default URLs
:returns: Dict{layername: LayerC}. Returns a Dict with the data gathered from the DB :returns: Dict{layername: LayerC}. Returns a Dict with the data gathered from the DB
:rtype: Dict{string: LayerC} :rtype: Dict{string: LayerC}
''' '''
print("Entered dataInput") print("Entered dataInput")
listURLs = [] if(listURLs == None):
#"""
listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/Price_Layer/clusters') listURLs = []
listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/FinishedTime_Layer/clusters') #"""
listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/Destination_Layer/clusters') listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/Price_Layer/clusters')
#listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/StartingPoint_Layer/clusters') listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/FinishedTime_Layer/clusters')
#listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/Reputation_Layer/clusters') listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/Destination_Layer/clusters')
#listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/StartingTime_Layer/clusters') #listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/StartingPoint_Layer/clusters')
#listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/User_Layer/clusters') #listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/Reputation_Layer/clusters')
#""" #listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/StartingTime_Layer/clusters')
#listURLs.append('http://articonf1.itec.aau.at:30103/api/layers/User_Layer/clusters')
#"""
#Maximum of these nodes PER Layer will be considered #Maximum of these nodes PER Layer will be considered
if (limitNrCluster == None ) or (limitNrCluster < 0): if (limitNrCluster == None ) or (limitNrCluster < 0):
...@@ -57,7 +61,7 @@ def getClusterDataFromSwagger(limitNrCluster,limitNrNodes): ...@@ -57,7 +61,7 @@ def getClusterDataFromSwagger(limitNrCluster,limitNrNodes):
return layerDict return layerDict
def loadJson(url) : def loadJson(url:str) :
res = requests.get(url, timeout=30) res = requests.get(url, timeout=30)
jsonData = json.loads(res.content) jsonData = json.loads(res.content)
return jsonData return jsonData
...@@ -77,7 +81,6 @@ def getClusterDataFromMongo(layerNameList,limitNrCluster,limitNrNodes): ...@@ -77,7 +81,6 @@ def getClusterDataFromMongo(layerNameList,limitNrCluster,limitNrNodes):
:rtype: Dict{string: LayerC} :rtype: Dict{string: LayerC}
''' '''
layerDict = dict()
#Maximum of these nodes PER Layer will be considered #Maximum of these nodes PER Layer will be considered
...@@ -90,7 +93,7 @@ def getClusterDataFromMongo(layerNameList,limitNrCluster,limitNrNodes): ...@@ -90,7 +93,7 @@ def getClusterDataFromMongo(layerNameList,limitNrCluster,limitNrNodes):
#imports and translates the data from JSON into usefull format #imports and translates the data from JSON into usefull format
#returns layerdiction -> Layer -> clusterDict -> Cluster -> nodesDict -> Nodes #returns layerdiction -> Layer -> clusterDict -> Cluster -> nodesDict -> Nodes
for name in layerNameList: for name in layerNameList:
newData = get_by_name(name) newData = get_mongoDB_cluster_by_layerName(name)#repo.get_clusters_for_layer(name)
layerDict = populateWithNewNodesSingleLayer(newData[0:limitNrCluster],layerDict,limitNrNodes) layerDict = populateWithNewNodesSingleLayer(newData[0:limitNrCluster],layerDict,limitNrNodes)
return layerDict return layerDict
...@@ -136,11 +139,11 @@ def populateWithNewNodesSingleLayer(inputData, layerDict, limitNrNodes) -> Dict[ ...@@ -136,11 +139,11 @@ def populateWithNewNodesSingleLayer(inputData, layerDict, limitNrNodes) -> Dict[
curLayerName, curLayerName,
curNode.get("UniqueID")) curNode.get("UniqueID"))
if(newNode != None): if(newNode != None):
if(newNode.uniqueID!= None and newNode.cluster_label!= None and newNode.node_layer!= None): if(newNode.uniqueID!= None and newNode.node_cluster!= None and newNode.node_layer!= None):
if( limitNrNodes>0): if( limitNrNodes>0):
auxtuple = (newNode.uniqueID,newNode.cluster_label) auxtuple = (newNode.uniqueID,newNode.node_cluster,newNode.node_layer) #unique because the input data is only from one layer
key = frozenset(auxtuple) key = frozenset(auxtuple)
#check for duplicates #TODO #check for duplicates
cluster_containedNodesDict[key]= newNode #overwrite if already there cluster_containedNodesDict[key]= newNode #overwrite if already there
limitNrNodes-=1 limitNrNodes-=1
...@@ -148,15 +151,15 @@ def populateWithNewNodesSingleLayer(inputData, layerDict, limitNrNodes) -> Dict[ ...@@ -148,15 +151,15 @@ def populateWithNewNodesSingleLayer(inputData, layerDict, limitNrNodes) -> Dict[
if oldCluster is None: if oldCluster is None:
# def __init__(self,cluster_label,cluster_layer,cluster_containedNodesDict,cluster_connNodesDict, cluster_connectionsNr,cluster_connClustDict): # def __init__(self,cluster_label,cluster_layer,cluster_containedNodesDict,cluster_connNodesDict, cluster_connectionsNr,cluster_connClustDict):
newCluster = ClusterC( newClusterC = ClusterC(
curCluster.get("cluster_label"), curCluster.get("cluster_label"),
curLayerName, curLayerName,
None, None,
cluster_containedNodesDict, cluster_containedNodesDict,
dict(), dict(),
dict()) #may not be empty anymore) dict())
clusterDict[newCluster.cluster_label] = newCluster clusterDict[newClusterC.cluster_label] = newClusterC
else: else:
oldCluster.cluster_containedNodesDict = cluster_containedNodesDict oldCluster.cluster_containedNodesDict = cluster_containedNodesDict
clusterDict[curCluster.get("cluster_label")] = oldCluster clusterDict[curCluster.get("cluster_label")] = oldCluster
...@@ -168,33 +171,117 @@ def populateWithNewNodesSingleLayer(inputData, layerDict, limitNrNodes) -> Dict[ ...@@ -168,33 +171,117 @@ def populateWithNewNodesSingleLayer(inputData, layerDict, limitNrNodes) -> Dict[
def getConnClusterDataFromMongo(): def getConnClusterDataFromMongo():
mongoArray = get_conn_clusters() '''
Gets the Connected_clusters data from the MongoDB database. The data is found in the collection "conected_clusters"
Data returned can be used as input for calculateSimilarity function
:returns: Dict{layername: Layer}. Returns the layerDict containing connected_clusters from DB
:rtype: Dict{string: Layer}
'''
mongoArray = repo.get_connected_clusters()
outputDict = convertRetrievedClustersFromMongo(mongoArray) outputDict = convertRetrievedClustersFromMongo(mongoArray)
return outputDict return outputDict
def getSimilarityDataFromMongo(): def getSimilarityDataFromMongo():
result = get_similarity() '''
Gets the computed Similarity between clusters data from the MongoDB database. The data is found in the collection "similarity"
:returns: Dict. Returns the a dictionary from DB containing the computed similarity.
:rtype: Dict
'''
result = repo.get_similarity()
return result return result
def getConnectedRunDataFromMongo(): def getConnectedRunDataFromMongo():
result = get_connected_run() '''
Gets the connected_run data from the MongoDB database.
The data is found in the collection "connected_run"
:returns: List[Dict]. Returns the a List with run objects from DB.
:rtype: List
'''
result = repo.get_connected_run()
return result return result
def convertRetrievedClustersFromMongo(inputArray): def convertRetrievedClustersFromMongo(inputArray):
'''
Helper function used to convert the JSON from the DB into the Python Code structure used in the functions
'''
LayerDict = {} layerDict = {}
for entry in inputArray: for entry in inputArray:
if not(entry['cluster_layer'] in LayerDict): curLayerName = entry["cluster_layer"]
LayerDict[entry['cluster_layer']] = []
#if it's a new layer, create it
cl = ClusterC( if not(curLayerName in layerDict):
entry['cluster_label'], clusterDict = dict()
entry['cluster_layer'], layerDict[curLayerName] = LayerC(curLayerName,clusterDict)
entry['cluster_runId'],
entry['cluster_containedNodesDict'], #get the new cluster
entry['cluster_connNodesDict'], newClusterC = ClusterC(entry["cluster_label"],
entry['cluster_connClustDict']) entry["cluster_layer"],
LayerDict[entry['cluster_layer']].append(cl) entry["cluster_runId"],
makeChangeNodesDict(entry["cluster_containedNodesDict"],entry["cluster_label"],
return LayerDict entry["cluster_layer"]),
\ No newline at end of file makeFrozensetForConnNodesDict(entry["cluster_connNodesDict"]), ##Change from list of dicts to dicts[frozenset(layer_name,node_id,cluster_label)]
changeDictListToTupleDict(entry["cluster_connClustDict"]))
#add cluster to the layerDict
layerDict[curLayerName].cluster_Dict[newClusterC.cluster_label]=newClusterC
return layerDict
def makeFrozensetForConnNodesDict(inputList):
'''
Helper function used to convert the JSON from the DB into the Python Code structure used in the functions
'''
outputDict = dict()
for dic in inputList:
newNodeC = NodeC(dic["node_cluster"],dic["node_layer"],dic["node_id"])
tuppleKey = (dic["node_cluster"],dic["node_layer"],dic["node_id"])
frozenSetKey = frozenset(tuppleKey)
outputDict[frozenSetKey] = newNodeC
return outputDict
def changeDictListToTupleDict(inputDictList):
'''
Helper function used to convert the JSON from the DB into the Python Code structure used in the functions
'''
outputDict = dict()
for entry in inputDictList:
tuppleKey=(entry["cluster_label"],entry["cluster_layer"])
outputDict[tuppleKey] = entry["connectionWeight"]
return outputDict
def makeChangeNodesDict(inputList,cluster_label,cluster_layer):
'''
Helper function used to convert the JSON from the DB into the Python Code structure used in the functions
'''
outputDict = dict()
for entry in inputList:
newNode = NodeC(cluster_label,cluster_layer,entry)
auxtuple = (newNode.uniqueID,newNode.node_cluster,newNode.node_layer) #unique because the input data is only from one layer
key = frozenset(auxtuple)
#check for duplicates
outputDict[key]= newNode
return outputDict
def get_mongoDB_cluster_by_layerName(name):
res = repo.get_clusters_for_layer(name)
return [c.to_serializable_dict() for c in res]
...@@ -50,42 +50,6 @@ def convertLayerDictToJSON(layerDict, runId): ...@@ -50,42 +50,6 @@ def convertLayerDictToJSON(layerDict, runId):
:rtype: Dict{string: [Cluster1, Cluster2, ...]} :rtype: Dict{string: [Cluster1, Cluster2, ...]}
''' '''
'''
{
layer1 : {
[
{
cluster_label1 : 0123400,
cluster_layer: layer1,
"cluster_connClustDict": {
"0123456": 98
"1234567": 12
},
cluster_containedNodesDict : {
[
abcd,
sgre,
dgre,
ddhr,
yyrh
]
}
},
{
},
{
}
]
},
layer2 : {
}
}
'''
outputJSON = [] outputJSON = []
for curLayer in layerDict.values(): for curLayer in layerDict.values():
...@@ -94,52 +58,74 @@ def convertLayerDictToJSON(layerDict, runId): ...@@ -94,52 +58,74 @@ def convertLayerDictToJSON(layerDict, runId):
"cluster_label" : curCluster.cluster_label, "cluster_label" : curCluster.cluster_label,
"cluster_layer" : curCluster.cluster_layer, "cluster_layer" : curCluster.cluster_layer,
"cluster_runId" : runId, "cluster_runId" : runId,
"cluster_connClustDict" : changeDictKeysToString(curCluster.cluster_connClustDict), "cluster_connClustDict" : changeTupleDictToDictList(curCluster.cluster_connClustDict),
"cluster_connNodesDict" : getFrozensetFromConnNodesDict(curCluster.cluster_connNodesDict), "cluster_connNodesDict" : getFrozensetFromConnNodesDict(curCluster.cluster_connNodesDict), #Don
"cluster_containedNodesDict" : getNodeIdListFromContainedNodesDict(curCluster.cluster_containedNodesDict), "cluster_containedNodesDict" : getNodeIdListFromContainedNodesDict(curCluster.cluster_containedNodesDict)
}) })
#outputJSON = json.dumps(outputJSON, default=lambda o: o.__dict__, indent=4) #outputJSON = json.dumps(outputJSON, default=lambda o: o.__dict__, indent=4)
return outputJSON return outputJSON
def changeDictKeysToString(inputDict): def changeTupleDictToDictList(inputDict):
'''
Helper function used to convert the code into JSON format
'''
outputList = []
for tupleKey in inputDict:
auxDict = dict()
auxDict["cluster_label"]= tupleKey[0]
auxDict["cluster_layer"]= tupleKey[1]
auxDict["connectionWeight"] = inputDict[tupleKey]
outputList.append(auxDict)
keys_values = inputDict.items() return outputList
outputDict = { str(key): value for key,value in keys_values}
return outputDict
def getNodeIdListFromContainedNodesDict(inputDict): def getNodeIdListFromContainedNodesDict(inputDict):
'''
Helper function used to convert the code into JSON format
'''
output = [] output = []
for curNode in inputDict.values(): for curNode in inputDict.values():
output.append(curNode.uniqueID) output.append(curNode.uniqueID)
return output return output
def getFrozensetFromConnNodesDict(inputDict): def getFrozensetFromConnNodesDict(inputDict):
'''
Helper function used to convert the code into JSON format
'''
output = [] output = []
for curNode in inputDict.values(): for curNode in inputDict.values():
auxDict = {} auxDict = {}
auxDict["node_id"]= curNode.uniqueID auxDict["node_id"]= curNode.uniqueID
auxDict["node_cluster"] = curNode.cluster_label auxDict["node_cluster"] = curNode.node_cluster
auxDict["node_layer"] = curNode.node_layer
output.append(auxDict) output.append(auxDict)
return output return output
def convertSimilarityDictToJSON(inputDict,runId): def convertSimilarityDictToJSON(inputDict,runId):
''' Converts a Similarity Dictionary to JSON format. For outputting to DB
:param Dict{} similarityDict: Object which contains Data about the Computed similarities between Clusters
:rtype: List[Dicts]
'''
similList = [] similList = []
for compositeKey in inputDict: for tupleKey in inputDict:
frozensetString =list() auxDict = dict()
#key is a tuple of cluster_labels auxDict["cluster1_label"]= tupleKey[0]
for key in compositeKey: auxDict["cluster2_label"]= tupleKey[1]
frozensetString.append(key) auxDict["cluster_layer"] = tupleKey[2]
auxDict["similarityValues"] = inputDict[tupleKey]
similList.append({ auxDict["runId"] = runId
"clusterTuple" : frozensetString, similList.append(auxDict)
"similarityValues" : inputDict[compositeKey],
"runId": runId
})
similToJSON = similList similToJSON = similList
#outputJSON = json.dumps(similToJSON, default=lambda o: o.__dict__, indent=4) #outputJSON = json.dumps(similToJSON, default=lambda o: o.__dict__, indent=4)
......
from db.entities.connected_node import NodeC
from db.entities.connected_cluster import ClusterC
from db.entities.connected_layer import LayerC
import os
import sys
import math
import datetime
from typing import Dict
from typing import Dict
from processing.similarityFiles.dataInput import *
from processing.similarityFiles.calculateWeights import *
from processing.similarityFiles.calculateSimilarity import *
from processing.similarityFiles.miscFunctions import *
from processing.similarityFiles.dataOutput import *
import json
import requests
modules_path = '../../../modules/'
if os.path.exists(modules_path):
sys.path.insert(1, modules_path)
from db.repository import *
repo = Repository()
def testInputData():#ONLY FOR TESTING
'''
Only for testing, can be deleted at any time.\n
Served as a testing example to make sure the computations are correct
'''
limitNrNodes = 100000
layerDict = dict()
print("Creating Connected_cluster dict and similarity dict")
inputLayerLocation=getTestLocationLayerData()
inputLayerTime=getTestTimeLayerData()
inputLayerPrice=getTestPriceLayerData()
layerDict = populateWithNewNodesSingleLayer(inputLayerLocation,layerDict,limitNrNodes)
layerDict = populateWithNewNodesSingleLayer(inputLayerTime,layerDict,limitNrNodes)
layerDict = populateWithNewNodesSingleLayer(inputLayerPrice,layerDict,limitNrNodes)
layerDict = calculateWeights(layerDict)
similarityDict = calculateSimilarity(layerDict)
print("Asserting if the calculated values are true")
#assert x == "hello"
# SYNTAX:
#similarityDict[(clusterLabel1,clusterLabel2,layerOfTheClusters)][layerToWhichTheClustersAreCompared] == ExpectedSimilarityValue
#checking if the cluster "1" and cluster "2" from the "Location" layer have the sqrt(2) similarity values for when compared with 'Price'and 'Time'layers
assert similarityDict[(1,2,'Location')]['Price'] == math.sqrt(2)
assert similarityDict[(1,2,'Location')]['Time'] == math.sqrt(2)
assert similarityDict[(1,3,'Location')]['Price'] == math.sqrt(10)
assert similarityDict[(1,3,'Location')]['Time'] == math.sqrt(16)
assert similarityDict[(2,3,'Location')]['Price'] == math.sqrt(4)
assert similarityDict[(2,3,'Location')]['Time'] == math.sqrt(10)
assert similarityDict[(4,5,'Time')]['Location'] == math.sqrt(19)
assert similarityDict[(4,5,'Time')]['Price'] == math.sqrt(26)
assert similarityDict[(6,7,'Price')]['Location'] == math.sqrt(3)
assert similarityDict[(6,7,'Price')]['Time'] == math.sqrt(8)
# assert similarityDict[(1,2,'Location')]
print("Test Passed Succesfully")
return layerDict
def getTestLocationLayerData():
inputLayerLocation = [
{
"cluster_label": 1,
"layer_name": "Location",
"nodes": [
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "asd",
"TravelPrice": 15,
"UniqueID": "a",
"UserID": "asdf"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "asd",
"TravelPrice": 15,
"UniqueID": "aa",
"UserID": "asdf"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "asd",
"TravelPrice": 15,
"UniqueID": "aaa",
"UserID": "asdf"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aaaa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
}
]
},
{
"cluster_label": 2,
"layer_name": "Location",
"nodes": [
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156b",
"TravelPrice": 15,
"UniqueID": "b",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "asd",
"TravelPrice": 15,
"UniqueID": "bb",
"UserID": "asdf"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "asd",
"TravelPrice": 15,
"UniqueID": "bbb",
"UserID": "asdf"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "bb",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
}
]
},
{
"cluster_label": 3,
"layer_name": "Location",
"nodes": [
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156c",
"TravelPrice": 15,
"UniqueID": "c",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "asd",
"TravelPrice": 15,
"UniqueID": "c",
"UserID": "asdf"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "asd",
"TravelPrice": 15,
"UniqueID": "cc",
"UserID": "asdf"
}
]
}
]
return inputLayerLocation
def getTestTimeLayerData():
inputLayerTime = [
{
"cluster_label": 4,
"layer_name": "Time",
"nodes": [
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "a",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aaa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aaaa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "b",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "bb",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "bbb",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
}
]
},
{
"cluster_label": 5,
"layer_name": "Time",
"nodes": [
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156f",
"TravelPrice": 15,
"UniqueID": "a",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "c",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
}
]
}
]
return inputLayerTime
def getTestPriceLayerData():
inputLayerPrice = [
{
"cluster_label": 6,
"layer_name": "Price",
"nodes": [
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156h",
"TravelPrice": 15,
"UniqueID": "b",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "bb",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aaa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aaaa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
}
]
},
{
"cluster_label": 7,
"layer_name": "Price",
"nodes": [
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156g",
"TravelPrice": 15,
"UniqueID": "a",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "aa",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "b",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
},
{
"Finished_time": 1576631193265951,
"Latitude_Destination": -5.973257,
"Longitude_Destination": 37.416316,
"TravelID": "5e57ec9159bc0668543f156d",
"TravelPrice": 15,
"UniqueID": "c",
"UserID": "a95075f5042b1b27060080156d87fe34ec7e712c"
}
]
}
]
return inputLayerPrice
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -2,263 +2,334 @@ ...@@ -2,263 +2,334 @@
{ {
"cluster_label": 0, "cluster_label": 0,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": { "cluster_connClustDict": [
"-1": 42, {
"0": 21 "cluster_label": -1,
}, "cluster_layer": "FinishedTime_Layer",
"connectionWeight": 42
},
{
"cluster_label": 0,
"cluster_layer": "Destination_Layer",
"connectionWeight": 21
}
],
"cluster_connNodesDict": [ "cluster_connNodesDict": [
{ {
"node_id": "018a683893f6a26a05050e432d340b78e7a539cc5e57ec9159bc0668543f243d", "node_id": "018a683893f6a26a05050e432d340b78e7a539cc5e57ec9159bc0668543f243d",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9159bc0668543f2494", "node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9159bc0668543f2494",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "0e9c8c070e5f9e8a1c7ca504376004768a4014665e57ec9359bc0668543f4e13", "node_id": "0e9c8c070e5f9e8a1c7ca504376004768a4014665e57ec9359bc0668543f4e13",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "1293461799fc73103b48047c37bd882fd106771a5e57ec9159bc0668543f26ef", "node_id": "1293461799fc73103b48047c37bd882fd106771a5e57ec9159bc0668543f26ef",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "162a9fc5fe873488c79ebb3f1c9b1b30e2203f7b5e57ec9259bc0668543f2b5e", "node_id": "162a9fc5fe873488c79ebb3f1c9b1b30e2203f7b5e57ec9259bc0668543f2b5e",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "169b57a340c7f5da2e509ee7b0aa056977fec2a95e57ec9159bc0668543f1abe", "node_id": "169b57a340c7f5da2e509ee7b0aa056977fec2a95e57ec9159bc0668543f1abe",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "17584f418ca1425c2e60751c68a83da93370921f5e57ec9359bc0668543f4fbf", "node_id": "17584f418ca1425c2e60751c68a83da93370921f5e57ec9359bc0668543f4fbf",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "1825b06b9f7c41820743e8508977d81ecf68ee275e57ec9259bc0668543f2e21", "node_id": "1825b06b9f7c41820743e8508977d81ecf68ee275e57ec9259bc0668543f2e21",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "24eda4b64b03f565dcafbbadb4bc954a4ce8fcbf5e57ec9159bc0668543f265c", "node_id": "24eda4b64b03f565dcafbbadb4bc954a4ce8fcbf5e57ec9159bc0668543f265c",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "25e76430c731cbfd9d306514bd4845a90ccbbae25e57ec9159bc0668543f257c", "node_id": "25e76430c731cbfd9d306514bd4845a90ccbbae25e57ec9159bc0668543f257c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568", "node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568", "node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "2a81c755026d4a8e893b25671a18e39104d488f85e57ec9159bc0668543f257c", "node_id": "2a81c755026d4a8e893b25671a18e39104d488f85e57ec9159bc0668543f257c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "2c0d557df1c97d2febfed7de875d344d6f4a16255e57ec9159bc0668543f26ef", "node_id": "2c0d557df1c97d2febfed7de875d344d6f4a16255e57ec9159bc0668543f26ef",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "2f8f37e09f76ed80027cc8f15aa23ecbff0e8cca5e57ec9359bc0668543f6770", "node_id": "2f8f37e09f76ed80027cc8f15aa23ecbff0e8cca5e57ec9359bc0668543f6770",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "32160aa4dcbdf1341196bc4ff26a428698771cfe5e57ec9159bc0668543f1aa0", "node_id": "32160aa4dcbdf1341196bc4ff26a428698771cfe5e57ec9159bc0668543f1aa0",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "39f438db6713889a4ae45998aa97110afbbfffcb5e57ec9159bc0668543f1f66", "node_id": "39f438db6713889a4ae45998aa97110afbbfffcb5e57ec9159bc0668543f1f66",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "3c77bd3a570262458b800937486029e76fe86aa75e57ec9259bc0668543f45f6", "node_id": "3c77bd3a570262458b800937486029e76fe86aa75e57ec9259bc0668543f45f6",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "49265bfa149e25b47a6aa3d52189395e40172aa75e57ec9259bc0668543f3491", "node_id": "49265bfa149e25b47a6aa3d52189395e40172aa75e57ec9259bc0668543f3491",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "55f99091d2a7e0376cdf77f78408302e5898398a5e57ec9359bc0668543f66dc", "node_id": "55f99091d2a7e0376cdf77f78408302e5898398a5e57ec9359bc0668543f66dc",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "574b1106b00452cf7824d57396afc295f2aea3ec5e57ec9159bc0668543f1dba", "node_id": "574b1106b00452cf7824d57396afc295f2aea3ec5e57ec9159bc0668543f1dba",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "6281369c320e3b81f226e30f586cf432f1082dbc5e57ec9259bc0668543f31a8", "node_id": "6281369c320e3b81f226e30f586cf432f1082dbc5e57ec9259bc0668543f31a8",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9159bc0668543f26ef", "node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9159bc0668543f26ef",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9259bc0668543f3da0", "node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9259bc0668543f3da0",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "7ffb2d12d6cd6a067772e65bb51a372c80824d895e57ec9259bc0668543f34e8", "node_id": "7ffb2d12d6cd6a067772e65bb51a372c80824d895e57ec9259bc0668543f34e8",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "80cdd626d308d028707237ad80b7fffb353be0ff5e57ec9159bc0668543f1d7e", "node_id": "80cdd626d308d028707237ad80b7fffb353be0ff5e57ec9159bc0668543f1d7e",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "86413818983d5fc6033c631e89d6c21d408a0db55e57ec9159bc0668543f1865", "node_id": "86413818983d5fc6033c631e89d6c21d408a0db55e57ec9159bc0668543f1865",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "86bf7785ed92f677d5c42232a8eafc589bbccac35e57ec9159bc0668543f21d4", "node_id": "86bf7785ed92f677d5c42232a8eafc589bbccac35e57ec9159bc0668543f21d4",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "8c61f946402defdd9e543f370840d4b696c338765e57ec9159bc0668543f19d7", "node_id": "8c61f946402defdd9e543f370840d4b696c338765e57ec9159bc0668543f19d7",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "8d3d9ae08c0cf4f92d2b68f2ec0164c54e3f7dd65e57ec9259bc0668543f30fe", "node_id": "8d3d9ae08c0cf4f92d2b68f2ec0164c54e3f7dd65e57ec9259bc0668543f30fe",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "8d758e590271e1570ebf4688f867c33a3a35ccac5e57ec9459bc0668543f74c8", "node_id": "8d758e590271e1570ebf4688f867c33a3a35ccac5e57ec9459bc0668543f74c8",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f1f0c", "node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f1f0c",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "9f1e752473da77932f3e41368fab0dc762afb96b5e57ec9259bc0668543f2b5e", "node_id": "9f1e752473da77932f3e41368fab0dc762afb96b5e57ec9259bc0668543f2b5e",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "a2af301c9e122b9636a5ba682b9c2504a27a08f95e57ec9159bc0668543f2494", "node_id": "a2af301c9e122b9636a5ba682b9c2504a27a08f95e57ec9159bc0668543f2494",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9359bc0668543f5c5c", "node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9359bc0668543f5c5c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9459bc0668543f7503", "node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9459bc0668543f7503",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9159bc0668543f25fe", "node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9159bc0668543f25fe",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9359bc0668543f55c1", "node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9359bc0668543f55c1",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "adbb9ceeb61d3ce5cb3e20ed9b767e3fa2ec83ac5e57ec9159bc0668543f19f1", "node_id": "adbb9ceeb61d3ce5cb3e20ed9b767e3fa2ec83ac5e57ec9159bc0668543f19f1",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "b06b6841b013b8a3e7356ebcc7c5dac8b1c6329d5e57ec9159bc0668543f1d6f", "node_id": "b06b6841b013b8a3e7356ebcc7c5dac8b1c6329d5e57ec9159bc0668543f1d6f",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "b3fa7082d81a71694884bafeb3fa2a989612ca915e57ec9259bc0668543f3562", "node_id": "b3fa7082d81a71694884bafeb3fa2a989612ca915e57ec9259bc0668543f3562",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "bf7618733c265819c937e2b5c2eaa6c92ba9610d5e57ec9259bc0668543f2f05", "node_id": "bf7618733c265819c937e2b5c2eaa6c92ba9610d5e57ec9259bc0668543f2f05",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "c1bf3b0c2892a387551cdfa005a17516cdeaa6b05e57ec9259bc0668543f2e55", "node_id": "c1bf3b0c2892a387551cdfa005a17516cdeaa6b05e57ec9259bc0668543f2e55",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "cb6095cd0b53312c52a6b7d0e5e94602babd48615e57ec9359bc0668543f5dd9", "node_id": "cb6095cd0b53312c52a6b7d0e5e94602babd48615e57ec9359bc0668543f5dd9",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "d0376fa2e0ca9a9cb549c45fc24a0f694b65a9c85e57ec9359bc0668543f62b9", "node_id": "d0376fa2e0ca9a9cb549c45fc24a0f694b65a9c85e57ec9359bc0668543f62b9",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "d18a36e14c88f0d29207ba7a4e39adb54cd7693e5e57ec9259bc0668543f31a8", "node_id": "d18a36e14c88f0d29207ba7a4e39adb54cd7693e5e57ec9259bc0668543f31a8",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f1f66", "node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f1f66",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "d35e541672aadf4c378fba95d0240baae643d2115e57ec9159bc0668543f1f66", "node_id": "d35e541672aadf4c378fba95d0240baae643d2115e57ec9159bc0668543f1f66",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "d7051be2bf3391ec0d9ec2ea6f57b7c0b62185d75e57ec9359bc0668543f6497", "node_id": "d7051be2bf3391ec0d9ec2ea6f57b7c0b62185d75e57ec9359bc0668543f6497",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "dc783ce1bff0854a5acb431e4458bab826a97ca45e57ec9159bc0668543f1865", "node_id": "dc783ce1bff0854a5acb431e4458bab826a97ca45e57ec9159bc0668543f1865",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "dd91b75e6013c5477017b2c188cd4c368afff2835e57ec9259bc0668543f2d0c", "node_id": "dd91b75e6013c5477017b2c188cd4c368afff2835e57ec9259bc0668543f2d0c",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "e3da43a67d77386da0faa507e98fb206a7e015e85e57ec9159bc0668543f19d7", "node_id": "e3da43a67d77386da0faa507e98fb206a7e015e85e57ec9159bc0668543f19d7",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "edd812916217a4ccdd253d13e172ce141618c1445e57ec9259bc0668543f2aa1", "node_id": "edd812916217a4ccdd253d13e172ce141618c1445e57ec9259bc0668543f2aa1",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "eee58f1f088cc27235bb0e674cc44fe35efffff95e57ec9359bc0668543f55c1", "node_id": "eee58f1f088cc27235bb0e674cc44fe35efffff95e57ec9359bc0668543f55c1",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "f0ea58452606fd347cfccbf7de9e33d87debb3925e57ec9159bc0668543f27dc", "node_id": "f0ea58452606fd347cfccbf7de9e33d87debb3925e57ec9159bc0668543f27dc",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "f20a69a7d25929c64e9a972ee8534b61b6f2a56a5e57ec9259bc0668543f48e7", "node_id": "f20a69a7d25929c64e9a972ee8534b61b6f2a56a5e57ec9259bc0668543f48e7",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "f26023dee73e22700dad75bfa1864e3b0659a46e5e57ec9159bc0668543f175d", "node_id": "f26023dee73e22700dad75bfa1864e3b0659a46e5e57ec9159bc0668543f175d",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "f405ea1ca3ff4f7005118ce0deac1fc1c150ba5a5e57ec9159bc0668543f1c3b", "node_id": "f405ea1ca3ff4f7005118ce0deac1fc1c150ba5a5e57ec9159bc0668543f1c3b",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "f6f3f0f4582cdb70b2911a222dc16f8a3bd819435e57ec9159bc0668543f2769", "node_id": "f6f3f0f4582cdb70b2911a222dc16f8a3bd819435e57ec9159bc0668543f2769",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "f9c6f90a46f81dc3d3994f12b678f16f1d961cd45e57ec9259bc0668543f2a4d", "node_id": "f9c6f90a46f81dc3d3994f12b678f16f1d961cd45e57ec9259bc0668543f2a4d",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "fbd959373b6509989d3af4a298cc7e7b91676ccb5e57ec9159bc0668543f1fb6", "node_id": "fbd959373b6509989d3af4a298cc7e7b91676ccb5e57ec9159bc0668543f1fb6",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "fe68d7777655bf950ee14227e9cb62a34394cbe65e57ec9459bc0668543f718c", "node_id": "fe68d7777655bf950ee14227e9cb62a34394cbe65e57ec9459bc0668543f718c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9159bc0668543f1cbf", "node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9159bc0668543f1cbf",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
} }
], ],
"cluster_containedNodesDict": [ "cluster_containedNodesDict": [
...@@ -1267,554 +1338,666 @@ ...@@ -1267,554 +1338,666 @@
{ {
"cluster_label": 6, "cluster_label": 6,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 17, "cluster_label": 17,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 18, "cluster_label": 18,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 7, "cluster_label": 7,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2, "cluster_label": 2,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 1, "cluster_label": 1,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 20, "cluster_label": 20,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 5, "cluster_label": 5,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 4, "cluster_label": 4,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 15, "cluster_label": 15,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 11, "cluster_label": 11,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 19, "cluster_label": 19,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 16, "cluster_label": 16,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 3, "cluster_label": 3,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 9, "cluster_label": 9,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 8, "cluster_label": 8,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 10, "cluster_label": 10,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 13, "cluster_label": 13,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 14, "cluster_label": 14,
"cluster_layer": "Price_Layer", "cluster_layer": "Price_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": -1, "cluster_label": -1,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": { "cluster_connClustDict": [
"0": 98 {
}, "cluster_label": 0,
"cluster_layer": "Price_Layer",
"connectionWeight": 42
},
{
"cluster_label": 0,
"cluster_layer": "Destination_Layer",
"connectionWeight": 57
}
],
"cluster_connNodesDict": [ "cluster_connNodesDict": [
{ {
"node_id": "018a683893f6a26a05050e432d340b78e7a539cc5e57ec9159bc0668543f243d", "node_id": "018a683893f6a26a05050e432d340b78e7a539cc5e57ec9159bc0668543f243d",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "0260c9a0fb7a542fa0c9c596532178919b119dc85e57ec9159bc0668543f22e2", "node_id": "0260c9a0fb7a542fa0c9c596532178919b119dc85e57ec9159bc0668543f22e2",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9159bc0668543f2494", "node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9159bc0668543f2494",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9259bc0668543f2fab", "node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9259bc0668543f2fab",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "1293461799fc73103b48047c37bd882fd106771a5e57ec9159bc0668543f26ef", "node_id": "1293461799fc73103b48047c37bd882fd106771a5e57ec9159bc0668543f26ef",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "162a9fc5fe873488c79ebb3f1c9b1b30e2203f7b5e57ec9259bc0668543f2b5e", "node_id": "162a9fc5fe873488c79ebb3f1c9b1b30e2203f7b5e57ec9259bc0668543f2b5e",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "169b57a340c7f5da2e509ee7b0aa056977fec2a95e57ec9159bc0668543f1abe", "node_id": "169b57a340c7f5da2e509ee7b0aa056977fec2a95e57ec9159bc0668543f1abe",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "1825b06b9f7c41820743e8508977d81ecf68ee275e57ec9259bc0668543f2e21", "node_id": "1825b06b9f7c41820743e8508977d81ecf68ee275e57ec9259bc0668543f2e21",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "1a87e43dc652dd03c10f882a8d6f909f435dd6b25e57ec9159bc0668543f2755", "node_id": "1a87e43dc652dd03c10f882a8d6f909f435dd6b25e57ec9159bc0668543f2755",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "1e4d67f478e17f70a97fe41365ae7338c3a4934b5e57ec9259bc0668543f31a6", "node_id": "1e4d67f478e17f70a97fe41365ae7338c3a4934b5e57ec9259bc0668543f31a6",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "22390ad11c32faec43fc61555b53607660b3c1855e57ec9259bc0668543f2b32", "node_id": "22390ad11c32faec43fc61555b53607660b3c1855e57ec9259bc0668543f2b32",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "224cfd3231e9079159788a88474f4b85949904b95e57ec9159bc0668543f22e2", "node_id": "224cfd3231e9079159788a88474f4b85949904b95e57ec9159bc0668543f22e2",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "24eda4b64b03f565dcafbbadb4bc954a4ce8fcbf5e57ec9159bc0668543f265c", "node_id": "24eda4b64b03f565dcafbbadb4bc954a4ce8fcbf5e57ec9159bc0668543f265c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "26688a2982f526aa219b72e7fa5a61439da55f845e57ec9259bc0668543f2fe9", "node_id": "26688a2982f526aa219b72e7fa5a61439da55f845e57ec9259bc0668543f2fe9",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568", "node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
},
{
"node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568",
"node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "28e90275ca36e8ec70c6bf81c34bb85b32c60e8b5e57ec9259bc0668543f3425", "node_id": "28e90275ca36e8ec70c6bf81c34bb85b32c60e8b5e57ec9259bc0668543f3425",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "2990073b4f0f04cfd8814f0dc0c54a970bd2dbe45e57ec9259bc0668543f332f", "node_id": "2990073b4f0f04cfd8814f0dc0c54a970bd2dbe45e57ec9259bc0668543f332f",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "2c0d557df1c97d2febfed7de875d344d6f4a16255e57ec9159bc0668543f26ef", "node_id": "2c0d557df1c97d2febfed7de875d344d6f4a16255e57ec9159bc0668543f26ef",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "32160aa4dcbdf1341196bc4ff26a428698771cfe5e57ec9159bc0668543f1aa0", "node_id": "32160aa4dcbdf1341196bc4ff26a428698771cfe5e57ec9159bc0668543f1aa0",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "39f438db6713889a4ae45998aa97110afbbfffcb5e57ec9159bc0668543f1f66", "node_id": "39f438db6713889a4ae45998aa97110afbbfffcb5e57ec9159bc0668543f1f66",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "408ed564d49d196803fde7fe4bfa07d66df0586d5e57ec9159bc0668543f17f0", "node_id": "408ed564d49d196803fde7fe4bfa07d66df0586d5e57ec9159bc0668543f17f0",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "455ece34621a91c0a27d89f89335efbc7c84176f5e57ec9259bc0668543f355d", "node_id": "455ece34621a91c0a27d89f89335efbc7c84176f5e57ec9259bc0668543f355d",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "49265bfa149e25b47a6aa3d52189395e40172aa75e57ec9259bc0668543f3491", "node_id": "49265bfa149e25b47a6aa3d52189395e40172aa75e57ec9259bc0668543f3491",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "4d67d97c3e7a9d0836a7217416601e259c88c0385e57ec9159bc0668543f1fc5", "node_id": "4d67d97c3e7a9d0836a7217416601e259c88c0385e57ec9159bc0668543f1fc5",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "52578b9a6516530447171183675857a9121be8355e57ec9159bc0668543f23a5", "node_id": "52578b9a6516530447171183675857a9121be8355e57ec9159bc0668543f23a5",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "5288701f4c2abddd7c3839f1cf077dd1656bc5e95e57ec9259bc0668543f3286", "node_id": "5288701f4c2abddd7c3839f1cf077dd1656bc5e95e57ec9259bc0668543f3286",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "5607fe3df00af617e288291dfe704f9eae538e7a5e57ec9159bc0668543f1ac7", "node_id": "5607fe3df00af617e288291dfe704f9eae538e7a5e57ec9159bc0668543f1ac7",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "574b1106b00452cf7824d57396afc295f2aea3ec5e57ec9159bc0668543f1dba", "node_id": "574b1106b00452cf7824d57396afc295f2aea3ec5e57ec9159bc0668543f1dba",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "5c3cb098d52deb3f67e97b7fba960c4cf68804615e57ec9159bc0668543f23a5", "node_id": "5c3cb098d52deb3f67e97b7fba960c4cf68804615e57ec9159bc0668543f23a5",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "6281369c320e3b81f226e30f586cf432f1082dbc5e57ec9259bc0668543f31a8", "node_id": "6281369c320e3b81f226e30f586cf432f1082dbc5e57ec9259bc0668543f31a8",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9159bc0668543f217f", "node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9159bc0668543f217f",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9259bc0668543f2e76", "node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9259bc0668543f2e76",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "6edf0ebd13a0ded74ce8a686d505087b9e503f4c5e57ec9159bc0668543f2449", "node_id": "6edf0ebd13a0ded74ce8a686d505087b9e503f4c5e57ec9159bc0668543f2449",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "6fe67930819aebe6ae2408d04bb791d5b6db69755e57ec9159bc0668543f276c", "node_id": "6fe67930819aebe6ae2408d04bb791d5b6db69755e57ec9159bc0668543f276c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "71bd616f22174786a15307dc1c9d3fe12ad53a9b5e57ec9159bc0668543f2147", "node_id": "71bd616f22174786a15307dc1c9d3fe12ad53a9b5e57ec9159bc0668543f2147",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "77e9c5661afed81f5776d2bb12df18443f9f4a975e57ec9159bc0668543f19ee", "node_id": "77e9c5661afed81f5776d2bb12df18443f9f4a975e57ec9159bc0668543f19ee",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "7971e159a0a432dbec73fa8b682cc1f9640de7095e57ec9159bc0668543f2297", "node_id": "7971e159a0a432dbec73fa8b682cc1f9640de7095e57ec9159bc0668543f2297",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "7b4e6eeb003ca9305a1196bdd408e2e53e3ab7605e57ec9259bc0668543f31a6", "node_id": "7b4e6eeb003ca9305a1196bdd408e2e53e3ab7605e57ec9259bc0668543f31a6",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9159bc0668543f26ef", "node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9159bc0668543f26ef",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "7ffb2d12d6cd6a067772e65bb51a372c80824d895e57ec9259bc0668543f34e8", "node_id": "7ffb2d12d6cd6a067772e65bb51a372c80824d895e57ec9259bc0668543f34e8",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "801e5189ad3a29d2d7d9f46c5ff1b8dc89d84ec95e57ec9159bc0668543f2120", "node_id": "801e5189ad3a29d2d7d9f46c5ff1b8dc89d84ec95e57ec9159bc0668543f2120",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "80ac47b53d214db7d4d8828a0b5938fe6f8a5e285e57ec9159bc0668543f27d1", "node_id": "80ac47b53d214db7d4d8828a0b5938fe6f8a5e285e57ec9159bc0668543f27d1",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "80cdd626d308d028707237ad80b7fffb353be0ff5e57ec9159bc0668543f1d7e", "node_id": "80cdd626d308d028707237ad80b7fffb353be0ff5e57ec9159bc0668543f1d7e",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "821c5a383ad816b0bf1fb861893554ee6f82e5dc5e57ec9259bc0668543f372e", "node_id": "821c5a383ad816b0bf1fb861893554ee6f82e5dc5e57ec9259bc0668543f372e",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "86413818983d5fc6033c631e89d6c21d408a0db55e57ec9159bc0668543f1865", "node_id": "86413818983d5fc6033c631e89d6c21d408a0db55e57ec9159bc0668543f1865",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "86bf7785ed92f677d5c42232a8eafc589bbccac35e57ec9159bc0668543f21d4", "node_id": "86bf7785ed92f677d5c42232a8eafc589bbccac35e57ec9159bc0668543f21d4",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "89b3ffda8f11bff22867ff9ef2f8ff6a2b5691b25e57ec9259bc0668543f301c", "node_id": "89b3ffda8f11bff22867ff9ef2f8ff6a2b5691b25e57ec9259bc0668543f301c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "8c61f946402defdd9e543f370840d4b696c338765e57ec9159bc0668543f19d7", "node_id": "8c61f946402defdd9e543f370840d4b696c338765e57ec9159bc0668543f19d7",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "8d3d9ae08c0cf4f92d2b68f2ec0164c54e3f7dd65e57ec9259bc0668543f30fe", "node_id": "8d3d9ae08c0cf4f92d2b68f2ec0164c54e3f7dd65e57ec9259bc0668543f30fe",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "8db93dfa0ff4f5ecf80a6f116a40ae0972d04c765e57ec9159bc0668543f29d8", "node_id": "8db93dfa0ff4f5ecf80a6f116a40ae0972d04c765e57ec9159bc0668543f29d8",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "94681e45a539870724a556ff817c49837e94e2a15e57ec9159bc0668543f2059", "node_id": "94681e45a539870724a556ff817c49837e94e2a15e57ec9159bc0668543f2059",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "95763ec2978744ad671f2ee982e3c78252f1e59d5e57ec9159bc0668543f24b2", "node_id": "95763ec2978744ad671f2ee982e3c78252f1e59d5e57ec9159bc0668543f24b2",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "95da60dd1607d0c34de34703050284de06781c8a5e57ec9159bc0668543f267b", "node_id": "95da60dd1607d0c34de34703050284de06781c8a5e57ec9159bc0668543f267b",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f15cf", "node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f15cf",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f1f0c", "node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f1f0c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "9aa7a90b13b0a1cee9c0084b30ce229ded2540385e57ec9159bc0668543f1930", "node_id": "9aa7a90b13b0a1cee9c0084b30ce229ded2540385e57ec9159bc0668543f1930",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "9f1e752473da77932f3e41368fab0dc762afb96b5e57ec9259bc0668543f2b5e", "node_id": "9f1e752473da77932f3e41368fab0dc762afb96b5e57ec9259bc0668543f2b5e",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "a2af301c9e122b9636a5ba682b9c2504a27a08f95e57ec9159bc0668543f2494", "node_id": "a2af301c9e122b9636a5ba682b9c2504a27a08f95e57ec9159bc0668543f2494",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "a7b8f6289babfe55904aaa132504eceb8fdc0fb55e57ec9259bc0668543f2d91", "node_id": "a7b8f6289babfe55904aaa132504eceb8fdc0fb55e57ec9259bc0668543f2d91",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9159bc0668543f25fe", "node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9159bc0668543f25fe",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "adbb9ceeb61d3ce5cb3e20ed9b767e3fa2ec83ac5e57ec9159bc0668543f19f1", "node_id": "adbb9ceeb61d3ce5cb3e20ed9b767e3fa2ec83ac5e57ec9159bc0668543f19f1",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "b06b6841b013b8a3e7356ebcc7c5dac8b1c6329d5e57ec9159bc0668543f1d6f", "node_id": "b06b6841b013b8a3e7356ebcc7c5dac8b1c6329d5e57ec9159bc0668543f1d6f",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "b2c07102495cfbdd0e898d63e778b0ea5ab4f4f55e57ec9159bc0668543f18ee", "node_id": "b2c07102495cfbdd0e898d63e778b0ea5ab4f4f55e57ec9159bc0668543f18ee",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "b3fa7082d81a71694884bafeb3fa2a989612ca915e57ec9259bc0668543f3562", "node_id": "b3fa7082d81a71694884bafeb3fa2a989612ca915e57ec9259bc0668543f3562",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "b83ef11b8c3628a02e9911e54549ddebbb8816305e57ec9259bc0668543f35fa", "node_id": "b83ef11b8c3628a02e9911e54549ddebbb8816305e57ec9259bc0668543f35fa",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "bcb996f16e04fe0df0f2081dddbc514af35640ed5e57ec9259bc0668543f3276", "node_id": "bcb996f16e04fe0df0f2081dddbc514af35640ed5e57ec9259bc0668543f3276",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "bf7618733c265819c937e2b5c2eaa6c92ba9610d5e57ec9259bc0668543f2f05", "node_id": "bf7618733c265819c937e2b5c2eaa6c92ba9610d5e57ec9259bc0668543f2f05",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "c17f87dbd823eb7d59b6e70785f94737c78995fc5e57ec9159bc0668543f25c8", "node_id": "c17f87dbd823eb7d59b6e70785f94737c78995fc5e57ec9159bc0668543f25c8",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "c6ed34981ee87f00c8ba0dd8df8ff60c7729c3c15e57ec9159bc0668543f2565", "node_id": "c6ed34981ee87f00c8ba0dd8df8ff60c7729c3c15e57ec9159bc0668543f2565",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "c7e4fa4cbae6e10bcb207bb569139210f91de5ad5e57ec9259bc0668543f3538", "node_id": "c7e4fa4cbae6e10bcb207bb569139210f91de5ad5e57ec9259bc0668543f3538",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "c8afa8713631d133164460dacd310629a42339025e57ec9159bc0668543f2583", "node_id": "c8afa8713631d133164460dacd310629a42339025e57ec9159bc0668543f2583",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "cd69bd42b5961c967a11c0c373fd42f8a36c93325e57ec9159bc0668543f1a3a", "node_id": "cd69bd42b5961c967a11c0c373fd42f8a36c93325e57ec9159bc0668543f1a3a",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "d02323bf34fc6453e15c117ee782475f443567385e57ec9259bc0668543f29f9", "node_id": "d02323bf34fc6453e15c117ee782475f443567385e57ec9259bc0668543f29f9",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "d18a36e14c88f0d29207ba7a4e39adb54cd7693e5e57ec9259bc0668543f31a8", "node_id": "d18a36e14c88f0d29207ba7a4e39adb54cd7693e5e57ec9259bc0668543f31a8",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f1f66", "node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f1f66",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f2397", "node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f2397",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "d35e541672aadf4c378fba95d0240baae643d2115e57ec9159bc0668543f1f66", "node_id": "d35e541672aadf4c378fba95d0240baae643d2115e57ec9159bc0668543f1f66",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "d66d6d01835cbc23f281b3c9b8b66c4fb0b2ba4a5e57ec9259bc0668543f332f", "node_id": "d66d6d01835cbc23f281b3c9b8b66c4fb0b2ba4a5e57ec9259bc0668543f332f",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "db29c5b695e4e16014f69d053b507b2e3b3878755e57ec9259bc0668543f38f9", "node_id": "db29c5b695e4e16014f69d053b507b2e3b3878755e57ec9259bc0668543f38f9",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "dc783ce1bff0854a5acb431e4458bab826a97ca45e57ec9159bc0668543f1865", "node_id": "dc783ce1bff0854a5acb431e4458bab826a97ca45e57ec9159bc0668543f1865",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "dd003a533766f9474cbfb7908a2ab997378d43535e57ec9159bc0668543f2458", "node_id": "dd003a533766f9474cbfb7908a2ab997378d43535e57ec9159bc0668543f2458",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "dd91b75e6013c5477017b2c188cd4c368afff2835e57ec9259bc0668543f2d0c", "node_id": "dd91b75e6013c5477017b2c188cd4c368afff2835e57ec9259bc0668543f2d0c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "e3da43a67d77386da0faa507e98fb206a7e015e85e57ec9159bc0668543f19d7", "node_id": "e3da43a67d77386da0faa507e98fb206a7e015e85e57ec9159bc0668543f19d7",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "e58148dbed9ad269961a2e65e67ef6ed32aaf4de5e57ec9259bc0668543f3929", "node_id": "e58148dbed9ad269961a2e65e67ef6ed32aaf4de5e57ec9259bc0668543f3929",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "e77d4d8057e8d99379dd691fb53a79a0971753cc5e57ec9159bc0668543f163c", "node_id": "e77d4d8057e8d99379dd691fb53a79a0971753cc5e57ec9159bc0668543f163c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "eab3b431b590d8adff9468829b46d1b24545f2165e57ec9159bc0668543f1a48", "node_id": "eab3b431b590d8adff9468829b46d1b24545f2165e57ec9159bc0668543f1a48",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "eb2b4bf4167f05efa76420e4ea2fe301784f33995e57ec9159bc0668543f2458", "node_id": "eb2b4bf4167f05efa76420e4ea2fe301784f33995e57ec9159bc0668543f2458",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "edd812916217a4ccdd253d13e172ce141618c1445e57ec9259bc0668543f2aa1", "node_id": "edd812916217a4ccdd253d13e172ce141618c1445e57ec9259bc0668543f2aa1",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "f26023dee73e22700dad75bfa1864e3b0659a46e5e57ec9159bc0668543f175d", "node_id": "f26023dee73e22700dad75bfa1864e3b0659a46e5e57ec9159bc0668543f175d",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "f32771335a9156eb6cf8e1b9f6a7fbe026dd917c5e57ec9159bc0668543f1a58", "node_id": "f32771335a9156eb6cf8e1b9f6a7fbe026dd917c5e57ec9159bc0668543f1a58",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "f405ea1ca3ff4f7005118ce0deac1fc1c150ba5a5e57ec9159bc0668543f1c3b", "node_id": "f405ea1ca3ff4f7005118ce0deac1fc1c150ba5a5e57ec9159bc0668543f1c3b",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "f492b4d3a9826e612d08966b6fcf4666c3c3dd605e57ec9259bc0668543f3812", "node_id": "f492b4d3a9826e612d08966b6fcf4666c3c3dd605e57ec9259bc0668543f3812",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "f6f3f0f4582cdb70b2911a222dc16f8a3bd819435e57ec9159bc0668543f2769", "node_id": "f6f3f0f4582cdb70b2911a222dc16f8a3bd819435e57ec9159bc0668543f2769",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "f9c6f90a46f81dc3d3994f12b678f16f1d961cd45e57ec9259bc0668543f2a4d", "node_id": "f9c6f90a46f81dc3d3994f12b678f16f1d961cd45e57ec9259bc0668543f2a4d",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "fbd959373b6509989d3af4a298cc7e7b91676ccb5e57ec9159bc0668543f1fb6", "node_id": "fbd959373b6509989d3af4a298cc7e7b91676ccb5e57ec9159bc0668543f1fb6",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "fdb0b127af59b398fd99347eb69e653fbfa6d2e85e57ec9159bc0668543f2147", "node_id": "fdb0b127af59b398fd99347eb69e653fbfa6d2e85e57ec9159bc0668543f2147",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
}, },
{ {
"node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9159bc0668543f1cbf", "node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9159bc0668543f1cbf",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9259bc0668543f341d", "node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9259bc0668543f341d",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Destination_Layer"
} }
], ],
"cluster_containedNodesDict": [ "cluster_containedNodesDict": [
...@@ -2822,475 +3005,561 @@ ...@@ -2822,475 +3005,561 @@
{ {
"cluster_label": 2564, "cluster_label": 2564,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 729, "cluster_label": 729,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 772, "cluster_label": 772,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2756, "cluster_label": 2756,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 3213, "cluster_label": 3213,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2362, "cluster_label": 2362,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 4777, "cluster_label": 4777,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2745, "cluster_label": 2745,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 5375, "cluster_label": 5375,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 902, "cluster_label": 902,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 4501, "cluster_label": 4501,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2688, "cluster_label": 2688,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2873, "cluster_label": 2873,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 3678, "cluster_label": 3678,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 3683, "cluster_label": 3683,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 677, "cluster_label": 677,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 843, "cluster_label": 843,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 4504, "cluster_label": 4504,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2119, "cluster_label": 2119,
"cluster_layer": "FinishedTime_Layer", "cluster_layer": "FinishedTime_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 0, "cluster_label": 0,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": { "cluster_connClustDict": [
"-1": 57, {
"0": 21 "cluster_label": -1,
}, "cluster_layer": "FinishedTime_Layer",
"connectionWeight": 57
},
{
"cluster_label": 0,
"cluster_layer": "Price_Layer",
"connectionWeight": 21
}
],
"cluster_connNodesDict": [ "cluster_connNodesDict": [
{ {
"node_id": "0260c9a0fb7a542fa0c9c596532178919b119dc85e57ec9159bc0668543f22e2", "node_id": "0260c9a0fb7a542fa0c9c596532178919b119dc85e57ec9159bc0668543f22e2",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9259bc0668543f2fab", "node_id": "047b01b530d4104ef8eaf2359ea674cd3b56b77f5e57ec9259bc0668543f2fab",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "0e9c8c070e5f9e8a1c7ca504376004768a4014665e57ec9359bc0668543f4e13", "node_id": "0e9c8c070e5f9e8a1c7ca504376004768a4014665e57ec9359bc0668543f4e13",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "17584f418ca1425c2e60751c68a83da93370921f5e57ec9359bc0668543f4fbf", "node_id": "17584f418ca1425c2e60751c68a83da93370921f5e57ec9359bc0668543f4fbf",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "1a87e43dc652dd03c10f882a8d6f909f435dd6b25e57ec9159bc0668543f2755", "node_id": "1a87e43dc652dd03c10f882a8d6f909f435dd6b25e57ec9159bc0668543f2755",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "1e4d67f478e17f70a97fe41365ae7338c3a4934b5e57ec9259bc0668543f31a6", "node_id": "1e4d67f478e17f70a97fe41365ae7338c3a4934b5e57ec9259bc0668543f31a6",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "22390ad11c32faec43fc61555b53607660b3c1855e57ec9259bc0668543f2b32", "node_id": "22390ad11c32faec43fc61555b53607660b3c1855e57ec9259bc0668543f2b32",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "224cfd3231e9079159788a88474f4b85949904b95e57ec9159bc0668543f22e2", "node_id": "224cfd3231e9079159788a88474f4b85949904b95e57ec9159bc0668543f22e2",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "25e76430c731cbfd9d306514bd4845a90ccbbae25e57ec9159bc0668543f257c", "node_id": "25e76430c731cbfd9d306514bd4845a90ccbbae25e57ec9159bc0668543f257c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "26688a2982f526aa219b72e7fa5a61439da55f845e57ec9259bc0668543f2fe9", "node_id": "26688a2982f526aa219b72e7fa5a61439da55f845e57ec9259bc0668543f2fe9",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568", "node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568", "node_id": "2696718d7a33ab3dbf28e9c88411afcfe9a933a45e57ec9159bc0668543f1568",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "28e90275ca36e8ec70c6bf81c34bb85b32c60e8b5e57ec9259bc0668543f3425", "node_id": "28e90275ca36e8ec70c6bf81c34bb85b32c60e8b5e57ec9259bc0668543f3425",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "2990073b4f0f04cfd8814f0dc0c54a970bd2dbe45e57ec9259bc0668543f332f", "node_id": "2990073b4f0f04cfd8814f0dc0c54a970bd2dbe45e57ec9259bc0668543f332f",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "2a81c755026d4a8e893b25671a18e39104d488f85e57ec9159bc0668543f257c", "node_id": "2a81c755026d4a8e893b25671a18e39104d488f85e57ec9159bc0668543f257c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "2f8f37e09f76ed80027cc8f15aa23ecbff0e8cca5e57ec9359bc0668543f6770", "node_id": "2f8f37e09f76ed80027cc8f15aa23ecbff0e8cca5e57ec9359bc0668543f6770",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "3c77bd3a570262458b800937486029e76fe86aa75e57ec9259bc0668543f45f6", "node_id": "3c77bd3a570262458b800937486029e76fe86aa75e57ec9259bc0668543f45f6",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "408ed564d49d196803fde7fe4bfa07d66df0586d5e57ec9159bc0668543f17f0", "node_id": "408ed564d49d196803fde7fe4bfa07d66df0586d5e57ec9159bc0668543f17f0",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "455ece34621a91c0a27d89f89335efbc7c84176f5e57ec9259bc0668543f355d", "node_id": "455ece34621a91c0a27d89f89335efbc7c84176f5e57ec9259bc0668543f355d",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "4d67d97c3e7a9d0836a7217416601e259c88c0385e57ec9159bc0668543f1fc5", "node_id": "4d67d97c3e7a9d0836a7217416601e259c88c0385e57ec9159bc0668543f1fc5",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "52578b9a6516530447171183675857a9121be8355e57ec9159bc0668543f23a5", "node_id": "52578b9a6516530447171183675857a9121be8355e57ec9159bc0668543f23a5",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "5288701f4c2abddd7c3839f1cf077dd1656bc5e95e57ec9259bc0668543f3286", "node_id": "5288701f4c2abddd7c3839f1cf077dd1656bc5e95e57ec9259bc0668543f3286",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "55f99091d2a7e0376cdf77f78408302e5898398a5e57ec9359bc0668543f66dc", "node_id": "55f99091d2a7e0376cdf77f78408302e5898398a5e57ec9359bc0668543f66dc",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "5607fe3df00af617e288291dfe704f9eae538e7a5e57ec9159bc0668543f1ac7", "node_id": "5607fe3df00af617e288291dfe704f9eae538e7a5e57ec9159bc0668543f1ac7",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "5c3cb098d52deb3f67e97b7fba960c4cf68804615e57ec9159bc0668543f23a5", "node_id": "5c3cb098d52deb3f67e97b7fba960c4cf68804615e57ec9159bc0668543f23a5",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9159bc0668543f217f", "node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9159bc0668543f217f",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9259bc0668543f2e76", "node_id": "6a3fb35b674b4c3a1978da2a495b411eba2fc3c05e57ec9259bc0668543f2e76",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "6edf0ebd13a0ded74ce8a686d505087b9e503f4c5e57ec9159bc0668543f2449", "node_id": "6edf0ebd13a0ded74ce8a686d505087b9e503f4c5e57ec9159bc0668543f2449",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "6fe67930819aebe6ae2408d04bb791d5b6db69755e57ec9159bc0668543f276c", "node_id": "6fe67930819aebe6ae2408d04bb791d5b6db69755e57ec9159bc0668543f276c",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "71bd616f22174786a15307dc1c9d3fe12ad53a9b5e57ec9159bc0668543f2147", "node_id": "71bd616f22174786a15307dc1c9d3fe12ad53a9b5e57ec9159bc0668543f2147",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "77e9c5661afed81f5776d2bb12df18443f9f4a975e57ec9159bc0668543f19ee", "node_id": "77e9c5661afed81f5776d2bb12df18443f9f4a975e57ec9159bc0668543f19ee",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "7971e159a0a432dbec73fa8b682cc1f9640de7095e57ec9159bc0668543f2297", "node_id": "7971e159a0a432dbec73fa8b682cc1f9640de7095e57ec9159bc0668543f2297",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "7b4e6eeb003ca9305a1196bdd408e2e53e3ab7605e57ec9259bc0668543f31a6", "node_id": "7b4e6eeb003ca9305a1196bdd408e2e53e3ab7605e57ec9259bc0668543f31a6",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9259bc0668543f3da0", "node_id": "7dc5fa2396730304f2dd4728a0026e7354494b005e57ec9259bc0668543f3da0",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "801e5189ad3a29d2d7d9f46c5ff1b8dc89d84ec95e57ec9159bc0668543f2120", "node_id": "801e5189ad3a29d2d7d9f46c5ff1b8dc89d84ec95e57ec9159bc0668543f2120",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "80ac47b53d214db7d4d8828a0b5938fe6f8a5e285e57ec9159bc0668543f27d1", "node_id": "80ac47b53d214db7d4d8828a0b5938fe6f8a5e285e57ec9159bc0668543f27d1",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "821c5a383ad816b0bf1fb861893554ee6f82e5dc5e57ec9259bc0668543f372e", "node_id": "821c5a383ad816b0bf1fb861893554ee6f82e5dc5e57ec9259bc0668543f372e",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "89b3ffda8f11bff22867ff9ef2f8ff6a2b5691b25e57ec9259bc0668543f301c", "node_id": "89b3ffda8f11bff22867ff9ef2f8ff6a2b5691b25e57ec9259bc0668543f301c",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "8d758e590271e1570ebf4688f867c33a3a35ccac5e57ec9459bc0668543f74c8", "node_id": "8d758e590271e1570ebf4688f867c33a3a35ccac5e57ec9459bc0668543f74c8",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "8db93dfa0ff4f5ecf80a6f116a40ae0972d04c765e57ec9159bc0668543f29d8", "node_id": "8db93dfa0ff4f5ecf80a6f116a40ae0972d04c765e57ec9159bc0668543f29d8",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "94681e45a539870724a556ff817c49837e94e2a15e57ec9159bc0668543f2059", "node_id": "94681e45a539870724a556ff817c49837e94e2a15e57ec9159bc0668543f2059",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "95763ec2978744ad671f2ee982e3c78252f1e59d5e57ec9159bc0668543f24b2", "node_id": "95763ec2978744ad671f2ee982e3c78252f1e59d5e57ec9159bc0668543f24b2",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "95da60dd1607d0c34de34703050284de06781c8a5e57ec9159bc0668543f267b", "node_id": "95da60dd1607d0c34de34703050284de06781c8a5e57ec9159bc0668543f267b",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f15cf", "node_id": "98dcb2717ddae152d5b359c6ea97e4fe34a29d4c5e57ec9159bc0668543f15cf",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "9aa7a90b13b0a1cee9c0084b30ce229ded2540385e57ec9159bc0668543f1930", "node_id": "9aa7a90b13b0a1cee9c0084b30ce229ded2540385e57ec9159bc0668543f1930",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "a7b8f6289babfe55904aaa132504eceb8fdc0fb55e57ec9259bc0668543f2d91", "node_id": "a7b8f6289babfe55904aaa132504eceb8fdc0fb55e57ec9259bc0668543f2d91",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9359bc0668543f5c5c", "node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9359bc0668543f5c5c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9459bc0668543f7503", "node_id": "a7f8f8f1a26a0a31321b57fb8f16c6238d82f0805e57ec9459bc0668543f7503",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9359bc0668543f55c1", "node_id": "a95075f5042b1b27060080156d87fe34ec7e712c5e57ec9359bc0668543f55c1",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "b2c07102495cfbdd0e898d63e778b0ea5ab4f4f55e57ec9159bc0668543f18ee", "node_id": "b2c07102495cfbdd0e898d63e778b0ea5ab4f4f55e57ec9159bc0668543f18ee",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "b83ef11b8c3628a02e9911e54549ddebbb8816305e57ec9259bc0668543f35fa", "node_id": "b83ef11b8c3628a02e9911e54549ddebbb8816305e57ec9259bc0668543f35fa",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "bcb996f16e04fe0df0f2081dddbc514af35640ed5e57ec9259bc0668543f3276", "node_id": "bcb996f16e04fe0df0f2081dddbc514af35640ed5e57ec9259bc0668543f3276",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "c17f87dbd823eb7d59b6e70785f94737c78995fc5e57ec9159bc0668543f25c8", "node_id": "c17f87dbd823eb7d59b6e70785f94737c78995fc5e57ec9159bc0668543f25c8",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "c1bf3b0c2892a387551cdfa005a17516cdeaa6b05e57ec9259bc0668543f2e55", "node_id": "c1bf3b0c2892a387551cdfa005a17516cdeaa6b05e57ec9259bc0668543f2e55",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "c6ed34981ee87f00c8ba0dd8df8ff60c7729c3c15e57ec9159bc0668543f2565", "node_id": "c6ed34981ee87f00c8ba0dd8df8ff60c7729c3c15e57ec9159bc0668543f2565",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "c7e4fa4cbae6e10bcb207bb569139210f91de5ad5e57ec9259bc0668543f3538", "node_id": "c7e4fa4cbae6e10bcb207bb569139210f91de5ad5e57ec9259bc0668543f3538",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "c8afa8713631d133164460dacd310629a42339025e57ec9159bc0668543f2583", "node_id": "c8afa8713631d133164460dacd310629a42339025e57ec9159bc0668543f2583",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "cb6095cd0b53312c52a6b7d0e5e94602babd48615e57ec9359bc0668543f5dd9", "node_id": "cb6095cd0b53312c52a6b7d0e5e94602babd48615e57ec9359bc0668543f5dd9",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "cd69bd42b5961c967a11c0c373fd42f8a36c93325e57ec9159bc0668543f1a3a", "node_id": "cd69bd42b5961c967a11c0c373fd42f8a36c93325e57ec9159bc0668543f1a3a",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "d02323bf34fc6453e15c117ee782475f443567385e57ec9259bc0668543f29f9", "node_id": "d02323bf34fc6453e15c117ee782475f443567385e57ec9259bc0668543f29f9",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "d0376fa2e0ca9a9cb549c45fc24a0f694b65a9c85e57ec9359bc0668543f62b9", "node_id": "d0376fa2e0ca9a9cb549c45fc24a0f694b65a9c85e57ec9359bc0668543f62b9",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f2397", "node_id": "d2b7fce9b7f68c4a1495232a81da894a01c4eefc5e57ec9159bc0668543f2397",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "d66d6d01835cbc23f281b3c9b8b66c4fb0b2ba4a5e57ec9259bc0668543f332f", "node_id": "d66d6d01835cbc23f281b3c9b8b66c4fb0b2ba4a5e57ec9259bc0668543f332f",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "d7051be2bf3391ec0d9ec2ea6f57b7c0b62185d75e57ec9359bc0668543f6497", "node_id": "d7051be2bf3391ec0d9ec2ea6f57b7c0b62185d75e57ec9359bc0668543f6497",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "db29c5b695e4e16014f69d053b507b2e3b3878755e57ec9259bc0668543f38f9", "node_id": "db29c5b695e4e16014f69d053b507b2e3b3878755e57ec9259bc0668543f38f9",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "dd003a533766f9474cbfb7908a2ab997378d43535e57ec9159bc0668543f2458", "node_id": "dd003a533766f9474cbfb7908a2ab997378d43535e57ec9159bc0668543f2458",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "e58148dbed9ad269961a2e65e67ef6ed32aaf4de5e57ec9259bc0668543f3929", "node_id": "e58148dbed9ad269961a2e65e67ef6ed32aaf4de5e57ec9259bc0668543f3929",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "e77d4d8057e8d99379dd691fb53a79a0971753cc5e57ec9159bc0668543f163c", "node_id": "e77d4d8057e8d99379dd691fb53a79a0971753cc5e57ec9159bc0668543f163c",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "eab3b431b590d8adff9468829b46d1b24545f2165e57ec9159bc0668543f1a48", "node_id": "eab3b431b590d8adff9468829b46d1b24545f2165e57ec9159bc0668543f1a48",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "eb2b4bf4167f05efa76420e4ea2fe301784f33995e57ec9159bc0668543f2458", "node_id": "eb2b4bf4167f05efa76420e4ea2fe301784f33995e57ec9159bc0668543f2458",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "eee58f1f088cc27235bb0e674cc44fe35efffff95e57ec9359bc0668543f55c1", "node_id": "eee58f1f088cc27235bb0e674cc44fe35efffff95e57ec9359bc0668543f55c1",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "f0ea58452606fd347cfccbf7de9e33d87debb3925e57ec9159bc0668543f27dc", "node_id": "f0ea58452606fd347cfccbf7de9e33d87debb3925e57ec9159bc0668543f27dc",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "f20a69a7d25929c64e9a972ee8534b61b6f2a56a5e57ec9259bc0668543f48e7", "node_id": "f20a69a7d25929c64e9a972ee8534b61b6f2a56a5e57ec9259bc0668543f48e7",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "f32771335a9156eb6cf8e1b9f6a7fbe026dd917c5e57ec9159bc0668543f1a58", "node_id": "f32771335a9156eb6cf8e1b9f6a7fbe026dd917c5e57ec9159bc0668543f1a58",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "f492b4d3a9826e612d08966b6fcf4666c3c3dd605e57ec9259bc0668543f3812", "node_id": "f492b4d3a9826e612d08966b6fcf4666c3c3dd605e57ec9259bc0668543f3812",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "fdb0b127af59b398fd99347eb69e653fbfa6d2e85e57ec9159bc0668543f2147", "node_id": "fdb0b127af59b398fd99347eb69e653fbfa6d2e85e57ec9159bc0668543f2147",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
}, },
{ {
"node_id": "fe68d7777655bf950ee14227e9cb62a34394cbe65e57ec9459bc0668543f718c", "node_id": "fe68d7777655bf950ee14227e9cb62a34394cbe65e57ec9459bc0668543f718c",
"node_cluster": 0 "node_cluster": 0,
"node_layer": "Price_Layer"
}, },
{ {
"node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9259bc0668543f341d", "node_id": "fe78e82c560a4f2cb3d4aa228feeb827cd06cd7b5e57ec9259bc0668543f341d",
"node_cluster": -1 "node_cluster": -1,
"node_layer": "FinishedTime_Layer"
} }
], ],
"cluster_containedNodesDict": [ "cluster_containedNodesDict": [
...@@ -4299,152 +4568,152 @@ ...@@ -4299,152 +4568,152 @@
{ {
"cluster_label": -1, "cluster_label": -1,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 701, "cluster_label": 701,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 319, "cluster_label": 319,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2230, "cluster_label": 2230,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 316, "cluster_label": 316,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2234, "cluster_label": 2234,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 1890, "cluster_label": 1890,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 1075, "cluster_label": 1075,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 1523, "cluster_label": 1523,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2232, "cluster_label": 2232,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2237, "cluster_label": 2237,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 1495, "cluster_label": 1495,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 526, "cluster_label": 526,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 951, "cluster_label": 951,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2231, "cluster_label": 2231,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 648, "cluster_label": 648,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 466, "cluster_label": 466,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 2160, "cluster_label": 2160,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
}, },
{ {
"cluster_label": 1091, "cluster_label": 1091,
"cluster_layer": "Destination_Layer", "cluster_layer": "Destination_Layer",
"cluster_runId": "5f033232366be85ec1afca7b", "cluster_runId": "5f0471438b27390711e31c70",
"cluster_connClustDict": {}, "cluster_connClustDict": [],
"cluster_connNodesDict": [], "cluster_connNodesDict": [],
"cluster_containedNodesDict": [] "cluster_containedNodesDict": []
} }
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
StartTime: 2020-07-02 12:05:47.067975 StartTime: 2020-07-07 16:55:42.418309
FinishTime: 2020-07-02 12:05:54.561853 FinishTime: 2020-07-07 16:55:49.746628
PopulateWithNewNodes: 2.495718 PopulateWithNewNodes: 2.321926
CalculateWeights: 4.590413 CalculateWeights: 4.499367
CalculateSimilarity: 0.407747 CalculateSimilarity: 0.507026
TotalTime: 7.493878 TotalTime: 7.328319
\ No newline at end of file RunId: 5f048cf587e0ee319fa894ed
\ No newline at end of file
StartTime: 2020-07-06 16:16:11.525479 StartTime: 2020-07-07 14:57:32.942331
FinishTime: 2020-07-06 16:16:18.213974 FinishTime: 2020-07-07 14:57:39.489324
PopulateWithNewNodes: 2.206513 PopulateWithNewNodes: 2.102823
CalculateWeights: 4.435216 CalculateWeights: 4.382948
CalculateSimilarity: 0.046766 CalculateSimilarity: 0.061222
TotalTime: 6.688495 TotalTime: 6.546993
RunId: 5f033232366be85ec1afca7b RunId: 5f0471438b27390711e31c70
\ No newline at end of file \ No newline at end of file
...@@ -30,12 +30,17 @@ from processing.similarityFiles.calculateWeights import * ...@@ -30,12 +30,17 @@ from processing.similarityFiles.calculateWeights import *
from processing.similarityFiles.calculateSimilarity import * from processing.similarityFiles.calculateSimilarity import *
from processing.similarityFiles.miscFunctions import * from processing.similarityFiles.miscFunctions import *
from processing.similarityFiles.dataOutput import * from processing.similarityFiles.dataOutput import *
from routes.connRun import connected_run
#####TEST ONLY#####
from processing.similarityFiles.testSimilarity import *
def main(): def main():
print("\nEntered Main") print("\nEntered Main")
outputToFileFLAG = False
timelist = [] timelist = []
timelist.append(currentTime())#starting time timelist.append(currentTime())#starting time
...@@ -54,8 +59,9 @@ def main(): ...@@ -54,8 +59,9 @@ def main():
limitNrNodes = 1000 #per Layer limitNrNodes = 1000 #per Layer
layerDict = getClusterDataFromMongo(layerNameList,limitNrCluster,limitNrNodes) layerDict = getClusterDataFromMongo(layerNameList,limitNrCluster,limitNrNodes)
#layerDict = getClusterDataFromSwagger(limitNrCluster,limitNrNodes) #for Swagger, Change URLs inside the function for different input Data
#URLlist = None
#layerDict = getClusterDataFromSwagger(limitNrCluster,limitNrNodes, URLlist) #for Swagger, Change URLs inside the function for different input Data or provide a list with URLS
totalNodes = totalNumberOfNodes(layerDict) totalNodes = totalNumberOfNodes(layerDict)
print("Nr. of nodes: " +str(totalNodes)) print("Nr. of nodes: " +str(totalNodes))
totalClusters = totalNumberOfClusters(layerDict) totalClusters = totalNumberOfClusters(layerDict)
...@@ -76,25 +82,34 @@ def main(): ...@@ -76,25 +82,34 @@ def main():
#Write to files #Write to files
runId = add_connected_run() runId = add_connected_run()
print("Outputing data") if (outputToFileFLAG == True):
outputFileLayerFunction(layerDict,totalNodes,totalClusters,runId) print("Outputing data")
outputFileSimilFunction(similarityDict,totalNodes,totalClusters,runId) outputFileLayerFunction(layerDict,totalNodes,totalClusters,runId)
outputFileTimeFunction(timelist,totalNodes,totalClusters,runId) outputFileSimilFunction(similarityDict,totalNodes,totalClusters,runId)
outputFileTimeFunction(timelist,totalNodes,totalClusters,runId)
#Output to DB #Output to DB
outputMongoConnClustDict(layerDict,runId) outputMongoConnClustDict(layerDict,runId)
outputMongoSimilarity(similarityDict,runId) outputMongoSimilarity(similarityDict,runId)
#Currently not used, developed for possible future uses
#Currently not used in the calculation of connections/similarity, developed for possible future uses
connClustersFromMongo = getConnClusterDataFromMongo() connClustersFromMongo = getConnClusterDataFromMongo()
similarityDictFromMongo = calculateSimilarity(connClustersFromMongo)
similarityArrFromMongo = getSimilarityDataFromMongo() similarityArrFromMongo = getSimilarityDataFromMongo()
connectedRunFromMongo = getConnectedRunDataFromMongo() connectedRunFromMongo = getConnectedRunDataFromMongo()
print("FINISHED") print("FINISHED")
return return
def test():
testInputData()
##########START########## ##########START##########
main() #main()
test()
#########FINISH########## #########FINISH##########
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment