coeficiente de agrupamiento local se calcula para cada nodo
Para el nodo vi, sus vecinos inmediatos para identificar un conjunto de nodos Ni, Ni de haber calculado el número de aristas en el grafo K, dividido por el número de lados del conjunto de posibles Ni | Ni | * (| Ni | -1) / 2 ( grafo no dirigido ) o | ni | * (| ni | -1) ( dígrafo)
código:
# Encoding = UTF. 8- # búsqueda de nodos de gráficos agrupación y el promedio de coeficiente de agrupamiento coeficiente ce_list = [] node_set = SET () edge_set = SET () node_list = [] edge_list2 = [] # promedio de cada nodo coeficiente de agrupamiento DEF getCE (nodo, EdgeList): # Get el nodo actual es puntos directamente adyacentes en el conjunto de node_set almacenado para Edge en EdgeList: SI Edge [0] == nodo: node_set.add ([Edge . 1 ]) elif Edge [. 1] == nodo: node_set.add (Edge [0]) #El número de lados para encontrar un punto adyacente al conjunto de puntos constituida por Edge en EdgeList: SI Edge [0] en node_set y Edge [. 1] en node_set: S = Edge [0] + Edge [. 1 ] edge_set.add (S) neighbourNodeNum = len (node_set) # vecino número de punto nodo neighbouredgeNum = len (edge_set) # puntos adyacentes número tira de borde de impresión ( " vecino nodo el Num: " , neighbourNodeNum) Imprimir ( " vecino el borde Num: " , neighbouredgeNum) ceNum =0 # buscando coeficiente de agrupamiento de fórmula IF neighbourNodeNum> 1. : CeNum = 2 * neighbouredgeNum / (. (1-neighbourNodeNum) * neighbourNodeNum) # . Grafo no dirigido se multiplica por 2, no son requeridos por la figura 2 ce_list.append (ceNum) node_set .clear () edge_set.clear () DEF getAverageCE (ce_list): total = 0 para la CE en ce_list: total + = CE retorno total / len (ce_list) DEF main (): # lee la información lateral de un archivo con abierta ( ' facebook_combined.txt ', Encoding = ' UTF-8. ' ) AS F1: edge_list = f1.readlines () # formateado información lateral, que se retira al final de la \ n- para I en Rango (len (edge_list)): spiltList = edge_list [I] .replace ( ' \ n ' , "" ) .split ( " " ,. 1 ) edge_list2.append (spiltList) # lee la información del nodo debe ser leído desde el archivo, pero dado el nombre de nodo 0 a 4038, la sencillez directa traversal para I en Rango (4039 ): node_list.append (STR (I)) # calcula los coeficientes para cada nodo de clúster de nodo ennode_list: Imprimir (Node) getCE (Node, edge_list2) # coeficientes de salida para cada nodo de clúster de impresión (ce_list) # coeficiente promedio de la agrupación de salida de impresión (getAverageCE (ce_list)) SI la __name__ == " __main__ " : main ()
formato de datos facebook_combined.txt: